いくつかのファイルフィルタリング機能を自動化するために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