基于用户select的Linuxvariables

我正在尝试写一个脚本,使其尽可能清洁和轻便。 总之,我想呈现一个菜单,让一个人select一个与他们喜欢的颜色相对应的数字。 从那里,我想要拿出菜单中的数字的颜色名称,并将其作为一个variables,将被放置在其他地方的脚本。 我的目标是在菜单后面有一个语法,但会使用颜色variables。 这是让我回来的一件事。 下面是一个片段..任何想法?

color_pref= while [ -z "$color_pref" ] ; do echo echo echo " ***************************************" echo " What is your favorite color? " echo " 1 - red" echo " 2 - blue" echo " 3 - green" echo " 4 - orange" echo " Select 1, 2, 3, or 4 :" \n echo " ***************************************" printf " Enter Selection> "; read color_pref echo [[[whatever variable is for color selected]]] 

您可以使用case语句将根据所选号码将变量设置为相等的颜色。

 case $color_pref in 1) color=red ;; 2) color=blue ;; 3) color=green ;; 4) color=blue ;; *) printf "Invalid color choice: %s" "$color_pref" >&2 exit; esac 

你可能想看看select命令,它会照顾你的菜单显示和选择选择。

您也可以使用关联数组:

 declare -A colors=( [1]=red [2]=blue [3]=green [4]=orange ) 

例:

 declare -A colors=( [1]=red [2]=blue [3]=green [4]=orange ) color_pref= while [ -z "$color_pref" ] do echo echo echo " ***************************************" echo " What is your favorite color? " echo " 1 - red" echo " 2 - blue" echo " 3 - green" echo " 4 - orange" echo " Select 1, 2, 3, or 4 :" \n echo " ***************************************" printf " Enter Selection> "; read color_pref echo ${colors[$color_pref]} done 

或索引数组:

 declare -a colors=('invalid' 'red' 'blue' 'green' 'orange' ) 

用法:

 echo ${colors[$color_pref]} 

你可以将COLORS存储在一个数组中

 COLORS=('red' 'blue' 'green' 'orange') 

那么你可能会用类似的方式回显选定的值

 echo $color_pref ${COLORS[color_pref-1]} 

而且你需要添加一个

 done 

结束你的循环。 所有在一起的东西,

 #!/usr/bin/env bash COLORS=('red' 'blue' 'green' 'orange') color_pref= while [ -z "$color_pref" ] ; do echo echo echo " ***************************************" echo " What is your favorite color? " echo " 1 - red" echo " 2 - blue" echo " 3 - green" echo " 4 - orange" echo " Select 1, 2, 3, or 4 :" \n echo " ***************************************" printf " Enter Selection> "; read color_pref echo $color_pref ${COLORS[color_pref-1]} done