2011-10-25 16 views
0

我的腳本中有一個很長的IF ELIF語句。當我開始嘗試執行外部程序/第三方軟件時,我的問題就開始了。在一個IF ELIF語句中執行一系列外部/第三方程序

.....; then 
prog1 -some flags 
prog2 -some flags 
prog3 -some more flags 
prog4 -even more flags 
elif [......] 

你可以客串我發現這不是feesable,圍繞我能看到的唯一工作就是我把這些命令放到一個單獨的shell腳本和下面稱之爲:

.....; then 
./myshellscript.sh 
elif [......] 

有沒有在腳本中包含它自己而不必調用shell腳本來完成我所有的任務。我通常會咬緊牙關,這樣做,但這意味着有數以百計的外部shell腳本會混淆文件夾,而不是包含一個清楚的腳本,其中包含執行手頭任務所需的所有代碼。

再次,任何幫助將不勝感激。

+1

你是什麼意思「這不可行」?具體而言,期望的行爲是什麼,你遇到什麼問題不是這種行爲? –

+0

當我運行腳本時,它只是列出了我希望執行的所有命令和程序,而不是實際運行它們。顯然,如果我只是從一個bog標準bash腳本運行這個程序和命令列表,我沒有任何問題。但是,當我嵌入到IF ELIF語句中時,如果嘗試運行它們,它們不會產生所需的效果。 – bikerben

回答

1

如果您只關心每個分支中腳本的調用次數,以及每個分支中調用的腳本是否相同,那麼您可以使用bash函數來完成這項工作。看看this page,看看如何在bash中編寫函數。

這與在其中將常見代碼分解爲幾乎任何語言的函數的方法基本相同。

+0

在這一點上,函數看起來像是一個選項。但是,我擁有的所有腳本都是獨一無二的,只會在腳本運行期間調用一次。我希望這可以通過將它們嵌入到IF ELIF語句中來完成,如我在第一個示例中所示。 – bikerben

+0

只是一個想法...是否可以使用IF ELIF語句中的函數,還是需要在IF ELIF語句之前聲明它? – bikerben

+1

然後我想我誤解了你的問題。關於你最後的評論,它只是列出了這些文件,通常不應該這樣。我已經做了相當多的if ... elif東西在bash中,而且我知道這有時會變得醜陋。如果你的命令只是被打印而不是被執行,那麼在你沒有顯示的其他部分中可能會有一些錯誤。通常他們應該被執行。 – LiKao