man bash
から :
$?最後に実行されたフォアグラウンド パイプラインの終了ステータスに展開します。
echo $?
最後のコマンドの終了ステータスを返します。 127
を獲得しました これは、最後に実行されたコマンドの終了ステータスであり、何らかのエラーで終了しました (おそらく)。コマンドが正常に終了すると、終了ステータス 0
で終了します (おそらく)。最後のコマンドの出力は 0
でした echo $v
以降 前の行はエラーなしで終了しました。
コマンドを実行すると
v=4
echo $v
echo $?
次のように出力されます:
4 (from echo $v)
0 (from echo $?)
次もお試しください:
true
echo $?
0
が返されます .
false
echo $?
1
が返されます .
true
コマンドは何もせず、ステータスコード 0
で終了します;そして false
コマンドも何もせず、失敗を示すステータス コード (つまり、ステータス コード 1
) で終了します。 ).
$?
前のコマンドがどのように機能したか (終了ステータスを確認する) に応じて何をすべきかを決定する方法として、シェルスクリプトで役立ちます。終了ステータスは 0
であると予想できます 前のコマンドが機能した (正常に終了した) 場合、それ以外の場合はゼロ以外の数値。
デモの例:
#!/bin/bash
patience=3
read -t "$patience" -p "Press 'Enter' if you run Unix or Linux, otherwise press 'ctrl+d' "
status="$?"
if [[ $status -eq 0 ]]
then
echo "That's great :-)"
elif [[ $status -eq 1 ]]
then
echo "(exit status=$status)
You are welcome to try Unix or Linux :-)"
else
echo "(exit status=$status)
You did not answer within $patience seconds. Anyway :-)"
fi
echo "'Unix & Linux' is a question/answer web site for
Unix and Linux operating systems"
Unix や Linux なしで bash シェルスクリプトを実行する方法を尋ねられるかもしれません;-)
/etc/network/interfaces が DHCP クライアントまたは静的アドレスを使用するいくつかのインターフェースを定義しているため、dhcpcd を実行していません
traceroute コマンド:置換または代替