Script shell para incrementar a contagem de entradas

2

Eu quero um script que aumente a contagem quando o script for executado. Basicamente, quero enviar uma notificação por e-mail quando encontrar 10 dispositivos do mesmo país e os scripts forem executados após cada evento inativo.

Portanto, se eu definir o contador como 0, o script atualizará o valor como 1, mas na próxima vez que o script executar, ele verificará se o contador está definido como 0 e mostrará novamente o valor como 1.

Eu preciso salvar o valor do contador anterior em relação ao nome do país, pois ambos os valores não são fixos. Além disso, há n number de dispositivos que pertencem a n number of countries.

    
por user28104 30.11.2012 / 18:02

2 respostas

3

Um arquivo / contador por país.

#!/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
    
por 01.12.2012 / 03:38
0

Você precisa escrever o país para um arquivo antes de sair do script como a última coisa. Na próxima vez que você executar o script, precisará ler esses valores no mesmo arquivo. Caso contrário, você não pode manter os valores nas variáveis de memória como cada script de shell que você executa, executa um subshell com suas próprias variáveis e destrói o shell e o conteúdo, quando ele sai.

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
    
por 30.11.2012 / 18:23