スクリプトの実行中にカウントを増やすスクリプトが必要です。デフォルトでは、同じ国で10台のデバイスがダウンしていることがわかったら、電子メール通知を送信し、各ダウンタイム後にスクリプトを実行したいと思います。
したがって、カウンタを0に設定すると、スクリプトは値を1に更新しますが、次回スクリプトが実行されるとカウンタが0に設定されていることを確認し、値を1に戻します。
国名に関連付けられた以前のカウンタ値は両方の値が固定されていないため、保存する必要があります。さまざまな国n
に属するデバイスもたくさんあります。n
答え1
国ごとに1つのファイル/カウンタ。
#!/bin/bash
#Country name is specified as a comamnd line argument
# ie device_count.sh Brazil
if [[ -z "$1" ]] ; then
echo "Please specify country name" >&2
exit 1
fi
#Create a new file per country if one doesn't exist already
COUNTER_FILE=/var/tmp/devices.$1
if [[ -r $COUNTER_FILE ]] ; then
COUNT=$(<$COUNTER_FILE)
else
COUNT=0
fi
#Increment counter and save to file
echo $(( $COUNT += 1 )) > $COUNTER_FILE
#check if we need to send email
if [[ $(( $COUNT % 10 )) -eq 0 ]] ; then
#We have reached 10 - we need to send an email
echo "BLAH BLAH BLAH " | mailx -s "reached 10" [email protected]
fi
答え2
スクリプトを終了する前に、国の数をファイルに記録する必要があります。次回スクリプトを実行するときは、同じファイルからこの値を読み取る必要があります。そうしないと、実行している各シェルスクリプトは独自の変数でサブシェルを実行し、終了時にシェルとコンテンツを破壊するため、メモリ変数に値を保持できません。
x="$country"
count=$(cat ${country})
#instead of starting from 0 each time, start from the content of this file
#you need to manually create each country file with value 0 in it
#before start using this struct.
for device_count in $x
do
count=expr $count + 1
echo "Country_[$device_count] count $count"
if [ count -eq 5 ];
then
echo "email to be sent "
fi
done
echo ${count} > ${country}
#at this point you overwrote the file named as
#the name of country you are working here