コマンドを実行するスクリプトを作成しようとしていますが、コマンドの出力が3の場合はスクリプトを終了する必要があります。3以外の場合、スクリプトは数が3でないことを示す電子メールを送信する必要があります。以下にこのコードを書いていますが、何らかの理由で実行するたびに出力が3ですが、3ではないという電子メールが届きます。
#!/bin/bash
Server_Count=""
nslookup servers | grep -i "Address: 10" | wc -l > /dev/null
if [ $? == 3 ]; then
Server_Count="$?"
else
echo "Server Count is not 3 .. Please check" | mail -s "Server count issue" [email protected]
fi
ベストアンサー1
$?
前のコマンドの結果ではなく、前のコマンドの終了コードです。したがって、コマンドが成功したと仮定すると$?
ゼロになります。
コマンド置換をしたい。
#!/bin/bash
server_count=$(nslookup servers | grep -i "Address: 10" | wc -l)
if [[ "$server_count" -ne 3 ]]; then
echo "Server Count is not 3 .. Please check" | mail -s "Server count issue" [email protected]
fi
server_count
これは結果に設定されるため、wc -l
if文でリセットする必要はありません。だから私はifチェックを無効にしました(サーバーが重要な場合確かに電子メールを送信するには3です。そうでなければ何もしません。)
ここでは、整数比較の正しい検査である-ne
検査も使用されます。
参考までに、[ ... ]
bash比較演算子と一緒にPOSIXシェルを使用してテストしています==
。これはまだ多くのシステムで機能しますが、使用する場合は使用する必要が[ ... ]
あり=
、使用する場合はまたは[[ ... ]]
使用できます。=
==