【问题标题】:Simple Shell if condition not working如果条件不起作用,则为简单外壳
【发布时间】:2014-02-21 20:06:37
【问题描述】:
if [ $? -ne 0 ]; then echo "error"; else echo "success"; fi
成功,并且
if [ ! -f index.html ]; then echo "error"; else echo "success"; fi
成功了,但出于某种原因
if [ ! -f index.html ] || [ $? -ne 0 ]; then echo "error"; else echo "success"; fi
失败。
在我的情况下,“index.html”存在并且 $? = 0
【问题讨论】:
标签:
bash
shell
if-statement
file-exists
【解决方案1】:
试试这个:
if [[ ! -f index.html || $? -ne 0 ]]; then echo "error"; else echo "success"; fi
【解决方案2】:
您执行的每个命令都会更改$?。最好立即将其存储在一个新变量中,然后在空闲时检查它。
【解决方案3】:
if [ ! -f index.html ] || [ $? -ne 0 ]
$? 的值反映了[ ! -f index.html ] 的退出代码。由于index.html 存在,该语句导致非零退出代码。
试试吧:
if [ $? -ne 0 ] || [ ! -f index.html ] ; then echo "error"; else echo "success"; fi
因为首先执行[ $? -ne 0 ],所以$? 的值将反映先前命令的退出代码,而不是[ ! -f index.html ] 的结果。
另一种可能性是将两个测试放在一个条件表达式中:
if [ ! -f index.html -o $? -ne 0 ]; then echo "error"; else echo "success"; fi
因为现在只有一个测试表达式,所以 bash 在运行 ! -f index.html 测试之前计算 $?。因此,$? 将是先前命令的退出代码。