Bash脚本提示运行动态命令集

时间:2012-08-28 01:09:52

标签: 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 我希望能够明白这一点。

非常感谢任何协助。

4 个答案:

答案 0 :(得分: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 :(得分:1)

您可能(或可能不想)考虑select内置:

  

select

     

select构造允许轻松生成菜单。它差不多了   语法与for命令相同:

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

展开后面的单词列表,生成项目列表。这套   扩展的单词打印在标准错误输出流上,每个都在前面   一个数字。如果省略'in words',则打印位置参数,   好像'in'$'“'已被指定。然后显示PS3提示并显示一行   从标准输入读取。如果该行包含一个对应的数字   对于其中一个显示的单词,则将name的值设置为该单词。如果   该行为空,再次显示单词和提示。如果读取EOF,   select命令完成。读取的任何其他值都会导致设置名称   为空。读取的行保存在变量REPLY中。

     

每次选择后执行命令,直到执行break命令   执行,此时select命令完成。

答案 2 :(得分:0)

read命令正是您所需要的http://www.vias.org/linux-knowhow/bbg_sect_08_02_01.html

简短的例子

将用户输入应用于变量'foo'

# 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

答案 3 :(得分: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

这有帮助吗?