M nh đ case cho phép so m t m u (chu i ký t ) v i nhi u m u khác nhau và th c hi n đo n mã t ng ng v i m u trùng kh p. Cú pháp c a nó nh sau: bash và pdksh tcsh case mau in mau1) cau_lenh ... ;; switch (mau) case mau1: cau_lenh ... breaksw
65 mau2) cau_lenh ... ;; ... *) cau_lenh ... ;; esac case mau2: cau_lenh ... breaksw ... default: cau_lenh ... breaksw endsw
Trong đó, mau đ c so sánh l n l t v i các m u mau1, mau2... N u có m t m u trùng kh p thì (các) câu l nh t ng ng s đ c th c hi n cho đ n khi g p hai d u ch m ph y (;;) (bash và pdksh) ho c breaksw (tcsh). N u không có m u nào trùng kh p thì (các) câu l nh trong kh i * (bash và pdksh) ho c default (tcsh) đ c th c hi n.
b. Ví d
o n ch ng trình sau đ c vi t cho bash ho c pdksh. Nó ki m tra xem tu ch n dòng l nh đ u tiên (l u trong bi n $1) có ph i là –i ho c –e không. N u là –i thì s in ra s dòng trong t p xác đnh b i tu ch n dòng l nh th hai (bi n $2) b t đ u b ng ch cái i. Còn n u là –e thì s in ra s dòng trong t p xác đ nh b i tu ch n dòng l nh th hai b t đ u b ng ch cái e. N u tu ch n đ u tiên không ph i là –i
ho c –e thì in ra màn hình thông báo.
case $1 in -i)
count=`grep ^i $2 | wc –l`
echo "So dong trong $2 bat dau bang chu cai i la $count" ;;
-e)
count=`grep ^e $2 | wc –l`
echo "So dong trong $2 bat dau bang chu cai e la $count" ;;
*)
echo "Tuy chon khong hop le"
echo "Cach dung: $0 [-i|-e] t pname" ;;
esac
Và sau đây là đo n mã t ng t cho tcsh : #
switch ($i) case –i | i:
66
echo "So dong trong $2 bat dau bang chu cai i la $count" breaksw
case –e | e:
set count=`grep ^e $2 | wc –l`
echo "So dong trong $2 bat dau bang chu cai e la $count" breaksw
default:
echo "Tuy chon khong hop le"
echo "Cach dung: $0 [-i|-e] t pname" breaksw
endsw
7.5 Các m nh đ vòng l p
Ngôn ng shell c ng cung c p các m nh đ vòng l p. Vòng l p hay đ c s d ng nh t là vòng l p for. Ngoài ra còn có các lo i vòng l p while, until.
7.5.1 M nh đ for
M nh đ for th c hi n các câu l nh trong vòng l p v i m t s l n nh t đnh. Nó có các d ng sau: