web-dev-qa-db-ja.com

[[$? -ne 0]]; .kshの意味

私は次のコードを実行して、すべてが実行された場合に失敗した場合にメールでエラーメッセージを送信します。

if [[ $? -ne 0 ]]; then
  mailx -s" could not PreProcess files" [email protected]
else            
  mailx -s" PreProcessed files" [email protected]
fi
done

私はLinuxコーディングを初めて使用するのですが、何を理解したいのですかif [[ $? -ne 0 ]]; 手段

11
Rahul sawant

それを分解すると、簡単な用語:

[[ and ]]

...真実性についてテストが行​​われていることを示します。

$?

...は、最後に実行されたコマンドの終了コードを保持する変数です。

-ne 0

...左側のものが($?)は「等しくない」「ゼロ」です。 UNIXでは、ゼロで終了するコマンドは成功しましたが、他の値(1、2、3 ...最大255)での終了は失敗です。

17
bishop
if [[ $? -ne 0 ]]; 

この直前のif条件の戻りコードをチェックしています。

  • $?は戻りコードを意味します
  • $? -ne 0は、0が成功と見なされるため、前のコマンドがエラーを返したことを意味します
6
anubhava

前のコマンドがエラー戻りコードを返した場合。

1
Claudio

おそらく、スニペットは次のようなコードの一部です。

 for var in list of words; do
   cmd $var
   if [[ $? -ne 0 ]]; then
      mailx -s" could not PreProcess files" [email protected]
    else            
      mailx -s" PreProcessed files" [email protected]
   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" [email protected]
done

[[ $? -ne 0 ]]句はcmdの戻り値をチェックするハックな方法ですが、$?を明示的にチェックする必要はほとんどありません。シェルにif句でコマンドを呼び出してチェックを行わせると、コードはほぼ常にきれいになります。

0
William Pursell