shell测试总是退出

时间:2013-11-30 22:33:04

标签: shell conditional-statements exit

我是shell的前端,目前我写了一个小脚本,我遇到了一个没有任何错误的问题:/

此代码总是退出我的脚本,我不明白为什么:

[[ -x $PATH ]] || log_failure_msg "Binary file not found or not executable!"; exit 0

当$ PATH有效时,我什么都没有,如果路径错了,我收到了失败的消息。

如果我删除log_failure_msg "Binary file not found or not executable!";脚本完美地工作-_-

如果没有if / fi条件,我能解决这个问题吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

问题是优先事项,正如phlogratos所解释的那样。但是,你不能使用括号,因为它们会产生一个子shell,你将退出那个 shell。对于这个特殊问题,存在花括号。它们具有几乎相同的语义,但它们在当前 shell中生成作业。

$ cat a.sh 
[[ -f file ]] || { echo error; exit 0; }
echo "ok"
$ touch file
$ ./a.sh 
ok
$ rm file 
$ ./a.sh 
error
$ 

答案 1 :(得分:-1)

[[ -x $PATH ]] || log_failure_msg "Binary file not found or not executable!"; exit 0

相当于

{ [[ -x $PATH ]] || log_failure_msg "Binary file not found or not executable!" } ; exit 0

您需要的是

[[ -x $PATH ]] || { log_failure_msg "Binary file not found or not executable!"; exit 0 }

我假设你正在使用bash。 bash手册页说明:

..., && and || have equal precedence, followed by ; and &, which have equal precedence.