发表于2016/4/27 0:03:30 1693人阅读程序员
分类: Shellshell
#!/bin/bash foriin {1..6}; do echo $i done echo "Script executed"
正常执行编程
[pengchengxiang@localhost ~]$ bash test.sh 1 2 … … Script executed调试执行
[pengchengxiang@localhost ~]$ bash -x test.sh + foriin '{1..6}' + echo 1 1 + foriin '{1..6}' + echo 2 2 … … + echo 'Script executed' Script executed2.使用set -x和set +x对脚本进行部分调试,将脚本执行的每一行输出到stdout;
Test.sh文件 bash
#!/bin/bash foriin {1..6}; do set -x echo $i set +x done echo "Script executed"部分调试输出
[pengchengxiang@localhost ~]$ bash -x test.sh + foriin '{1..6}' + set -x + echo 1 1 + set +x + echo 2 2 … … Script executed3.使用自定义格式显示显示信息,经过传递_DEBUG环境变量来创建调试风格;
#!/bin/bash function DEBUG() { [ "$_DEBUG" == "on" ] && $@ || :
# “comand1 && command2 || command3”的意思就是若是command1 是成立的,则执行command2,不成立则执行command3.
#这里的command2 command3都有点特殊。command3是一个冒号:,它表示的意思是啥也不作。command2是 $@,咱们记得在shell 脚本执行时,
#它表示脚本执行的参数列表里的全体参数。在这里它在一个函数里面,表示函数执行时的参数列表里的全部内容。
} foriin {1..6}; do DEBUG echo $i #能够看到执行DEBUG函数时,能够理解为函数参数是echo $i,那么$@就是函数参数echo $i,也就是说若是若是
#[ "$_DEBUG" == "on" ] 则 echo $i,不然 :,即啥也不作done echo "Script executed" 正常执行,不输出DEBUG日志信息
[pengchengxiang@localhost ~]$ ./test.sh Script executedDEBUG模式执行,输出DEBUG日志信息
[pengchengxiang@localhost ~]$_DEBUG=on ./test.sh 1 2 3 4 5 6 Script executed4.你也能够在#!/bin/bash -xv,这样就能够不使用任何选项就能够启动调试功能了;
#!/bin/bash -xv function DEBUG() { [ "$_DEBUG" == "on" ] && $@ || : } foriin {1..6}; do DEBUG echo $i done echo "Script executed"不添加选项,直接执行 【注意:这种在/bin/bash 后指定 -xv的,只有使用./XXXX.sh的方式才能够看到调试信息,使用sh XXXX.sh看不到调试】
[pengchengxiang@localhost ~]$./test.sh #!/bin/bash -xv function DEBUG() { [ "$_DEBUG" == "on" ] && $@ || : } foriin {1..6}; do DEBUG echo $i done + foriin '{1..6}' + DEBUG echo 1 + '[' '' == on ']' + : … … echo "Script executed" + echo 'Script executed' Script executed