两个非常有用的Bash脚本编程命令

2013年08月13日Bash编程命令

Shell脚本可以完成很多任务,但因为Shell脚本运行时遇到异常还是会继续运行,这些问题有时很难发现,所以有两个命令可以帮助你来调试脚本,这是非常有用的命令。

命令一:使用 Set -u

你有没有因为一个变量没有初始化而经常崩溃?我知道我有,而且很多次。

chroot=$1
...
rm -rf $chroot/usr/share/doc

如果你忘记初始化一个变量就运行上面的脚本,你将会删除所有的系统文件,而不是只在chroot目录下的文档。你要做些什么呢?幸运的是bash为您提供了set -u,当你尝试使用一个未初始化的变量将会自动退出脚本。

mike% bash /tmp/shrink-chroot.sh
$chroot=
mike% bash -u /tmp/shrink-chroot.sh
/tmp/shrink-chroot.sh: line 3: $1: unbound variable
mike%

命令二:使用 Set -e

你写的每一个脚本都应该在开始包含set -e。这告诉bash如果任何一语句返回一个非真的值将退出脚本。使用-e的好处是它可以防止滚雪球般的变成严重错误,能尽快地捕获到错误。

使用-e来检查错误为把你释放出来。如果你忘了检查,bash将为你做。不幸的是这意味着你不能检查$?返回值,因为你得不到值如果返回不是为零的话。你可以使用另外一种结构:

command
if [ "$?"-ne 0]; then echo "command failed"; exit 1; fi

可以替换成

command || { echo "command failed"; exit 1; }

或者

if ! command; then echo "command failed"; exit 1; fi

如果你有一个命令需要返回非零值,或者你对返回值不感兴趣?你可以使用command || true,或者你有一段很长的代码,你可以暂时关闭错误检查,但我建议你谨慎使用。

set +e
command1
command2
set -e

相关文档说明,默认情况下bash返回管道中最后一个命令的值,也许不是你想要的结果。例如,false | true会被视为成功执行。如果你想让命令执行失败,可以使用set -o pipefail


关于麦客园

集基督信仰,IT技术,生活的家园,分享生活中的点点滴滴。关注Web前端, iOS, Android, 网络技术, Linux, 开源硬件等。

友情链接




联系麦客园


您的批评和鼓励都是我最大的支持。