1.If-then
Câu lệnh if-then đc sử dụng để tạo nên việc đánh giá điều điện nào đó. Cú pháp:
if condition
then
commands
...
fi
Ý nghĩa: với if-then trên, trước tiên sẽ đánh giá condition, nếu condition thực thi thành công(exit status code=0) thì sẽ thực hiện các commands sau then.
Ví dụ:
Ta có đoạn script:
Thực thi:
Ở trên, biến testuser đc gán là Cuong.bắt đầu mệnh đề if, câu lệnh grep sẽ tìm xem trong file /etc/passwd có chuỗi nào có tên là Cuong hay ko, nếu trùng tức là câu lệnh đc thực hiện thành công, exit status code là 0. Lúc này, các câu lệnh theo sau then sẽ đc thực thi, liệt kê toàn bộ những file bash của testuser
Ngoài ra còn có thể đặt theo kiểu
if command; then
commands
fi
2.if-then-else
Với mệnh đề if-then ở trên, ta chỉ có 1 lựa chọn cho việc đánh giá. Mệnh đề if-then-else cung cấp một cách so sánh khác. Cho phép ta có nhiều lựa chọn hơn cho việc so sánh.
Cú pháp:
if command
then
commands
else
commands
fi
Nếu command trong câu lệnh if đầu tiên, trả về một exit status code là 0(zero), thì những commands ngay sau then sẽ đc thực thi tương tự như if-then. Nhưng nếu command trên if ko trả về 0, thì các commands phía sau else sẽ đc thực thi.
Thực thi:
3.Câu lệnh test hoặc cặp dấu [ expr ]
Cả 2 Câu lệnh thường đc sử dụng để kiểm tra định dạng file hoặc so sánh các giá trị. Thường thì đc sử dụng cho việc:
- -So sánh các thuộc tính của file
- -Thực hiện việc so sánh các chuỗi
- -So sánh toán học
Cú pháp:
test condition
condition là một loạt các tham số và giá trị đc test thực hiện. Nếu sử dụng với if-then thì sẽ tương tự như vầy:
if test condition
then
commands
fi
hoặc
if [ condition ]
then
commands
fi
***Lưu ý khoảng trắng của condition
So sánh số:
So sánh string:
So sánh thuộc tính của file:
Một số phép so sánh trong shell:
-eq | ngang bằng |
-ne | không ngang bằng |
-lt | nhỏ hơn |
-le | nhỏ hơn hoặc bằng |
-gt | lớn hơn |
-ge | lớn hơn hoặc bằng |
Một số phép xử lý thuộc tính file:
-s | file tồn tại và khác rỗng(NULL) |
-f | file tồn tại và ko phải là thư mục |
-d | thư mục tồn tại |
-x | file có thể thực thi |
-w | file có thể ghi |
-r | file có thể đọc |
Làm việc với string:
Operator | Meaning |
string1 = string2 | string1 ngang bằng string2 |
string1 != string2 | string1 khác string2 |
string1 | string1 ko rỗng hoặc ko đc định nghĩa |
-n string1 | string1 tồn tại và không rỗng |
-z string1 | string1 tồn tại nhưng rỗng |
Phép toán logic:
Operator | Meaning |
! expression | phép NOT |
expression1 -a expression2 | phép AND |
expression1 -o expression2 | phép OR |
Hi Cường,
ReplyDeleteTrường hợp mình muốn so sánh 1 biến với 1 số thực thì dùng command gì?
Để xử lý với số real hoặc float, dùng bc trong linux
ReplyDelete[Cuong@Fedora ~]$ echo 1.2+5.3 | bc
6.5
Hi Cường,
ReplyDeleteMình dùng các lênh so sánh -eq, -ne, -gt .. khi biên dịch báo lỗi command not found. Để dùng được mấy lệnh này có cần import thêm gì nữa không?
Thanks
-eq, -ne, -gt.. ko phải là các câu lệnh mà chỉ là các biểu thức so sánh trong bash shell thôi, ko cần import gì cả. Nếu báo lỗi command not found, bạn thử kiểm tra lại các câu lệnh đang sử dụng trong script.
ReplyDeleteThanks Cường!
ReplyDeleteDo lúc mình đã dùng được các biểu thức so sánh trên. Do mới tìm hiểu cấu trúc Shell script nên chưa nắm rõ cú pháp. Lỗi command not found là do mình bị lỗi khoảng trắng khi dùng dấu [].
Thanks again
cho hoi lenh dung man hinh trong shell la gi vay.
ReplyDeleteminh nhap trong vong lap while ma no cu chay miet ak.
Thanks
sao ma em dùng câu lệnh if khi chạy thì nó chỉ hiện kết quả ở câu lệnh cuối mà k thực hiện điều kiện .Ai biết chỉ em với yahoo: haoduc44
ReplyDelete