Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Thành thạo logic điều kiện Bash: Sử dụng câu lệnh if…else với ví dụ thực tế

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!