Linux编写SHELL实用提示

SHELL实用技巧

当脚本失败时退出

有时某个命令失败,还会继续执行下去,可能最终导致逻辑错误。当执行出错,实用下面语句退出脚本:

# let script exit if command fails
set -o errexit
OR
set -e

实用未声明变量时,退出脚本

实用未声明变量,会导致逻辑错误。当使用未声明变量,使用下面语句退出当前脚本。

# let script exit if an unsed variable is used
set -o nounset
OR
set -u

使用双引号引用变量

引用变量时使用双引号,有助于防止分词(空格)和不必要的全局(识别和扩展通配符):

#!/bin/bash
#let script exit if a command fails
set -o errexit 
#let script exit if an unsed variable is used
set -o nounset
names="Howtoing FOSSMint Linusay"
echo "Names with double quotes" 
echo
for name in "$names"; do
echo "$name"
done
exit 0

使用脚本中的功能

始终记住,使用函数来模块化代码,并使脚本更易读和可重用:

function myfunc() {
    command1;
    command2;
}

使用=进行字符串比较

val1="apple"
val2="banana"
if [ "$val1" = "$val2" ]

命令输出内容替换使用$(command)

命令替换,用其执行结果替换该命令,使用$(command)而不是反引号来进行命令替换

# Wrong
user=`echo "$UID"`

# Right
user=$(echo "$UID")

使用只读来声明静态变量

静态变量的值在脚本中不能被改变

readonly passwd_file="/etc/passwd"
readonly group_file="/etc/group"

使用大写名称为环境变量,小写为自定义变量

所有bash环境变量都以大写字母命名,因此使用小写字母命名自定义变量可以避免冲突

跟踪SHELL脚本中命令的执行

启用SHELL脚本的调试模式

启用脚本调试模式的调试选项:

  1. -v 显示脚本中所有行,会激活详细模式
  2. -n (简称NOEXECexecution),读取所有命令,但不执行它们。此选项激活语法检查模式
  3. -x (简称X跟踪或执行跟踪),告诉SHELL,显示正在执行的所有命令及参数。此选项启用SHELL跟踪模式。

使用SHELL的set内置命令启用调试:
使用set built-in命令调试shell脚本的给定部分,例如函数。这种机制很重要,因为它允许我们在shell脚本的任何段上激活调试。 我们可以打开下面的表单,其中选项是任何调试选项使用set命令调试模式:

options表示上面的调试选项之一或组合
启用调试模式:

set -option

禁用调试模式:

set +option

如果在SHELL脚本中的不同段启用了几种调试模式,也可以用下述方式一次禁用所有调试模式:

set -

SHELL启用调试模式

启用详细调试模式
-v 调试选项,告诉SHELL显示所有行,阅读它们。

命令行用法:

bash -v script.sh

启用语法检查调试模式
-n 激活语法检查调试模式,指示SHELL读取所有命令,但不执行它们,仅检查使用的语法,如果检查出错误,在终端打印,否则不显示任何内容。

命令行用法:

bash -n script.sh

启用跟踪执行调试模式
-x 跟踪Shell脚本中命令的执行。这指示SHELL在终端上执行显示所有命令和参数。

命令行用法:

bash -x script.sh
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,263评论 2 33
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,259评论 19 139
  • 本文全面系统地介绍了shell脚本调试技术,包括使用echo, tee, trap等命令输出关键信息,跟踪变量的值...
    liuzg0734阅读 938评论 0 14
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,999评论 6 342
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,714评论 9 468