在这种情况下如何在bash脚本中执行多个if,else语句?

时间:2012-11-16 06:39:07

标签: linux bash sh

现在我正在使用bash脚本运行一些程序(使用Cygwin)。

基本上我正在做的是在程序启动后,运行一个循环来检查程序是否仍在运行。

我在做:

while true
do
    if [ "$(ps -W | grep -w name | gawk '{print $8,$9}' | gawk -F \\ '{print $4}')" == 'program' ];then 
        sleep 1
    else
        "start program" (whatever is needed here)
    fi
done

但是我开始意识到多次使用这样的脚本只会导致使用不必要的系统资源。

我尝试过,如果那么,elif,但它永远不会超过第一个if。

我需要它“好吧,第一个如果是否定的,请尝试下一个,直到最后,重新开始”。

这是我的脚本的副本,我忘了说我正在使用Cygwin,但实际上并没有改变任何东西,因为它似乎仍然使用正常的bash脚本,可能只是不同的路径来启动文件。 http://pastebin.com/s8ZdPQMn而且是的。不存在我似乎无法编辑pastebin。

我的整体计划是检查第一个SRPro是否正在运行,检查下一个等等,仅在检测到一个未运行时触发。

编辑:我解决了。不完全确定为什么但是在我原来的每个程序单个文件中,gawk打印最后4美元给了我想要的东西,但出于某种原因,当这样做时,它变成了5美元。因此,将4美元更改为5美元使脚本运行起来。

编辑:一个非常奇怪的问题是,它会在几分钟内完成,然后突然有时会混淆,并启动一个程序或其他东西的7份副本。它也可以是随机的。

1 个答案:

答案 0 :(得分:1)

您可能会发现wait命令(从bash提示符中尝试help wait)很有用。目前还不清楚你想要什么,但作为一个例子,这是一个基本的重生功能:

$ respawn () {
>   while true
>   do
>     "${@}" &
>     wait ${!}
>     echo "respawning ..."
>   done
> }
$ respawn some_program arg1 arg2 etc