如何在shell中获取测试命令返回码?

时间:2016-05-03 11:39:09

标签: shell exit-code

是否可以从命令中获取返回代码的更好方法。例如:

$ test $(ls -l) ||echo 'ok'
-bash: test: too many arguments
ok

上面的脚本在test命令中有错误,因为它似乎解析输出“ls -l”而不返回代码。

我知道使用“if”语法工作正常,但需要多行一行。

ls -l
if [ $? -eq 0 ];then
   echo 'ok'
fi

4 个答案:

答案 0 :(得分:2)

if语句捕获命令的返回值,例如使用ls

if ls -l; then
    echo 'ok'
fi

答案 1 :(得分:2)

您可以使用&&||来使这些内容成为一行。例如,在以下内容中:

ls -l && echo ok
仅当echo ok&&)之前的命令返回ls -l时,

0才会运行。

另一方面,在下面:

ls -l || echo 'not ok'
仅当echo 'not ok'之前的命令返回非零时,

||才会运行。

此外,您可以使用if..else

;阻止单行播放
if ls -l;then echo ok;else echo 'not ok';fi

但这可能会使您的代码难以阅读,因此不建议使用。

答案 2 :(得分:0)

这里的另一个问题是如何在下面示例。

ls -l xxx || (echo "file xxx not exist" ;  exit 1);echo "OK"

作为样本。如果文件 xxx 不存在。第二个 echo OK 以前仍然可以工作。

如果文件 xxx 不存在,我希望退出返回代码 1

答案 3 :(得分:-2)

而不是使用

test $(ls -l) ||echo 'ok'

你应该使用

[[ $(ls -l) ]] && echo "ok"

[[ ]]是测试,如果命令成功返回(返回代码为零),则它会在&&之后执行命令。

  • [[ ]] test
  • $( )执行命令
  • ls -l命令运行
  • 如果测试成功,则
  • &&运行

希望这有帮助!