如果[[$? -ne 0]];意思是.ksh

时间:2013-11-22 15:02:34

标签: linux bash unix ksh

我有一段代码,上面写着如果一切都执行了邮件,如果邮件失败,邮件将会收到错误信息。

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 ]];的含义

4 个答案:

答案 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子句中的命令来执行检查,则代码几乎总是更清晰。