1

我正在尝试编写一个包含多个命令的脚本,用户将被提示预先运行这些命令,并根据用户输入运行这些命令的动态集

因此,例如,我为需要运行的命令设置函数

    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

4 回答 4

1

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

select

select 构造允许轻松生成菜单。它的语法与 for 命令几乎相同:

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

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

在每次选择之后执行命令,直到执行中断命令,此时选择命令完成。

于 2012-08-28T01:36:27.783 回答
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
于 2012-08-28T01:27:39.087 回答
0

读取命令正是您所需要的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
于 2012-08-28T01:15:29.513 回答
0

如果您将用户输入输入到一系列变量中(使用另一个答案中详述的读取命令),每个命令一个(调用它们,例如 C1、C2、C3),那么在您接受用户输入后,您可以编写一系列查看这些变量值的 if 语句

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

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

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

这些帮助有用?

于 2012-08-28T01:15:41.930 回答