shell 脚本需要详细报告故障。你想在命令出现问题时看到错误消息,但 if 语句更多地只是转移语句的执行流程。
解决方案
一些 shell 程序员的惯用做法是配合使用 || 和命令来输出调试 / 错误消息,如下所示:
cmd || printf "%b" "cmd failed. You're on your own\n"
讨论
减少if数量,&& 告诉 bash 如果第一个表达式为假,则不再评估第二个表达式,与此类似,||
告诉 bash 如果第一个表达式为真(成功),则不再评估第二个表达式。和 && 一样,|| 可以追溯到逻辑运算和 C 语言,如果 A OR B 中的表达式 A 为真,则最终结果就为真,无须评估表达式 B。在 bash 中,如果第一个表达式返回 0(成功),则跳过剩下的表达式,继续往下执行。仅当第一个表达式返回非 0 值(命令出错)时,才必须评估第二个表达式中的命令。
shell 使用 0 代表真,非 0 代表假,这正好和其他编程语言相反。在 shell 中判断逻辑表达式的结果时,一定要注意这点。
警告!千万别被下面这条语句骗了。
cmd || printf "%b" "FAILED.\n" ; exit 1
exit 无论如何都不会执行!||
仅作用于前两个命令。如果只想在 cmd 出错时执行 exit,那么要将其与 printf 分组到一起,以便两者被视为一个单元。语法如下所示:
cmd || { printf "%b" "FAILED.\n" ; exit 1 ; }
注意,最后一个命令必须以分号结尾,闭合花括号与其中的内容之间要用空白字符分隔。具体的讨论参见保存多个命令的输出。
酷客网相关文章:
评论前必须登录!
注册