我正在尝试写一个脚本,使其尽可能清洁和轻便。 总之,我想呈现一个菜单,让一个人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