アイテム数を増やすシェルスクリプト

アイテム数を増やすシェルスクリプト

スクリプトの実行中にカウントを増やすスクリプトが必要です。デフォルトでは、同じ国で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

関連情報