2015-05-23 106 views
3

我正在嘗試編寫一個腳本,使其儘可能清潔和輕便。總之,我想呈現一個菜單,讓一個人選擇一個與他們喜歡的顏色相對應的數字。從那裏,我想採用與菜單中的數字一致的顏色名稱,並將其用作將放置在其他地方的腳本中的變量。我的目標是在菜單後面有一個語法,但會使用顏色變量。這是讓我回歸的一件事。下面是一個片段..任何想法?基於用戶選擇的Linux變量

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]]] 

回答

1

您可以使用一個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命令,這需要多大你的菜單顯示和選擇選擇的照顧。

0

你可以在一個陣列的顏色存儲像

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 
1

您可以使用關聯數組太:

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]}