shell 脚本常用的调试方式有
1.echo在可可疑的地方跟踪了解变量的值,并且也可以了解后续脚本的动作。
2.用tee过滤器来检查临界点的进程和数据流
3.设置选项-n -v -x 常用
scriptname 为 脚本名字
1)sh -n scriptname 不会运行脚本,用来检查脚本中的语法错误。
等同于把set -n和set -o -noexec 设置到脚本,注意有些语法错误还是不能被解析出来
脚本内容:
#!/bin/sh
echo debug shell
ehco #书写错误
执行:
[db10]:[/dsg10]$ sh -n test.sh
没有任何显示结果
2)sh -v scriptname 在执行一个脚本命令之前,打印这个命令.
等同于在脚本中设置set -v,set -v verbose-n -v 可以一起使用,sh -vn scriptname可以打印出详细的语法检查
[db10]:[/dsg10]$ sh -v test.sh
#!/bin/sh
echo debug shell
debug shell
ehco
test.sh: line 3: ehco: command not found
3)sh -x scriptname 打印脚本的执行结果
等同于脚本中设置 set -x,set -o -xtrace set -u 或 set -o nuunset设置在脚本中可以再没有声明的变量的地方,打印一个错误消息
[db10]:[/dsg10]$ vi test.sh
set -o -xtrace
#!/bin/sh
set -x -u
echo debug shell
ehco #错误语法
echo ${VAR} #未声明变量
[db10]:[/dsg10]$ sh test.sh
+ echo debug shell
debug shell
+ ehco
test.sh: line 6: ehco: command not found #错误提示
test.sh: line 9: VAR: unbound variable #未声明的变量抛出来了
4.用assert函数在脚本的临界点上测试变量或者条件
5.用变量$LINENO和内建命令caller
6.捕捉exit,脚本中then exit会触发0,即结束脚本本身,终结进程。这常用来捕捉exit命令做某事,比如强制打印变量值,