web-dev-qa-db-ja.com

$の使い方は?テストして機能を確認しますか?

    #!/bin/sh

function checkExit(){
    if test "$?" != "0"; then
      echo Command $1 exited with abnormal status
      exit 1;
    else echo $?
    fi
}

function echoThenRun () { # echo and then run the command
  echo $1
  $1
  ret=$?
  echo $ret
  return $ret
}
file=test_file
echo > $file
echoThenRun "test -f $file"
checkExit $file
echo "all right!"

スクリプト実行の出力:

$  ~/Downloads/test.sh 
test -f test_file
0
1 # why 1 here??
all right!
7
simpatico

あなたがやっていることのより簡単な方法があります。 set -xを使用すると、スクリプトは実行前に各行を自動的にエコーします。

また、別のコマンドを実行するとすぐに、$?はそのコマンドの終了コードに置き換えられます。

簡単なテストアンドフォーゲット以外の方法で変数を処理する場合は、変数にバックアップする必要があります。 [は、実際には独自の終了コードを持つプログラムです。

例えば:

set -x # make sure the command echos
execute some command...
result="$?"
set +x # undo command echoing
if [ "$result" -ne 0 ]; then
    echo "Your command exited with non-zero status $result"
fi
10
amphetamachine

コマンドtest "$?" != "0"が$を設定するように見えますか? to 1.値$? testの引数で使用されます。 testは$を設定しますか? 「0」は語彙的に「0」に等しいため、ゼロ以外の値に。 "!="を指定すると、testはゼロ以外を返します。

3
Bruce Ediger