2012-08-28 13 views
1

我試圖寫一個腳本,將包含該用戶將被提示了前面運行多個命令,並運行基於用戶輸入一組動態的命令bash腳本提示運行動態組命令

所以,讓我們說,例如我的設置功能,我需要運行

command1() { some_command; } 
    command2() { some_command; } 
    command3() { some_command; } 
    command4() { some_command; } 

隨之而來的是一系列的提示

Do you want to run command1? 
Do you want to run command2? 
Do you want to run command3? 
Do you want to run command4? 

在這個例子中,假設Y中的命令, N,Y,Y所以我需要運行command1,command3,command4 我希望得到的重點。

任何援助將不勝感激。

回答

0

讀命令就是你所需要的http://www.vias.org/linux-knowhow/bbg_sect_08_02_01.html

簡短的例子

應用用戶輸入變量「富」

# Just showing a nice message along with it. 
echo -n "Would you like to run command1? (Y/N) " 
read foo 

然後,你可以只是測試foo的變量的值

if [ "$foo" == "Y" ]; then 
    command1 
fi 
0

如果您將用戶輸入一系列變量(使用the other answer中詳細描述的讀取命令),每個命令一個(調用它們,例如C1,C2,C3),然後在獲取用戶輸入後,您可以編寫一系列if語句在這些變量的值

if [ $C1 == "Y" ]; then 
    command1 
fi 

if [ $C2 == "Y" ]; then 
    command2 
fi 

if [ $Cn == "Y" ]; then 
    commandN 
fi 

這樣做有幫助嗎?

1
read -p "Do you want to run command1? " c1 
read -p "Do you want to run command2? " c2 
read -p "Do you want to run command3? " c3 
read -p "Do you want to run command4? " c4 

if [ "$c1" = "Y" ]; then 
    command1 
fi 

if [ "$c2" = "Y" ]; then 
    command2 
fi 

if [ "$c3" = "Y" ]; then 
    command3 
fi 

if [ "$c4" = "Y" ]; then 
    command4 
fi 
1

你可能(也可能不)要考慮select內置:

select

的選擇結構允許容易產生菜單。它具有幾乎 相同的語法爲命令:

select name [in words ...]; do commands; done 

以下中的單詞的列表展開,生成的項目的列表。 擴展詞的集合打印在標準錯誤輸出流上,每個都在 之前加一個數字。如果省略'in words',則位置參數將被打印, 就好像'in'$ @「'已被指定。然後顯示PS3提示,並從標準輸入中讀取一行 。如果該行包含一個數字 與其中一個顯示的單詞相對應,則名稱的值將被設置爲該單詞。如果 該行爲空,則會再次顯示單詞和提示。如果EOF被讀取,則 選擇命令完成。讀取的任何其他值都會導致名稱被設置爲空 。讀取的行保存在變量REPLY中。

這些命令在每次選擇後執行,直到執行中斷命令 ,此時select命令完成。