简单的外壳如果条件不起作用


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

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会评估$?。因此,$?将是先前命令的退出代码。

尝试一下:

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

您执行的每个命令都会更改$?。最好立即将其存储在新变量中,然后在闲暇时检查。

相关内容

  • 没有找到相关文章

最新更新