我正在编写一个 bash/shell 脚本来自动执行一些文件过滤功能。这是我到目前为止所写的内容。它基于我在网上找到的脚本。
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,我将添加该部分,只需要循环或返回函数的帮助(如果可以使用返回返回到第1行并再次开始运行脚本直到创建final.txt,然后死亡/完成/停止)
答案1
我不太明白你代码的某些部分。 1)脚本filefilter.sh是否执行过滤? 2) 如果是,在什么情况下会过滤(例如 $service 存在) 3) 您是否过滤选定的服务或所有正在运行的进程
缩进在脚本编写中非常重要,因为您可以轻松清楚地发现循环
[您的代码]:
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