2014-01-29 38 views
1
if [ $? -ne 0 ]; then echo "error"; else echo "success"; fi 

条件成功,简单Shell如果不工作

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

回答

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 

因为有一个现在的单个测试表达式,在运行! -f index.html试验前的bash评估$?。因此,$?将成为任何先前命令的退出代码。

0

试试这个:

if [[ ! -f index.html || $? -ne 0 ]]; then echo "error"; else echo "success"; fi 
0

每个命令你执行的变化$?。最好立即将其存储在一个新变量中,然后在闲暇时检查它。