GIÁO TRÌNH HỆ ĐIỀU HÀNH UNIX - LINUX - Trang 141

1
4

do
echo "$n * $i = `expr $i \* $n`"
i=`expr $i + 1`
done

7.2.2.4

Các cu trúc la chn: 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