So sánh toán học

Một phần của tài liệu Hệ điều hành Linux (Trang 32 - 36)

†Kiểm tra điều kiện trên tập tin

So sánh chuỗi

true nếu string1 rỗng (null) -z string1

true nếu string1 không rỗng -n string1

true nếu 2 chuỗi không bằng nhau

string1 != string2

true nếu 2 chuỗi bằng nhau string1 = string2

Kết quả So sánh

So sánh toán học

true nếu exp1 < exp2 exp1 -lt exp2

true nếu exp1 >= exp2 exp1 -ge exp2

true nếu exp1 > exp2 exp1 -gt exp2

true nếu 2 biểu thức không bằng nhau

exp1 -ne exp2

true nếu 2 biểu thức bằng nhau exp1 -eq exp2

Kết quả So sánh

phuongnh@it-hut.edu.vn 31 So sánh toán học

true nếu exp là false !exp

true nếu exp1 <= exp2 exp1 -le exp2

Kết quả So sánh

phuongnh@it-hut.edu.vn 32 Kiểm tra điều kiện trên tập tin

true nếu file cho phép đọc -r file

true nếu set-group-id được thiết lập trên file

-g file

true nếu file là tập tin thường -f file

true nếu file tồn tại trên đĩa -e file true nếu file là thư mục -d file Kết quả So sánh phuongnh@it-hut.edu.vn 33 Kiểm tra điều kiện trên tập tin

true nếu file được phép thực thi -x file

true nếu file cho phép ghi -w file

true nếu set-user-id được thiết lập trên file

-u file

true nếu kích thước file khác 0 -s file Kết quả So sánh phuongnh@it-hut.edu.vn 34 3.3. Cấu trúc điều khiển †Giống với ngôn ngữkhác †if †elif †case †for †while †until Lệnh if †Cú pháp: if <điều kiện> then <các câu lệnh> else <các câu lệnh> fi

†Ví dụ: file if_test.sh sau đây tùy vào câu trảlời của user mà đưa ra văn bản thích hợp

Lệnh if

#!/bin/sh

echo "Co phai buoi sang?" read timeofday

if [ $timeofday="yes" ]; then echo "Chao buoi sang" else

echo "Chao buoi chieu" fi

phuongnh@it-hut.edu.vn 37 Lệnh if

†Kết quả $./if_test.sh Co phai buoi sang? yes

Chao buoi sang

phuongnh@it-hut.edu.vn 38 Lệnh elif

† Nếu chúng ta nhập liệu khác yes thì đoạn mã trên sẽcoi là no.

† Sửa đổi lại chương trình trên: #!/bin/sh

echo "Co phai buoi sang?" read timeofday

if [ $timeofday="yes" ]; then echo "Chao buoi sang" elif [ $timeofday="no" ]; then

echo "Chao buoi chieu

else

echo "Khong biet" exit 1

fi exit 0

phuongnh@it-hut.edu.vn 39 Vấn đề phát sinh với các biến

†Với ví dụ elif trên đây, nếu ta nhấn Enter luôn mà không nhập vào cái gì thì sẽnhận được thông báo:

„ [: =:unary operator expected]

†Lý do: lỗi phát sinh ngay mệnh đề if đầu tiên, biến timeofday rỗng và shell diễn dịch thành if [ ="yes" ] và shell không hiểu bạn so sánh "yes" với cái gì.

†Đểtránh lỗi này, ta bọc biến trong nháy kép "$timeofday"

phuongnh@it-hut.edu.vn 40 Cải tiến ví dụ trên

#!/bin/sh

echo "Co phai buoi sang?" read timeofday

if [ "$timeofday"="yes" ]; then echo "Chao buoi sang" elif [ "$timeofday"="no" ]; then

echo "Chao buoi chieu"

else

echo "Khong biet" exit 1 fi exit 0 Lệnh case †Cú pháp: case biến in mẫu[|mẫu]...) các lệnh;; mẫu[|mẫu]...) các lệnh;; ... esac †Chú ý đặt 2 dấu chấm phẩy sau mỗi lệnh so khớp File case1.sh #!/bin/sh

echo "Co phai buoi sang?" read timeofday

case "$timeofday" in

"yes") echo "Chao buoi sang";; "no") echo "Chao buoi chieu";; "y") echo "Chao buoi sang";; "n") echo "Chao buoi chieu";; *) echo "Khong biet gi het tron";; esac

phuongnh@it-hut.edu.vn 43 File case2.sh

#!/bin/sh

echo "Co phai buoi sang?" read timeofday

case "$timeofday" in

"yes"|"y"|"Yes"|"YES") echo "Chao buoi sang";; "n*"|"N*") echo "Chao buoi chieu";;

*) echo "Khong biet gi het tron";; esac

exit 0

phuongnh@it-hut.edu.vn 44 File case3.sh

#!/bin/sh

echo "Co phai buoi sang?" read timeofday

case "$timeofday" in

"yes"|"y"|"Yes"|"YES") echo "Chao buoi sang";; "[nN]*") echo "Chao buoi chieu";;

*) echo "Khong biet gi het tron" exit 1 ;; esac exit 0 phuongnh@it-hut.edu.vn 45 Lệnh for †Lệnh lặp một sốlần với các giá trịxác định †Cú pháp: for biến in các_giá_trị do các_lệnh done phuongnh@it-hut.edu.vn 46 Lệnh for - file forloop1.sh

#!/bin/sh

for foo in bar fud 12 do echo $foo done exit 0 † Kết quả: $./forloop1.sh bar fud 12

Lệnh for - file forloop2.sh

#!/bin/sh for file in $(ls f*.sh); do lpr $file done †Đoạn mã trên in ra tất cảcác file .sh có tên bắt đầu bằng ký tự f †Đoạn mã trên có sử dụng $(command), lát nữa chúng ta sẽhọc vềcú pháp này Lệnh while

†Cho phép lặp khi điều kiện kiểm tra vẫn còn đúng.

†Cú pháp:

while <điều kiện> do <các câu lệnh> done

phuongnh@it-hut.edu.vn 49 Lệnh while - file password.sh

#!/bin/sh

echo "Nhap vao mat khau" read passwd

while [ "$passwd" != "hahaha" ]; do echo "Xin moi nhap lai"

read passwd done

exit 0

phuongnh@it-hut.edu.vn 50 Lệnh while - file whilefor.sh

#!/bin/sh foo=1

while [ "$foo" -le 20 ] do

echo "Lan thu $foo" foo=$(($foo + 1)) done exit 0 phuongnh@it-hut.edu.vn 51 Lệnh until †Cú pháp: until <điều kiện> do <các câu lệnh> done †Vòng lặp dừng nếu điều kiện là đúng phuongnh@it-hut.edu.vn 52 Lệnh until - file until_user.sh

#!/bin/sh

echo "Dang tim user"

until who|grep "$1">/dev/null do

sleep 60 done

#Chuong thong bao echo -e \\a

#Hien thi ten user da login

echo "***$1 vua dang nhap vao he thong***" exit 0 Lệnh who cho danh sách các user đăng nhập vào hệthống Lệnh grep lọc ra tên các user theo

biến môi trường $1 Lệnh until †Ta dùng 2 màn hình console ảo (trong chếđộ văn bản, nhán Alt+F1, Alt+F2) hoặc mở2 terminal trong chếđộđồhọa †Chạy từ1 màn hình: $./until_user.sh phuong Dang tim user

†Nó sẽchờđến khi user tên là phuong đăng nhập vào từmàn hình thứ 2. ***phuong vua dang nhap vao he thong***

Một phần của tài liệu Hệ điều hành Linux (Trang 32 - 36)

Tải bản đầy đủ (PDF)

(48 trang)