5.8 Shell - một ngôn ngữ lập trình
117
5.8.1
Toán tử if và test (hoặc [ ])
Cấu trúc của toán tử điều kiện có dạng thu gọn như sau:
if
list1 then list2 else list3 fi
trong đó, list1, list2, và list3 là các chuỗi câu lệnh, phân cách nhau bởi
dấu phảy và kết thúc bởi một dấu chấm phẩy hay ký tự dòng mới. Ngoài ra, các
chuỗi này có thể được đưa vào dấu ngoặc nhọn: list. Toán tử if kiểm tra giá trị
được trả lại bởi các câu lệnh từ list1. Nếu trong danh sách có vài câu lệnh, thì
kiểm tra giá trị được trả lại bởi câu lệnh cuối cùng của danh sách. Nếu giá trị
này bằng 0, thì sẽ thực hiện các lệnh từ list2; còn nếu giá trị này khác không,
thì sẽ thực hiện những lệnh từ list3. Giá trị được trả lại bởi toán tử if như
vậy, trùng với giá trị mà chuỗi lệnh thực hiện (list2 hoặc list3) đưa ra. Dạng
đầy đủ của lệnh if như sau:
if
list then list [ elif list then list ] ... [ else list ] fi
(ở đây dấu ngoặc vuông chỉ có nghĩa là, những gì nằm trong nó, ngoặc vuông,
không nhất thiết phải có). Biểu thức đứng sau if hay elif thường là câu lệnh
test
, mà có thể được biểu thị bởi dấu ngoặc vuông [ ]. Lệnh test thực hiện
phép tính một biểu thức nào đó, và trả lại giá trị 0, nếu biểu thức là đúng, và 1
trong trường hợp ngược lại. Biểu thức được đưa tới chương trình test như một
tham số của chương trình. Thay vì gõ test expression có thể đưa biểu thức
expression
vào ngoặc vuông: [ expression ]
Cần chú ý rằng, test và [ đó là hai tên của của cùng một chương trình, chứ
không phải là một phép biến hóa thần thông nào đó của hệ vỏ bash (chỉ là cú
pháp của [ đòi hỏi phải có dấu đóng ngoặc). Và cũng cần chú ý rằng ở chỗ của
test
trong cấu trúc if có thể sử dụng bất kỳ chương trình nào. Để kết thúc mục
này, chúng ta đưa ra ví dụ sử dụng if:
if [ -x /usr/bin/unicode_start ] ; then
unicode_start
else
echo "hello world"
fi
Về toán tử test (hay [...]) cần đi sâu hơn.
5.8.2
Toán tử test và điều kiện của biểu thức
Biểu thức điều kiện, sử dụng trong toán tử test, được xây dựng trên cơ sở
kiểm
tra thuộc tính tập tin, so sánh các dòng và các so sánh số học thông thường. Biểu
thức phức tạp hơn được tạo ra từ các thao tác đơn và kép sau (“những viên gạch
cơ sở”):
-a file
Đúng nếu tập tin có tên file tồn tại.