Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Discussione: Script da shell

  1. #1
    Utente di HTML.it L'avatar di maxtn
    Registrato dal
    Jul 2002
    Messaggi
    712

    Script da shell

    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.
    Ubuntu 10.10 x86_64

  2. #2
    Non ho capito molto, ma farei cosi`:

    codice:
    #!/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
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  3. #3
    Utente di HTML.it L'avatar di maxtn
    Registrato dal
    Jul 2002
    Messaggi
    712
    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.
    Ubuntu 10.10 x86_64

  4. #4
    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?
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  5. #5
    Utente di HTML.it L'avatar di maxtn
    Registrato dal
    Jul 2002
    Messaggi
    712
    Come faccio a dirgli che il file di log è composto così:

    c000007287

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

  6. #6
    codice:
    numeratore=7288
    current=$(($numeratore-1))
    logname="c00000$current"
    Non so dove sia il numeratore pero`... se fosse dentro un file tipo:

    codice:
    ...
    7287 Fax ok
    7288 Fax ok
    
    
    numeratore=$(cat logfile | tail -1 | awk '{print $1}')
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  7. #7
    Utente di HTML.it L'avatar di maxtn
    Registrato dal
    Jul 2002
    Messaggi
    712
    Nel file del numeratore c'è solo una riga, e c'è solo il numero da usare! (7288)
    Ubuntu 10.10 x86_64

  8. #8
    Utente di HTML.it L'avatar di maxtn
    Registrato dal
    Jul 2002
    Messaggi
    712
    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
    Ubuntu 10.10 x86_64

  9. #9
    Devi personalizzare lo script! Con <filelog> non funziona! Devi metterci $filelog oppure cambiare lo script con questo (personalizzalo)

    codice:
    #!/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
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  10. #10
    Utente di HTML.it L'avatar di maxtn
    Registrato dal
    Jul 2002
    Messaggi
    712
    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
    Ubuntu 10.10 x86_64

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.