Shell 脚本 - 返回上一个循环,直到进程完成然后结束/完成

Shell 脚本 - 返回上一个循环,直到进程完成然后结束/完成

我正在编写一个 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

相关内容