LẬP TRÌNH CẤU TRÚC VÀ VÒNG LẶP TRONG SHELL

Bài thực hành buổi 3 

LẬP TRÌNH CẤU TRÚC VÀ  

VÒNG LẶP TRONG SHELL  




Nội dung thực hành  

Lệnh if  

Lệnh for  

Lệnh while  

Lệnh case  

Trước khi tìm hiểu về các cấu trúc lập trình và vòng lặp trong shell của Linux,  chúng ta đề cập một chút về kiểu boolean trong shell.  

Trong shell của Linux giá trị True và False được thể hiện tương ứng bằng 2 giá trị không (0 – zero) và khác không (non-zero).  

Ví dụ:  

 5 > 2 0 (True)  

 5 < 2 1 (False)  

1. Câu lệnh if  

Câu lệnh if được dùng để thiết lặp quyết định (lệnh rẽ nhánh) trong shell script.  Cú pháp:  

 if condition  

 then  

 command1  

 ...  

 ...  

 fi  

Lệnh command1 được thực thi khi điều kiện condition là True (0), ngược lại lệnh  tiếp sau lệnh if (sau từ khóa fi) được thực hiện.  

Ví dụ: 

Ths. Phan Thượng Cang - Ths. Bùi Quốc Thái Trang 27  

Tài Liệu Thực Hành Hệ Điều Hành – Bộ môn HTMT&TT  

Lưu đoạn script trên vời tên file là rmif, thực hiên chmod và thực thi. Kết quả thực  thi như sau:  

Lần đầu thực thi rmif với tham số aaaa sẽ nhân được một thông báo lỗi “No such  file or directory”. Lần thứ 2 thực hiện với tham số a thì nhận được một thông báo  “a is deleted successfully”.  

Như vậy đoạn script trên thực hiện xóa file với tên file được truyền vào từ tham số của script. Nếu tên file không tồn tại thì lệnh rm không thành công hay nói cách  khác lệnh sẽ trả về exit status là khác không có nghĩa la False. Ngược lại exit  status bằng không (0) có nghĩa là True, khi đó lệnh echo được in ra màn hình.  

2. Lệnh test hoặc [expr]  

Lệnh test hoặc [expr] dùng để kiểm tra một biểu thức logic là True hay False. Nếu  biểu thức có giá True lệnh test hoặc [expr] sẽ trả về giá trị 0, ngược lại trả về giá  trị khác không.  

Khảo sát đoạn script sau:  

if test $1 -gt 0  

 then  

 echo "$1 is positive number"  

fi  

'




Lệnh test và [expr] hoạt động với các loại dữ liệu như: Integer, file và chuỗi ký tự.  Dưới đây là các phép toán được dùng trong lệnh test hoặc [expr]  Các phép toán so sánh  

Phép  

toán 

Ý nghĩa 

Lệnh test sử 

dụng với if 

[expr] sử dụng  

với if 

-eq 

So sánh bằng (==) 

if test 5 –eq 6 

if [5 –eq 6] 

-ne 

Không bằng (!=) 

if test 5 –ne 6 

if [5 –ne 6] 

-lt 

Nhỏ hơn (<) 

if test 5 –lt 6 

if [5 –lt 6] 

-le 

Nhỏ hơn hoặc bằng (<=) 

if test 5 -le 6 

if [5 –le 6] 

-gt 

Lớn hơn (>) 

if test 5 –gt 6 

if [5 –gt 6] 

-ge 

Lớn hơn hoặc bằng (>=) 

if test 5 –ge 6 

if [5 –ge 6] 



Phép toán so sánh chuỗi  

Phép  

toán 

Ý nghĩa 

Lệnh test sử dụng với if 

[expr] sử dụng với if 

So sánh bằng 

if test “aa” = “bb” 

if [“aa” = “bb”] 

!= 

So sánh không bằng 

if test “aa” != “bb” 

if [“aa” != “bb”] 



Sử dụng lệnh test hoặc [expr] với file và thư mục  

test 

Ý nghĩa 

-s file 

Trả về True (0) nếu file không rỗng 

-f file 

Trả về True (0) nếu là file (không phải là thư mục) 

-d dir 

Trả về True (0) nếu là thư mục 

-w file 

Trả về True (0) nếu file có thể viết 

-r file 

Trả về True (0) nếu file chỉ đọc 

-x file 

Trả về True (0) nếu file có thể thực thi 



Phép toán logic  

Phép toán 

Ý nghĩa 

! expression 

Phủ định biểu thức expression 

expr1 –a expr2 

Phép toán AND 2 biểu thức 

expr1 –o expr2 

Phép toán OR 2 biểu thức