1
4
do
echo "$n * $i = `expr $i \* $n`"
i=`expr $i + 1`
done
7.2.2.4
Các cấu trúc lựa chọn: case và select
Cấu trúc điều khiển luồng tiếp theo là case, hoạt động cũng tương tự như lệnh switch
của C. Nó cho phép ta thực hiện các khối lệnh phụ thuộc vào giá trị của biến. Cú pháp đầy
đủ của case như sau:
case expr in
pattern1 )
statements ;;
pattern2 )
statements ;;
…
[*)
statements ;;]
esac
expr được đem đi so sánh với từng pattern, nếu nó bằng nhau thì các lệnh tương ứng sẽ
được thi hành. Dấu ;; là tương đương với lệnh break của C, tạo ra điều khiển nhảy tới dòng
đầu tiên của mã esac. Không như từ khoá switch của C, lệnh case của bash cho phép ta
kiểm tra giá trị của expr dựa vào pattern, nó có thể chứa các kí tự đại diện. Cách làm việc
của cấu trúc case như sau: nó sẽ khớp (match) biểu thức expr với các mẫu pattern1,
pattern2,…nếu có một mẫu nào đó khớp thì khối lệnh tương ứng với mẫu đó sẽ được thực
thi, sau đó nó thoát ra khỏi lệnh case. Nếu tất cả các mẫu đều không khớp và ta có sử dụng
mẫu * (trong nhánh *)), ta thấy đây là mẫu có thể khớp với bất kỳ giá trị nào (ký tự đại diện
là *), nên các lệnh trong nhánh này sẽ được thực hiện.
Cấu trúc điều khiển select (không có trong các phiên bản bash nhỏ hơn 1.14) chỉ riêng
có trong Korn và các shell bash. Thêm vào đó, nó không có sự tương tự như trong các ngôn
ngữ lập trình quy ước. select cho phép ta dễ dàng trong việc xây dựng các menu đơn giản
và đáp ứng các chọn lựa của người dùng. Cú pháp của nó như sau:
select value [in list]
do
statements that manipulate $value
done
Dưới đây là một ví dự về cách sử dụng lệnh select:
#!/bin/bash
# menu.sh – Createing simple menus with select
#######################################
IFS=:
PS3=“choice? ”
# clear the screen
clear