2012-01-13 132 views
0

我有一些bash腳本。例如運行多個腳本

script1_1.sh 
script1_2.sh 
script1_3.sh 

等....

我想知道,有沒有爲我所有在另一個腳本運行這些方式。在哪裏我不必手動添加每個。那麼通過使用for循環?它增加了一些像

for (i=0; i < 40; i++) 
    ./script1_[i].sh 

我也想檢查每個腳本工作,所以如果不是,將退出for循環。

if ./script[i] (command unsuccessful) 
then break? 

任何人都可以幫我編寫這段代碼嗎?我對腳本語言很陌生。

+0

你是否搜索bash文檔?我們很樂意幫助解決無法正常工作的問題。我們不是在這裏從頭開始寫點東西。 – 2012-01-13 16:01:17

+0

以及我有,即時只是不知道如何檢查每個腳本的工作或沒有,並從循環,如果是這樣打破 – CodeBlocks 2012-01-13 16:04:49

+0

谷歌的你的朋友:「bash退出狀態」 - > http://tldp.org/LDP/abs/html /exit-status.html – 2012-01-13 16:06:04

回答

3

你真的接近回答你自己的問題。 C風格for循環對於您的場景可以正常工作,但是如果您的腳本是隨機命名的,則可以使用數組。您可以使用||,如果返回非零退出狀態,它將執行右側。你也可以使用if語句,就像你在你的問題中已經證明的那樣,用「!」如果在命令之間(如果不是)。

scripts=(script1_1.sh script1_2.sh script1_3.sh) 

for script in "${scripts[@]}"; do 
    ./"$script" || { echo "$script failed"; break; } 
done 

使用for循環像你的問題:

for ((i=1;i<4;i++)); do 
    ./script1_${i}.sh || { echo "$script failed"; break; } 
done 
+0

我只是試過了,它的完美!非常感謝你的幫助,它正是我想要做的 – CodeBlocks 2012-01-13 16:49:55

0

既然你有這個問題,標有perl,你也可以做到這一點的一個Perl的一行:

perl -e 'foreach(1..40){system("sh script_" . $_ . ".sh")==0 or die $!;print "script_" . $_ . ".sh done\n";}' 
+0

你可能意思是'警告'而不是'死' – Zaid 2012-01-13 16:52:19

+0

@Zaid - 那麼,OP提到他/她「還想檢查每個腳本如果沒有,那麼[退出] for循環,「因此,爲什麼我在失敗後死機。不過,你確實提出了一個很好的觀點,因爲並不總是需要「死」。 – 2012-01-13 16:55:03