コマンドの出力が「3」であることを確認するスクリプトを作成します。

コマンドの出力が「3」であることを確認するスクリプトを作成します。

コマンドを実行するスクリプトを作成しようとしていますが、コマンドの出力が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 -lif文でリセットする必要はありません。だから私はifチェックを無効にしました(サーバーが重要な場合確かに電子メールを送信するには3です。そうでなければ何もしません。)

ここでは、整数比較の正しい検査である-ne検査も使用されます。

参考までに、[ ... ]bash比較演算子と一緒にPOSIXシェルを使用してテストしています==。これはまだ多くのシステムで機能しますが、使用する場合は使用する必要が[ ... ]あり=、使用する場合はまたは[[ ... ]]使用できます。===

おすすめ記事