シェルスクリプト - プロセスが完了して終了/完了するまで前のループに戻ります。

シェルスクリプト - プロセスが完了して終了/完了するまで前のループに戻ります。

いくつかのファイルフィルタリング機能を自動化するためにbash /シェルスクリプトを作成しています。これまで私が書いた内容は次のとおりです。オンラインで見つけたスクリプトに基づいています。

if (( $(ps -ef | grep $service | wc -l) > 0 ))
then
    echo "$service is not done" >> /root/test.txt
else
    (( $(wc -l /root/filter/first.txt) > 0 ))
    if (( $(ps -ef | grep $service | wc -l) < 0 ))
    then
        ./root/filter/filefilter.sh
    else (( $(ls | grep /root/filter/final.txt | wc -l) > 0 ))
        if (( $(ps -ef | grep awk | wc -l) > 0 ))
        then
            (( $(ls | grep /root/filter/final.txt | wc -l) > 0 ))
        else
            # here is where I would like it to loop until the filtering is complete
            # then once the final file is > 0 stop/die/done
        fi
    fi
fi

ディレクトリにfinal.txtが作成されるまで繰り返したいと思います。その部分を追加し、ループまたは戻り関数の助けが必要です(動作する場合は、returnを使用して行1に戻り、最後までスクリプトの実行を再開します)。 .txtが生成された後に死ぬ/finish/stop)

ベストアンサー1

コードの一部をよく理解していません。 1) filefilter.shスクリプトはフィルタリングを実行しますか? 2)もしそうなら、どのような状況でフィルタリングしますか(例:$ serviceは存在しますか?)

ループを簡単かつ明確に見つけることができるので、インデントはスクリプトで非常に重要です。

[あなたのコード]:

if (( $(ps -ef | grep $service | wc -l) > 0 ))
then
    echo "$service is not done" >> /root/test.txt
else
    (( $(wc -l /root/filter/first.txt) > 0 ))        #There is no condition required for the else-loop

    if (( $(ps -ef | grep $service | wc -l) < 0 ))
    then
            ./root/filter/filefilter.sh

    else
        (( $(ls | grep /root/filter/final.txt | wc -l) > 0 ))   #There is no condition required for the else-loop

            if (( $(ps -ef | grep awk | wc -l) > 0 ))  
            then
                    (( $(ls | grep /root/filter/final.txt | wc -l) > 0 ))
            else
                    #You can use the exit command to stop the loop base on the condition you want

        fi
    fi
fi

おすすめ記事