Linux脚本debug输出


对Linux脚本进行debug日志输出,在开发脚本的时候是非常有用的,这里我介绍两种进行debug输出的办法。

Debug选项

学习linux,debug脚本可以说是必备技能。在练习之前,我们先准备一个脚本,下面是我写的一个简单脚本:

ubuntu@VM-0-17-ubuntu:~$ tee demo.sh
a=1
a=1
b=2
b=2
c=s
c=s
expr a + b + c                          
expr a + b + c
echo $c
echo $c
^C

最后的^C不是文件内容,是我按Ctrl+C退出时控制台的输出,而上面的重复,也是我每输入一行,控制台就反显一行,并不是输入了两行同样的内容。为此,可以检查下脚本内容:

ubuntu@VM-0-17-ubuntu:~$ cat demo.sh 
a=1
b=2
c=s
expr a + b + c
echo $c

Debug脚本,不过是一个简单的-x选项,可以看到脚本运行时的每一行而已。现在我给脚本加上权限执行:

ubuntu@VM-0-17-ubuntu:~$ chmod +x demo.sh 
ubuntu@VM-0-17-ubuntu:~$ bash -x demo.sh 
+ a=1
+ b=2
+ c=s
+ expr a + b + c
expr: non-integer argument
+ echo s
s
ubuntu@VM-0-17-ubuntu:~$ ./demo.sh 
expr: non-integer argument
s

区别在于,debug输出更加详细,更容易定位错误所在行。

Set命令

除了bash的-x选项外,直接使用使用set -x也能debug,但是效果并不好,下面是个例子:

ubuntu@VM-0-17-ubuntu:~$ set -x
+ set -x
++ history -a
ubuntu@VM-0-17-ubuntu:~$ ./demo.sh 
+ ./demo.sh
expr: non-integer argument
s
++ history -a
ubuntu@VM-0-17-ubuntu:~$ set +x
+ set +x
ubuntu@VM-0-17-ubuntu:~$ ./demo.sh 
expr: non-integer argument
s

&esmp; 但是在脚本里使用的话效果就不一样了,以下是我修改后的脚本:

set -x
a=1
b=2
c=s
expr a + b + c
echo $c
set +x

我在脚本开头set -x开启debug,在脚本尾部加上set +x关闭debug,执行效果如下:

ubuntu@VM-0-17-ubuntu:~$ ./demo.sh 
++ a=1
++ b=2
++ c=s
++ expr a + b + c
expr: non-integer argument
++ echo s
s
++ set +x

版权声明:本文为m0_66201040原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。