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
答案 0 :(得分: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
。因此,$?
将是先前命令的退出代码。
答案 1 :(得分:0)
请改为尝试:
if [[ ! -f index.html || $? -ne 0 ]]; then echo "error"; else echo "success"; fi
答案 2 :(得分:0)
您执行的每个命令都会更改$?
。最好立即将其存储在一个新变量中,然后随意检查。