bash-shell高度なプログラミング--ステータスコードの終了と終了

3142 ワード

終了ステータスコードと終了ステータスコードexitはスクリプトを終了するために使用されることはよく知られています.exitを使用してスクリプトを終了することもできます.よく使われるC言語のように、スクリプトの親プロセスに渡される値も返されます.親プロセスはこの値を使用して次の処理を行います.
実際にはlinuxでどのコマンドを実行しても終了コードが返され、成功したコマンドは0を返し、成功しなかったコマンドはゼロ以外の値を返し、ゼロ以外の値は通常エラーコードとして解釈されます.
もちろん、スクリプトの関数やスクリプト自体も終了ステータスコードを返し、スクリプトで最後に実行されたコマンドがスクリプトが返すステータスコード(exit以前のコマンド)を決定します.
#!/bin/bash

tldr ls

. . .

#    exit                  
ls -l name

exit
# exit $?

パラメータを持たないexitコマンドとexit$?スクリプトの最後にexitを書かなくても効果は同じですbashスクリプトの$?は、最後に実行されたコマンドの終了ステータスコードを保存し、関数が戻った後、$?は、関数の最後に実行されたコマンドの終了ステータスコードを同様に保存する.この終了ステータスコードは、スクリプトで最後に実行されたコマンドの終了ステータスコードです.
#!/bin/bash
echo hello
echo $?
#      0,         .
lskdf
#     .
echo $?
#        ,         .
echo
exit 113
#   113     shell.
#         ,             "echo $?".
#     
andrew@andrew:/work/bash/src$ bash exit_example.sh 
hello
0
exit_example.sh:   5: lskdf:      
127

andrew@andrew:/work/bash/src$ echo $?
113
bashテストスクリプトのコマンド実行の結果を使用すると、特に便利になります.$?論理非操作は、コマンドまたは条件のテスト結果を反転させ、終了ステータスコードに影響します.
true # "true"      .
echo "exit status of \"true\" = $?"
# 0

! true
echo "exit status of \"! true\" = $?"
# 1
#   : "!"       .
# !true   "command not found"  

#        '!'  ,      Bash     .

true
!true
#         ,        .
#            (true).