pare o processamento no script de shell, mas não saia

1

Eu tenho um script que eu corro continuamente para monitorar os logs do vsftpd. Aqui está um pequeno exemplo:

#!/bin/sh
tail -n0 -F /var/log/vsftpd.log | while read line; do
    if echo "$line" | grep -q 'OK UPLOAD:'; then
        username=$(echo "$line" | cut -d" " -f9 | sed 's/\[\(.*\)\]//')
        if [ $? -ne 0 ]; then
            echo "ERROR: Failure to get parse username. Line it is trying to parse: $line" >>/var/log/ftpmonitor.log
            # We need to remove the file with any error so it doesn't linger
            rm -rf $home$filenamewithpath
            if [ $? -ne 0 ]; then
                echo "ERROR: Failed to delete video file" >>/var/log/ftpmonitor.log
                exit 1
            fi
            exit 1
        fi
     # lot of other stuff here...
     fi
done

Eu quero pegar qualquer erro que eu possa com qualquer falha de comando e parar. Originalmente, pensei em usar a saída para parar. Normalmente, isso faz sentido, mas neste caso, este script precisa continuar executando o tempo todo, monitorando os logs do vsftpd. Então eu não quero sair do script que eu quero apenas parar quaisquer outros comandos após essa falha. Como posso conseguir isso?

    
por Tom 05.04.2013 / 22:40

1 resposta

3

Eu estou supondo que você quer dizer que você quer pular para a próxima linha de /var/log/vsftpd.log ?
Se sim, use apenas continue .

#!/bin/sh
tail -n0 -F /var/log/vsftpd.log | while read line; do
    if echo "$line" | grep -q 'OK UPLOAD:'; then
        username=$(echo "$line" | cut -d" " -f9 | sed 's/\[\(.*\)\]//')
        if [ $? -ne 0 ]; then
            echo "ERROR: Failure to get parse username. Line it is trying to parse: $line" >>/var/log/ftpmonitor.log
            # We need to remove the file with any error so it doesn't linger
            rm -rf $home$filenamewithpath
            if [ $? -ne 0 ]; then
                echo "ERROR: Failed to delete video file" >>/var/log/ftpmonitor.log
                continue
            fi
            continue
        fi
     # lot of other stuff here...
     fi
done

continue simplesmente pula para a próxima iteração do loop envolvente.

    
por 05.04.2013 / 22:50