終了せずにシェルスクリプトで処理を停止します。

終了せずにシェルスクリプトで処理を停止します。

vsftpdログを監視するために継続的に実行されるスクリプトがあります。以下は小さな例です。

#!/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/\[\(.*\)\]/\1/')
        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

コマンドが失敗したときにエラーをキャッチして停止したいです。もともとはシャットダウンを使用して停止すると思いました。通常、これは意味がありますが、この場合、vsftpdログを監視するにはスクリプトを常に実行する必要があります。そのため、スクリプトを終了したくなく、失敗した後に他のコマンドを停止したいと思います。この目標をどのように達成できますか?

ベストアンサー1

次の行に進みたいという意味のようですが/var/log/vsftpd.log
その場合は、単に使用してください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/\[\(.*\)\]/\1/')
        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囲むループの次の繰り返しにジャンプします。

おすすめ記事