2012-11-16 115 views
1

現在我正在用bash腳本(Cygwin)運行一些程序。如何在bash腳本中執行多個if,else語句?

基本上我在做的是程序啓動後,運行一個循環檢查程序是否仍在運行。

我做:

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,但它永遠不會超過第一個如果。

我需要它去「好的第一個如果是消極的,嘗試下一個,到最後,重新開始」。

這裏是我的腳本的副本,我忘了說我正在使用Cygwin,但它確實不會改變任何東西,因爲它似乎仍然使用正常的bash腳本,只是可能有不同的路徑來啓動文件。 http://pastebin.com/s8ZdPQMn和是的h。是不是我似乎無法編輯pastebin。

我的總體計劃是檢查第一個SRPro是否在運行,檢查下一個等,只有在檢測到一個沒有運行時觸發。

編輯:我解決了它。不完全確定爲什麼,但是在每個程序的原始單個文件中,最終4美元的gawk打印給了我想要的東西,但由於某種原因,這樣做時,它變成了5美元。因此,將$ 4更改爲$ 5使腳本正常工作。

編輯:一個非常奇怪的問題,雖然是,它將工作分鐘結束,然後突然有時感到困惑,並開始一個程序或其他東西的7個副本。它也可以隨機發生。

+0

你必須在後臺啓動程序,即'name&'?你能不能在前臺運行它,'name',這樣只有在腳本完成後控制才能繼續執行? –

+0

顯示使用你的if-elif-else塊的代碼? –

+6

你可能想澄清你的最終目標是什麼。你已經展示了你嘗試過的一件東西,這很好。但很難從你的問題中知道你想要做什麼。你是否試圖運行多個進程,監視它們,如果它們退出重新啓動它們? –

回答

1

您可能會發現wait命令(嘗試使用bash提示中的help wait)很有用。目前還不清楚你想要什麼,但作爲一個例子,這裏有一個基本的重生功能:

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

我以前在這裏看過這個,所以我的經驗(或更可能缺乏)使我懷疑:在後臺運行某些東西的價值是什麼,但是等待,並且只能重新啓動它?爲什麼不只是「真正的」$ {@}「;回聲「重新啓動」;完成'?在後臺運行會給我一些控制的機會,我沒有看到?祝你們好運。 – shellter

+0

你說得對,我給出的例子毫無意義 - 它只是作爲如何使用'wait'的例子。 –

+0

ok,np。我可以看到這可能爲O.P提供了一個解決方案的基礎。只是想確保我沒有錯過一些很棒的功能。祝你們好運。 – shellter