【问题标题】: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 测试之前计算 $?。因此,$? 将是先前命令的退出代码。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多