PDA

Visualizza la versione completa : Script da shell


maxtn
27-09-2005, 10:25
Qualcuno mi sa dare una mano? non ho mai programmato da shell...

Ho una cartella di file log così:
.....
c000007285
c000007286
c000007287

e un file "numeratore" che indica il prossimo numero disponibile per il log, cioè 7288

vorrei fare uno script che:
- quando il file "numeratore" viene aggiornato:
- controlla l'ultimo file log, che è in fase di scrittura, finchè nell'ultima riga trova "SESSION END", a quel punto devo copiare il file numeratore in un'altra cartella.

Mutato
27-09-2005, 10:43
Non ho capito molto, ma farei cosi`:



#!/bin/bash

X="1"

# Cerco la stringa END SESSION
while [ $X != "0" ]; do

X=`cat <filelog> | grep 'END SESSION' > /dev/null; echo $?`

done

# Quando la trovo la variabile $X assume il valore 0
# Allora posso spostare il file contatore
if [ $X == "0" ]; then

mv <filecontatore> $HOME/your/dir

fi

maxtn
27-09-2005, 11:02
Provo a spiegarmi meglio...

Uso hylafax, ci sono due numeratori:
uno per i fax ricevuti
uno per i log

- quando arriva un fax il num. dei log incrementa di 1, viene creato un nuovo file log e dopo alcuni secondi viene incrementato di 1 il num. dei fax

- se arriva un fax e cade la linea per esempio, il numeratore dei log incrementa di 1 ma quello dei fax no... quindi non ho + la corrispondenza log->fax (questo mi causa dei problemi su un programma php che ho fatto io).

quindi pensavo di copiare il num. dei log su quello dei fax, però solo quando il file log è stato scritto, cioè contiene "SESSION END" nell'ultima riga.

Mutato
27-09-2005, 11:33
Originariamente inviato da maxtn
Provo a spiegarmi meglio...

Uso hylafax, ci sono due numeratori:
uno per i fax ricevuti
uno per i log

- quando arriva un fax il num. dei log incrementa di 1, viene creato un nuovo file log e dopo alcuni secondi viene incrementato di 1 il num. dei fax

- se arriva un fax e cade la linea per esempio, il numeratore dei log incrementa di 1 ma quello dei fax no... quindi non ho + la corrispondenza log->fax (questo mi causa dei problemi su un programma php che ho fatto io).

quindi pensavo di copiare il num. dei log su quello dei fax, però solo quando il file log è stato scritto, cioè contiene "SESSION END" nell'ultima riga.

E lo script che ho fatto non va bene?

maxtn
27-09-2005, 11:38
Come faccio a dirgli che il file di log è composto così:

c000007287

cioè il numero che c'è nel numeratore (7288) -1.

Mutato
27-09-2005, 12:48
numeratore=7288
current=$(($numeratore-1))
logname="c00000$current"


Non so dove sia il numeratore pero`... se fosse dentro un file tipo:



...
7287 Fax ok
7288 Fax ok


numeratore=$(cat logfile | tail -1 | awk '{print $1}')

maxtn
27-09-2005, 12:50
Nel file del numeratore c'è solo una riga, e c'è solo il numero da usare! (7288)

maxtn
27-09-2005, 16:18
Qualcuno mi sa aiuatare per favore? mi da questi errori:

./ciao: command substitution: line 1: syntax error near unexpected token `|'
./ciao: command substitution: line 1: `cat <filelog> | grep 'END SESSION' > /dev/null; echo $?'
./ciao: line 13: [: !=: unary operator expected
./ciao: line 18: [: ==: unary operator expected

--------------------
#!/bin/bash

cd /var/spool/hylafax/log

#estraggo il nome dell'ultimo file log
numeratore=$(cat seqf | tail -1 | awk '{print $1}')
current=$(($numeratore-1))
filelog="c00000$current"


X="1"
# Cerco END SESSION nel file log
while [ $X != "0" ]; do
X=`cat <filelog> | grep 'END SESSION' > /dev/null; echo $?`
done

# Quando trovo SESSION END $X diventa 0
if [ $X == "0" ]; then
sleep 10
#cp -f seqf /var/spool/hylafax/recvq
cp -f seqf /var/spool/hylafax
fi

Mutato
27-09-2005, 17:24
Devi personalizzare lo script! Con <filelog> non funziona! Devi metterci $filelog oppure cambiare lo script con questo (personalizzalo)



#!/bin/bash

#cd /var/spool/hylafax/log
# Non serve andare nella directory

# Dove stanno i file
MYPATH="$HOME/tmp/"

# Dove vuoi che finisca il file
DESTINATION="$HOME/tmp/qq"

# Il file contatore
COUNTER="$MYPATH/seqf"

#estraggo il nome dell'ultimo file log
numeratore=$(cat $COUNTER)
current=$(($numeratore-1))
filelog="$MYPATH/c00000$current"


X="1"

# Cerco END SESSION nel file log
while [ $X != "0" ]; do

X=`cat $filelog | grep 'END SESSION' > /dev/null; echo $?`

done

# Quando trovo SESSION END $X diventa 0
if [ $X == "0" ]; then

cp -f $COUNTER $DESTINATION
fi

maxtn
27-09-2005, 18:09
Ho aggiunto un controllo per copiare il file solo se il file seqf è cambiato.
Però mi da questo errore che non capisco sulla riga : if [ $TEMPO1 != $TEMPO2 ]; then

./ciao: line 17: [: 01:28: unary operator expected




-----------------------

#!/bin/bash

MYPATH="/var/spool/hylafax/log"
DEST="/var/spool/hylafax/recvq"
COUNT="$MYPATH/seqf"

#estraggo il nome dell'ultimo file log
numeratore=$(cat $COUNT)
current=$(($numeratore-1))
filelog="$MYPATH/c00000$current"

TEMPO1=`ls -la --full-time $COUNT |cut -f 2,3 -d":"|cut -b1-5`


if [ $TEMPO1 != $TEMPO2 ]; then

X="1"
# Cerco END SESSION nel file log
while [ $X != "0" ]; do
X=`cat $filelog | grep 'END SESSION' > /dev/null; echo $?`
done

# Quando trovo SESSION END $X diventa 0
if [ $X == "0" ]; then
TEMPO2=`ls -la --full-time $COUNT |cut -f 2,3 -d":"|cut -b1-5`
sleep 10
cp -f $COUNT $DEST
fi


fi

Loading