스크립트가 실행되는 동안 카운트를 증가시키는 스크립트를 원합니다. 기본적으로 동일한 국가에서 10개의 장치가 다운된 것을 발견하면 이메일 알림을 보내고 각 다운타임 후에 스크립트가 실행되도록 하고 싶습니다.
따라서 카운터를 0으로 설정하면 스크립트는 값을 1로 업데이트하지만 다음에 스크립트가 실행될 때 카운터가 0으로 설정되었는지 확인하고 값을 다시 1로 표시합니다.
국가명과 관련된 이전 카운터 값은 두 값 모두 고정되어 있지 않기 때문에 저장해야 합니다. 여러 국가 n
에 속한 장치 도 많이 있습니다 .n
답변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