私はbashを使うのが初めてなので、次のコマンドを無効にしようとしています。
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -eq 0 ]]; then
echo "Sorry you are Offline"
exit 1
インターネットに接続している場合、このif条件はtrueを返します。逆のことをしたいのですが、どこかに!
を置いてもうまくいかないようです。
選んでいいですよ:
if [[ $? -ne 0 ]]; then # -ne: not equal
if ! [[ $? -eq 0 ]]; then # -eq: equal
if [[ ! $? -eq 0 ]]; then
!
は、それぞれ次の式の戻りを反転します。
良い
if ! wget -q --spider --tries=10 --timeout=20 google.com
then
echo 'Sorry you are Offline'
exit 1
fi
あなたが怠惰に感じているならば、これは操作の後に||
(or)と&&
(and)を使って条件を扱う簡潔な方法です:
wget -q --tries=10 --timeout=20 --spider http://google.com || \
{ echo "Sorry you are Offline" && exit 1; }
数値を比較しているので、 算術式 を使用することができます。これにより、パラメーターと比較の処理が簡単になります。
wget -q --tries=10 --timeout=20 --spider http://google.com
if (( $? != 0 )); then
echo "Sorry you are Offline"
exit 1
fi
-ne
の代わりに、!=
を使用できることに注目してください。算術の文脈では、$
をパラメータの前に付ける必要すらありません。
var_a=1
var_b=2
(( var_a < var_b )) && echo "a is smaller"
完璧に動作します。ただし、これは$?
特殊パラメータには当てはまりません。
さらに、(( ... ))
はゼロ以外の値をtrueと評価します。つまり、ゼロ以外の値の場合は戻り値0、それ以外の場合は戻り値1となるため、次のように短縮できます。
if (( $? )); then
しかし、これは節約されたキーストロークが価値があるより多くの人々を混乱させるかもしれません。
(( ... ))
構文はBashで利用可能ですが、 POSIXシェル仕様 (ただし可能な拡張子として言及されています)では必要ありません。
これはすべて言われているので、 Cole's answer および Steven's answer のように、私の考えでは$?
を完全に避けた方が良いです。
-ne
の代わりに等しくない比較-eq
を使うことができます。
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -ne 0 ]]; then
echo "Sorry you are Offline"
exit 1
fi