1 要件分析
存在する
Linux シェル プログラミング学習ノート 21: ループ ステートメントの選択を使用してメニューを作成するhttps://blog.csdn.net/Purpleendurer/article/details/134212033?spm=1001.2014 . 3001.5501
select in ループ ステートメントを使用して作成したメニューでは、システムによって設定されたカラー構成を使用してメニュー項目が表示されます。
メニューをより美しくするために、各メニュー項目を異なる色で表示したいのですが、これを実現するにはどうすればよいですか?
カラフルなオプションメニューを作成する2つの方法
- まず、表示するメニュー項目を配列に保存します。
- 次に、ループ文 for in を使用して、配列内のメニュー項目を表示します。メニューを表示するときに、メニューを選択する番号として各メニュー項目に数値のシリアル番号を追加し、 \e[xm (カラー表示を実現するには、31 ~ 37 の x の値)
- 次に、read コマンドを使用して、ユーザーが入力した値を読み取ります。
- 最後に、ユーザーが入力した値が判断され、それに応じて処理されます。
3 デモコード
フルーツメニューを表示し、終了メニューオプションを追加します
ユーザーが数値 n を入力すると、次のように判断されます。
n がフルーツ メニュー オプションに対応する番号の場合、対応するフルーツを表示します
n が終了メニュー オプションの番号である場合、ユーザーが終了オプションを選択したことを示します。
それ以外の場合は、ユーザーが間違った番号を入力したことを示します。
コードは以下のように表示されます:
f=(apple banana orrange peach);# 定义水果数组
c=31; # 颜色
o=1; #序号
for i in $f;do
echo -e "\e[${c}m $o)$i \e[0m"; #用不同颜色显示水果选项
let c+=1;
if [[ $c > 37 ]]; then
$c=31;
fi;
let o+=1;
done;
echo " $o)exit"; # 显示 退出 选项
echo -n "enter the number before the fruit your liked(1 - ${#f}):"; #提示用户输入选项前的数字
read s; #读取用户输入的字符并存入s
if [[ $s -gt 0 && $s -le ${#f} ]]; then #用户输入的是水果选项
let c=30+s; #计算水果选项对应的颜色
echo -e "You selected \e[${c}m$f[$s]\e[0m";#显示用户选择的水果选项
elif [[ $s -eq ((${#f}+1)) ]]; then # 用户选择的是退出选项
echo You selected exit;#显示用户选择了退出选项
else
echo Your enter a error number;#显示用户输入的错误的数字
fi
3.1 スクリプトファイルa.shの作成
cpコマンドを使用してスクリプトファイルを作成し、ファイル内容を入力後、Ctrl+Dを押してファイル入力を終了します。
purpleEndurer @zsh $ cp /dev/stdin a.sh
f=(リンゴ、バナナ、オレンジ、ピーチ);# フルーツ配列を定義 a>
c=31; # カラー
o=1; #i のシリアル番号
$f;do< a i =6> echo -e "\e[${c}m $o)$i \e[0m"; #フルーツのオプションを別の色で表示する let c+=1;< / a> fi; $c=31; if [[ $c > 37 ]]; then Done; echo " $o)exit"; # 終了オプションを表示
echo -n "好きだった果物の前に数字を入力してください(1 - ${#f}):"; #オプションの前に数字を入力するようユーザーに要求します
read s ; #ユーザーが入力した文字を読み取り、 s に保存しますif [[ $s -gt 0 && $s -le ${#f} ]]; then #ユーザーがフルーツ オプションを入力しました
let c=30 +s; #フルーツ オプションに対応する色を計算します
echo -e "\e[${c}m$f[$s]\e[0m"] を選択しました;#表示ユーザー選択フルーツ オプション
elif [[ $s -eq ((${#f}+1)) ]]; then # ユーザーは終了オプションを選択します
echo 終了を選択しました;#終了オプションを選択したことをユーザーに表示します
else
echo エラー番号を入力しました;#ユーザーが入力した間違った番号を表示します< /span> purpleEndurer @zsh $
フィ
3.2 スクリプトの実行とテスト
purpleEnduler @zsh $。 ./a.sh
1)リンゴ
2)バナナ
3)オレンジ
4) 桃
5) 終了
好きな果物の前の数字を入力します (1 ~ 4):3509 purpleEndurer @zsh $ エラー番号を入力してください。 好きな果物の前の数字を入力します (1 ~ 4): 5) 終了 4) 桃 3)オレンジ 2)バナナ 1)リンゴ 。 ./a.sh purpleEndurer @zsh $ エラー番号を入力しました。 好きな果物の前の数字を入力します (1 ~ 4): 5) 終了 4) 桃 3)オレンジ 2)バナナ 1)リンゴ を選択しました。 ./a.sh purpleEndurer @zsh $ exit 好きな果物の前の数字を入力します (1 ~ 4): 5) 終了 4) 桃 3)オレンジ 2)バナナ 1)リンゴ を選択しました。 ./a.sh purpleEndurer @zsh $
orrange