1
3
7.2.2.1
Cấu trúc rẽ nhánh có điều kiện if
Bash cung cấp sự thực hiện có điều kiện lệnh nào đó sử dụng câu lệnh if, câu lệnh if của
bash đầy đủ chức năng như của C. Cú pháp của nó được khái quát như sau:
if condition
then
statements
[elif condition
statements]
[else
statements]
fi
Đầu tiên, ta cần phải chắc chắn rằng mình hiểu if kiểm tra trạng thái thoát của câu lệnh
last trong condition. Nếu nó là 0 (true), sau đó statements sẽ được thi hành, nhưng nếu nó
khác 0, thì mệnh đề else sẽ được thi hành và điều khiển nhảy tới dòng đầu tiên của mã fi.
Các mệnh đề elif (tuỳ chọn) (có thể nhiều tuỳ ý) sẽ chỉ thi hành khi điều kiện if là false.
Tương tự, mệnh đề else (tuỳ chọn) sẽ chỉ thi hành khi tất cả else không thỏa mãn. Nhìn
chung, các chương trình Linux trả về 0 nếu thành công hay hoàn toàn bình thường, và khác
0 nếu ngược lại, vì thế không có hạn chế nào cả.
Chú ý
: Không phải tất cả chương trình đều tuân theo cùng một chuẩn cho giá trị trả về,
vì thế cần kiểm tra tài liệu về các chương trình ta kiểm tra mã thoát với điều kiện if. Ví dụ
chương trình diff, trả về 0 nếu không có gì khác nhau, 1 nếu có sự khác biệt và 2 nếu có
vấn đề nào đó. Nếu một câu điều kiện hoạt động không như mong đợi thì hãy kiểm tra tài
liệu về mã thoát .
Không quan tâm đến cách mà chương trình xác định mã thoát của chúng, bash lấy 0 có
nghĩa là true hoặc bình thường còn khác 0 là false. Nếu ta cần cụ thể để kiểm tra một mã
thoát của lệnh, sử dụng toán tử $? ngay sau khi chạy lệnh. $? trả về mã thoát của lệnh chạy
ngay lúc đó.
Phức tạp hơn, bash cho phép ta phối hợp các mã thoát trong phần điều kiện sử dụng các
toán tử && và || được gọi là toán tử logic AND và OR. Cú pháp đầy đủ cho toán tử AND
như sau:
command1 && command2
Câu lệnh command2 chỉ được chạy khi và chỉ khi command1 trả về trạng thái là số 0
(true).
Cú pháp cho toán tử OR thì như sau:
command1 || command2
Câu lệnh command2 chỉ được chạy khi và chỉ khi command1 trả lại một giá trị khác 0
(false).
Ta có thể kết hợp lại cả 2 loại toán tử lại để có một biểu thức như sau:
command1 && comamnd2 || command3
Nếu câu lệnh command1 chạy thành công thì shell sẽ chạy lệnh command2 và nếu
command1 không chạy thành công thì command3 được chạy.