항목 수를 늘리는 쉘 스크립트

항목 수를 늘리는 쉘 스크립트

스크립트가 실행되는 동안 카운트를 증가시키는 스크립트를 원합니다. 기본적으로 동일한 국가에서 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

관련 정보