ホストアドレスのリスト(非連続)をpingし、出力を「up」または「down」として記録する必要があります。始めましたが、スクリプトに問題があるようです。例えば。 150個のホストを含むホストファイルに対して次のスクリプトを実行すると、出力ファイルから400個以上の「up」または「down」応答が表示されます。
#!/usr/bin/bash
#script name: lrkdc01ping.sh
date >> /home/insight/scripts/lrkdc01ping.out
cat /home/insight/scripts/lrkdc01.txt | while read output
do
ping -c 1 "$output" >> /dev/null
if [ $? -eq 0 ]; then
echo "node is up" >> /home/insight/scripts/lrkdc01ping.out
else
echo "node is down" >> /home/insight/scripts/lrkdc01ping.out
fi
done
答え1
毎回出力ファイルを追加する代わりに、実行されるたびに出力ファイルを消去する次のようなことを提案します。
#!/usr/local/bin/bash
outfile="/home/insight/scripts/lrkdc01ping.out"
date > "$outfile"
while read output; do
echo -n "$output is " >> "$outfile"
if ping -c1 "$output" > /dev/null 2>&1; then
echo "up" >> "$outfile"
else
echo "down" >> "$outfile"
fi
done < /home/insight/scripts/lrkdc01.txt
主な違いは、callの>
代わりに使用することです。したがって、実行するたびにファイルがきれいになり、終了コードの使用が簡単になります。>>
date
ping
クリーナー
if verb; then
action
else
failure_action
fi
代わりに
verb
if [[ 0 -eq $? ]]; then
action
else
failure_action
fi
また、出力ファイルの名前を移動または変更することにした場合は、4つの場所を編集する必要なく、変数に入れて1つの場所でのみ更新できます。私の一般的な経験則は、「同じ内容を複数回入力すると抽象化する必要がある」です。