Toán t
Ý ngh a
! expr1 Tr v úng n u expr1 là không đúng (Sai)
expr1 –a
expr2 Tr v úng n u c expr1 và expr2 đ u là úng
expr1 –o
expr2 Tr v úng n u ho c expr1 ho c expr2 là úng
7.3 Các hàm shell
Ngôn ng shell cho phép ng i s d ng t đ nh ngh a các hàm (function). Các hàm này s d ng g n gi ng nh các hàm trong C và các ngơn ng l p trình khác. L u ý Shell tcsh không h tr các hàm.
7.3.1 Cú pháp t o hàm
Cú pháp t o hàm c a bash và pdksh nh sau: ten_ham () {
61
... ; ; }
Ngồi ra pdksh cịn cho phép m t cú pháp t ng đ ng nh sau: function ten_ham {
cau_lenh_shell ...
; } }
Sau khi đã đnh ngh a hàm, ta có th g i nó b ng cách gõ dịng l nh sau: ten_ham [thamso1 thamso2 ...]
L u ý r ng ta có th truy n bao nhiêu tham s cho hàm c ng đ c. Khi truy n các tham s cho m t hàm, hàm s coi các tham s này nh các tham s v trí ($1=thamso1, $2=thamso2, ...) gi ng nh khi truy n các tham s dòng l nh cho
ch ng trình shell.
7.3.2 Các ví d t o hàm
Ví d sau bao g m nhi u hàm khác nhau, m i hàm th c hi n m t nhi m v t ng ng v i m t tu ch n dòng l nh. Ch ng trình này s nh n các tu ch n dòng l nh:
-Tu ch n th nh t ch ra thao tác th c hi n -Tu ch n th 2, ... là tên (các) t p nh p vào
D a vào tu ch n th nh t, ch ng trình th c hi n các thao tác sau:
-Tu ch n -u: đ c (các) t p vào, bi n đ i n i dung c a chúng thành ch hoa, và ghi ra (các) t p ra. Thao tác này do hàm chu_hoa() đ m nhi m.
-Tu ch n -l: đ c (các) t p vào, bi n đ i n i dung c a chúng thành ch th ng, và ghi ra (các) t p ra. Thao tác này do hàm chu_thuong() đ m nhi m.
-Tu ch n -p: đ c (các) t p vào, và in n i dung c a chúng ra. Thao tác này do hàm in_ra() đ m nhi m.
N u không ph i các tu ch n trên: in ra cách s d ng ch ng trình. Thao tác này do hàm in_cachsd() đ m nhi m.
Các t p ra có tên gi ng v i các t p vào nh ng có thêm ph n m r ng .out. chu_hoa () {
shift for i do
tr a-z A-Z <$1 >$1.out rm $1
mv $1.out $1 shift
62
chu_thuong () { shift
for i do
tr A-Z a-z <$1 >$1.out rm $1 mv $1.out $1 shift done; } print () { shift for i do lpr $1 shift done; } in_cachsd () {
echo "Cu phap cua $1 là $1 [-u|-l|-p] <t p_vao>" echo " "
echo "u ... luu thanh cac t p chu hoa" echo "l ... luu thanh cac t p chu thuong" echo "p ... in cac t p ra may in"; }
case $1 in p|-p) in_ra $@ ;; u|-u) chu_hoa $@ ;; l|-l) chu_thuong $@ ;; *) in_cachsd $0 ;; esac
63
7.4 Các m nh đ đi u ki n
Các m nh đ đi u ki n đ c dùng đ thi hành các ph n khác nhau c a ch ng trình shell tu thu c vào t ng đi u ki n c th . C bash, pdksh và tcsh đ u có hai d ng m nh đ đi u ki n là m nh đ if và m nh đ case. Cú pháp c a các m nh đ
này có khác bi t chút ít đ i v i các shell khác nhau.
7.4.1 M nh đ if
C 3 lo i shell nói trên đ u h tr m nh đ đi u ki n d ng if-then-else. Cú pháp c a m nh đ này có các d ng nh sau : a. D ng đ n gi n bash và pdksh tcsh if [bieu_thuc] then cau_lenh ... fi if (bieu_thuc) then cau_lenh ... endif
N u bi u th c bieu_thuc đ c đánh giá là úng thì (các) câu l nh cau_lenh s
đ c th c hi n, cịn khơng thì ch ng trình s b qua và th c hi n ngay câu l nh phía sau fi ho c endif.
N u ch có m t câu l nh đ c th c hi n trong if thì tcsh cịn có m t d ng đ n gi n h n là : if (bieu_thuc) cau_lenh b. D ng if-else bash và pdksh tcsh if [bieu_thuc] then cau_lenh ... else cau_lenh ... fi if (bieu_thuc) then cau_lenh ... else cau_lenh ... endif
D ng này m r ng d ng đ n gi n nói trên ch : n u bieu_thuc là Sai thì (các)
câu l nh cau_lenh sau else s đ c th c hi n.