#!/bin/bash
# Bash Menu Script Example
PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Option 1")
echo "you chose choice 1"
;;
"Option 2")
echo "you chose choice 2"
;;
"Option 3")
echo "you chose choice $REPLY which is $opt"
;;
"Quit")
break
;;
*) echo "invalid option $REPLY";;
esac
done
เพิ่มbreak
ข้อความสั่งทุกที่ที่คุณต้องการselect
วนซ้ำเพื่อออก หากbreak
ไม่ดำเนินการa select
คำสั่งจะวนซ้ำและเมนูจะปรากฏขึ้นอีกครั้ง
ในตัวเลือกที่สามฉันรวมตัวแปรที่กำหนดโดยselect
คำสั่งเพื่อแสดงว่าคุณสามารถเข้าถึงค่าเหล่านั้นได้ หากคุณเลือกมันจะส่งออก:
you chose choice 3 which is Option 3
คุณจะเห็นว่า$REPLY
มีสตริงที่คุณป้อนที่พรอมต์ มันถูกใช้เป็นดัชนีลงในอาร์เรย์${options[@]}
ราวกับว่าอาร์เรย์เป็น 1 ตาม ตัวแปร$opt
มีสตริงจากดัชนีนั้นในอาร์เรย์
โปรดทราบว่าตัวเลือกอาจเป็นรายการง่าย ๆ โดยตรงในselect
คำสั่งเช่นนี้:
select opt in foo bar baz 'multi word choice'
แต่คุณไม่สามารถใส่รายการดังกล่าวในตัวแปรสเกลาร์ได้เนื่องจากช่องว่างเป็นหนึ่งในตัวเลือก
คุณยังสามารถใช้ไฟล์ globbing หากคุณเลือกระหว่างไฟล์:
select file in *.tar.gz
seq 10 | fzf
ดู ข้อเสียเปรียบคือ fzf ไม่ได้ติดตั้งโดยค่าเริ่มต้น คุณสามารถหา fzf ได้ที่นี่: github.com/junegunn/fzf