Bash scripting là công cụ quan trọng cho lập trình viên tự động hóa tác vụ trong Linux.
Script Bash có thể dùng để tự động hóa tác vụ phát triển cục bộ (như upload file để deploy, compile app, hoặc resize ảnh hàng loạt), cũng như tác vụ phía server (gửi email theo lịch, thu thập dữ liệu định kỳ, hoặc gửi thông báo đến thiết bị).
Bạn sẽ muốn chạy một số tác vụ phụ thuộc vào kết quả của tác vụ khác hoặc biến, và đó là nơi if … else sẽ giúp bạn. Quy trình ra quyết định này trong script Bash gọi là sử dụng điều kiện (conditionals).
Hướng dẫn này sẽ cung cấp chi tiết và ví dụ dùng cho câu lệnh if… else trong Bash.
Sử dụng câu lệnh if
Một câu lệnh if đơn giản sẽ thực thi hành động chứa trong nó nếu điều kiện đúng, và trông như sau:
if CONDITIONS; then ACTIONS fi
Ví dụ đầy đủ:
#!/bin/bash if [ 2 -lt 3 ]; then echo "2 is less than 3!" fi
Lưu ý:
- Tất cả script bash bắt đầu bằng dòng #!/bin/bash
- Toán tử -lt kiểm tra nếu giá trị đầu nhỏ hơn giá trị hai. Nếu muốn kiểm tra giá trị hai lớn hơn giá trị một, dùng -gt
- Đọc tiếp để xem danh sách toán tử logic khác.
- Chúng ta dùng lệnh echo để xuất text ra dòng lệnh
- if statements luôn kết thúc bằng fi để kết thúc chúng
Sử dụng câu lệnh else
Nếu bạn muốn thực hiện hành động dựa trên một tập điều kiện, và hành động khác CHỈ nếu những điều kiện đó thất bại, bạn có thể dùng câu lệnh else:
#!/bin/bash echo -n "Enter number: " read number if [ $number -lt 3 ]; then echo "$number is less than 3!" else echo "$number is not less than 3!" fi
Lưu ý:
- Chúng ta vẫn dùng các yếu tố giống trên để so sánh giá trị và xuất text
- Chúng ta dùng lệnh read để nhận input người dùng
- Chúng ta dùng biến để lưu giá trị cho dùng sau
Sử dụng câu lệnh elif (Else If)
Để kiểm tra nhiều tập điều kiện và thực hiện hành động khác nhau nếu từng cái kiểm tra đúng, dùng câu lệnh elif (else if):
#!/bin/bash echo -n "Enter number: " read number if [ $number -lt 3 ]; then echo "$number is less than 3!" elif [ $number -eq 3 ]; then echo "$number is equal to 3!" else echo "$number is not less than 3!" fi
Nhiều điều kiện trong câu lệnh if
Nếu bạn có nhiều điều kiện muốn kiểm tra, bạn có thể dùng toán tử && (AND) và || (OR) để quyết định hành động có nên thực hiện hay không
#!/bin/bash echo -n "Enter number: " read number if [[ $number -lt 3 ]] && [[ $number -lt 0 ]]; then echo "$number is less than three and is negative" elif [[ $number -lt 3 ]] || [[ $number -gt 6 ]]; then echo "$number is not negative, but is less than 3 or greater than 6" else echo "$number is greater than 3 and less than 6" fi
Lồng câu lệnh (Statement Nesting)
Bạn có thể đặt câu lệnh if bên trong câu lệnh if khác:
#!/bin/bash
echo -n "Enter number: "
read number
if [ $number -gt 3 ]; then
echo "$number is greater than 3"
if [ $number -gt 6 ]; then
echo "$number is also greater than 6"
else
echo "$number is not also greater than 6"
fi
fi
Toán tử so sánh
Trong các ví dụ trên, chúng ta đã dùng toán tử -lt (nhỏ hơn), -gt (lớn hơn), và = (bằng). Dưới đây là một số toán tử logic thường dùng khác:
So sánh số
$number1 -eq $number2 : Trả về true nếu hai biến bằng nhau $number1 -gt $number2 : Trả về true nếu $number1 lớn hơn $number2 $number1 -ge $number2 : Trả về true nếu $number1 lớn hơn hoặc bằng $number2 $number1 -lt $number2 : Trả về true nếu $number1 nhỏ hơn $number2 $number1 -le $number2 : Trả về true nếu $number1 nhỏ hơn hoặc bằng $number2
So sánh chuỗi
$string1 = $string2 : Trả về true nếu $string1 và $string2 bằng nhau $string1 != $string2 : Trả về true nếu $string1 và $string2 không bằng nhau
Như trên, để đảo ngược kết quả biểu thức so sánh, đặt toán tử ! (NOT) trước nó, ví dụ, *!= nghĩa là KHÔNG BẰNG.
Khi so sánh chuỗi, luôn bọc chúng trong ngoặc kép kép để các dấu cách không bị hiểu nhầm bởi script bash của bạn.
Bạn cũng nên bọc biến chứa chuỗi trong ngoặc kép để chắc chắn chúng không bị hiểu nhầm:
#!/bin/bash echo -n "Enter string: " read string if ["$string" = "hello there!"] echo "You said hello there!" fi
Kiểm tra trạng thái file hoặc thư mục
-d $filepath : Trả về true nếu $filepath tồn tại và là thư mục -e $filepath : Trả về true nếu $filepath tồn tại bất kể file hay thư mục -f $filepath : Trả về true nếu $filepath tồn tại và là file -h $filepath : Trả về true nếu $filepath tồn tại và là symbolic link -r $filepath : Trả về true nếu $filepath tồn tại và có thể đọc -w $filepath : Trả về true nếu $filepath tồn tại và có thể ghi -x $filepath : Trả về true nếu $filepath tồn tại và có thể thực thi
Kết luận
Tạo script Bash riêng có thể tiết kiệm thời gian khổng lồ, và khá đơn giản để viết khi bạn biết các khối xây dựng cơ bản.
if… else statements cho phép bạn kiểm soát script phản ứng như thế nào với input người dùng hoặc trạng thái file.
Xem các bài Bash khác của chúng tôi để tìm hiểu thêm!