Vòng lặp select trong Shell

Vòng lặp select cung cấp một cách dễ dàng để tạo một menu được đánh số từ đó người sử dụng có thể chọn lựa. Nó là hữu ích khi bạn muốn hỏi người sử dụng để chọn một hoặc nhiều mục từ một danh sách các lựa chọn.

Cú pháp trong Unix/Linux

select var in word1 word2 ... wordN
do
   cac lenh de thuc thi cho moi word.
done

Ở đây, var là tên một biến và word1 tới wordN là dãy các ký tự phân biệt nhau bởi khoảng trống. Cứ mỗi lần vòng lặp thực thi, giá trị biến var được thiết lập tới word tiếp theo trong danh sách các word, từ word1 tới wordN.

Đối với mỗi lựa chọn, một tập hợp các lệnh sẽ được thực thi bên trong vòng lặp. Vòng lặp này được giới thiệu trong ksh và đã được điều chỉnh vào trong bash. Nó là không có sẵn trong sh.

Ví dụ trong Unix/Linux

Ví dụ đơn giản dưới đây cho người sử dụng chọn một đồ uống trong danh sách các đồ uống.

#!/bin/ksh

select DRINK in tea cofee water juice appe all none
do
   case $DRINK in
      tea|cofee|water|all) 
         echo "Go to canteen"
         ;;
      juice|appe)
         echo "Available at home"
      ;;
      none) 
         break 
      ;;
      *) echo "ERROR: Invalid selection" 
      ;;
   esac
done

Menu được hiển thị bởi vòng lặp select trông như sau:

$./test.sh
1) tea
2) cofee
3) water
4) juice
5) appe
6) all
7) none
#? juice
Available at home
#? none
$

Bạn có thể thay đổi dòng nhắc được hiển thị bởi vòng lặp select bởi thay đổi biến PS3 như sau:

$PS3="Please make a selection => " ; export PS3
$./test.sh
1) tea
2) cofee
3) water
4) juice
5) appe
6) all
7) none
Please make a selection => juice
Available at home
Please make a selection => none
$