Bash
bash腳本中的多選菜單
我是 bash 新手,但我想創建一個腳本,允許使用者從選項列表中選擇多個選項。
基本上我想要的是類似於下面的例子:
#!/bin/bash OPTIONS="Hello Quit" select opt in $OPTIONS; do if [ "$opt" = "Quit" ]; then echo done exit elif [ "$opt" = "Hello" ]; then echo Hello World else clear echo bad option fi done
(來自http://www.faqs.org/docs/Linux-HOWTO/Bash-Prog-Intro-HOWTO.html#ss9.1)
但是我的腳本會有更多選項,我想允許選擇多個。所以是這樣的:
選項 1
選項 2
選項 3
選項 4
完成
對他們選擇的那些有回饋也很好,例如在他們已經選擇的那些旁邊加號。例如,如果您選擇“1”,我想分頁清除並重新列印:
1) Option 1 + 2) Option 2 3) Option 3 4) Option 4 5) Done
然後,如果您選擇“3”:
1) Option 1 + 2) Option 2 3) Option 3 + 4) Option 4 5) Done
此外,如果他們再次選擇 (1) 我希望它“取消選擇”該選項:
1) Option 1 2) Option 2 3) Option 3 + 4) Option 4 5) Done
最後,當按下完成時,我希望在程序退出之前選擇要顯示的列表,例如,如果目前狀態是:
1) Option 1 2) Option 2 + 3) Option 3 + 4) Option 4 + 5) Done
按 5 應列印:
Option 2, Option 3, Option 4
…並且腳本終止。
所以我的問題 - 這在 bash 中是否可行,如果可以,是否有人能夠提供程式碼範例?
任何建議將不勝感激。
編輯:
這是使用您問題中的選項的範例腳本:
#!/bin/bash cmd=(dialog --separate-output --checklist "Select options:" 22 76 16) options=(1 "Option 1" off # any option can be set to default to "on" 2 "Option 2" off 3 "Option 3" off 4 "Option 4" off) choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty) clear for choice in $choices do case $choice in 1) echo "First Option" ;; 2) echo "Second Option" ;; 3) echo "Third Option" ;; 4) echo "Fourth Option" ;; esac done