#!/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
Thêm breakcâu lệnh bất cứ nơi nào bạn cần selectvòng lặp để thoát. Nếu a breakkhông được thực hiện, các selectvòng lặp câu lệnh và menu sẽ được hiển thị lại.
Trong tùy chọn thứ ba, tôi đã bao gồm các biến được đặt bởi selectcâu lệnh để chứng minh rằng bạn có quyền truy cập vào các giá trị đó. Nếu bạn chọn nó, nó sẽ xuất ra:
you chose choice 3 which is Option 3
Bạn có thể thấy $REPLYcó chứa chuỗi bạn đã nhập tại dấu nhắc. Nó được sử dụng như một chỉ mục vào mảng ${options[@]}như thể mảng dựa trên 1. Biến $optchứa chuỗi từ chỉ mục đó trong mảng.
Lưu ý rằng các lựa chọn có thể là một danh sách đơn giản trực tiếp trong selectcâu lệnh như sau:
select opt in foo bar baz 'multi word choice'
nhưng bạn không thể đặt một danh sách như vậy trong một biến vô hướng vì các khoảng trắng trong một trong các lựa chọn.
Bạn cũng có thể sử dụng tệp toàn cầu nếu bạn chọn trong số các tệp:
select file in *.tar.gz
seq 10 | fzf. Hạn chế là fzf không được cài đặt theo mặc định. Bạn có thể tìm thấy fzf tại đây: github.com/junegunn/fzf