2016-06-20 13 views
1

私は次のUNIXシェルスクリプトを持っています。私は2つの整数 という変数、つまりaとbを持っています。UNIXシェルスクリプト:戻り値で終了する

aがbより大きいか等しい場合、シェルスクリプトはを返して0を返します。

それ以外の場合はが返され、1が返されます。

私の試み:

スクリプト:ConditionTest.shスクリプト実行

#!/bin/sh 

a=10 
b=20 

if [ $a -ge $b ] 
then 
     exit 0 
else 
     exit 1 
fi 
    .... 
    .... 
    .... 

$ ./ConditionTest.sh 
$ 

を:私が実行した後、任意の戻り値を取得しておりませんファイル。

+1

終了値は '$?'に格納されます。スクリプトを実行した後、 'echo $?'を実行します。値をスクリプト出力の一部として見たい場合は、それを表示してください: 'echo 0; exit 0'と 'echo 1;出口1 '。 –

+1

「戻り値を取得する」とは、「印刷された値なし」を意味しますか? – Jdamian

答えて

3

シェルは、最後のコマンドの終了ステータスを変数?に設定します。

mycommand 
echo $? 

を...か、その値に応じて何かを行うには、それを使用することができます:あなたは、単にそれを調べることができ

mycommand && echo "ok" || echo "failed" 

または代わりに、そして少しより読み:

if mycommand; then 
    # exit with 0 
    echo "ok" 
else 
    # exit with non-zero 
    echo "failed" 
if 
+1

私は気難しく、 '$? 'は変数ではなく値に展開されます。変数は '?'と呼ばれます。 – cdarke

+0

@cdarkeそうです!私は私の答えを修正します。 – Kusalananda

3

スクリプトは正常です。あなたはすべてのことを正しく行いました。

$ sh test.sh 
$ echo $? 
1 
$ 

10は20

それはこのようになりますテストするための別の方法以上でない:私たちはそれを実行し、戻り値をチェックどこだからここ

#!/bin/sh 

a=10 
b=20 

if [ $a -ge $b ] 
then 
     exit 0 
else 
     exit 1 
fi 

です:

コメントで述べたように
$ sh test.sh && echo "succeeded" || echo "failed" 
failed 

、あなたも常に、あなたの変数を引用する必要があります

if [ $a -ge $b ] 

であるべき:

if [ "$a" -ge "$b" ] 
+1

マイナーな改善:常に変数を二重引用符で囲みます。 '' "$ a" -ge "$ b" ''。それ以外の場合は、変数が空のときにコード内に見つからない意味の構文エラーが発生します。 – allo

+0

編集に同意した(同意する;私はいつもこれを行う)。もともと私はOPのコードをコピーして貼り付けていました。 – Will

0

以前の回答に追加するには、あなたが理解しておくべき重要なアイデアが出たときに、すべてのプログラムが多数を提供することです。この番号は、コマンドが正常に操作を完了したかどうかを報告するための方法として使用されます。そうでない場合、発生したエラーのタイプ。

同様に、実行された最後のコマンドの終了コードは、$?でアクセスできます。

スクリプトによって何も印刷されなかった理由は、スクリプトが1を返したが、コマンドの終了コードが印刷されないということです。(これは関数の呼び出しに似ていますが、関数からの戻り値を返しますが、出力されません)

関連する問題