我有一段代码,上面写着如果一切都执行了邮件,如果邮件失败,邮件将会收到错误信息。
if [[ $? -ne 0 ]]; then
mailx -s" could not PreProcess files" xyz@abcd.com
else
mailx -s" PreProcessed files" xyz@abcd.com
fi
done
我是linux编码的新手,我想了解if [[ $? -ne 0 ]];
的含义
答案 0 :(得分:15)
分解,简单的术语:
[[ and ]]
...表示正在进行真实性测试。
$?
...是一个包含最后一次运行命令的退出代码的变量。
-ne 0
...检查左边的东西($?
)是否“不等于”为“零”。在UNIX中,以零为退出的命令成功,而具有任何其他值(1,2,3 ......最多255)的退出是失败。
答案 1 :(得分:5)
if [[ $? -ne 0 ]];
正在检查之前的if条件的返回代码。
$?
表示返回代码$? -ne 0
表示上一个命令返回错误,因为0被视为成功答案 2 :(得分:1)
如果上一个命令返回错误返回码。
答案 3 :(得分:-1)
据推测,该代码段是代码的一部分,如下所示:
for var in list of words; do
cmd $var
if [[ $? -ne 0 ]]; then
mailx -s" could not PreProcess files" xyz@abcd.com
else
mailx -s" PreProcessed files" xyz@abcd.com
fi
done
可以(并且应该)更简单地重写为:
for var in list of words; do
if ! cmd $var; then
message="could not PreProcess files"
else
message="PreProcessed files
fi
mailx -s" $message" xyz@abcd.com
done
[[ $? -ne 0 ]]
子句是检查cmd
的返回值的一种hackish方式,但几乎总是不必明确检查$?
。如果让shell通过调用if子句中的命令来执行检查,则代码几乎总是更清晰。