Hướng dẫn này sẽ hướng dẫn bạn những điều cơ bản về Bash if Statement và chỉ cho bạn cách sử dụng nó trong các tập lệnh shell của bạn.

Điều kiện là một trong những khái niệm cơ bản nhất của lập trình máy tính. Giống như trong bất kỳ ngôn ngữ lập trình khác, ifif..elseif..elif..else , và lồng nhau if statement trong Bash được sử dụng để thực thi mã dựa trên một điều kiện nhất định.

If Statement

Lệnh if điều kiện bash có thể có các dạng khác nhau. Câu lệnh if cơ bản nhất có dạng sau:

if TEST-COMMAND
then
  STATEMENTS
fi

Câu lệnh if bắt đầu với từ khóa if, theo sau là biểu thức điều kiện và từ khóa then. Câu lệnh kết thúc bằng từ khóa fi.

Nếu giá trị TEST-COMMAND được đánh giá là True , giá trị STATEMENTS sẽ được thực thi. Nếu TEST-COMMAND trả lại False , không có gì xảy ra; các STATEMENTS get bỏ qua.

Nói chung, một phương pháp hay là luôn thụt lề code của bạn và tách các khối mã bằng các dòng trống. Hầu hết mọi người chọn sử dụng thụt lề 4 dấu cách hoặc 2 dấu cách. Thụt lề và dòng trống giúp mã của bạn dễ đọc và có tổ chức hơn.

Hãy xem đoạn mã ví dụ sau để kiểm tra xem một số nhất định có lớn hơn 10 hay không:

#!/bin/bash

echo -n "Enter a number: "
read VAR

if [[ $VAR -gt 10 ]]
then
  echo "The variable is greater than 10."
fi

Lưu code trong một tệp và chạy nó từ dòng lệnh:

bash test.sh

Tập lệnh sẽ nhắc bạn nhập một số. Ví dụ: nếu bạn nhập 15, lệnh test sẽ đánh giá là true vì 15 lớn hơn 10 và echo  lệnh bên trong mệnh đề then sẽ được thực thi.

The variable is greater than 10.

If..else Statement

Câu lệnh if..else Bash có dạng sau:

if TEST-COMMAND
then
  STATEMENTS1
else
  STATEMENTS2
fi

Nếu giá trị TEST-COMMAND được đánh giá là TrueSTATEMENTS1 sẽ được thực thi. Ngược lại, nếu TEST-COMMAND trả về FalseSTATEMENTS2 sẽ được thực thi. Bạn chỉ có thể có một else mệnh đề trong câu lệnh.

Hãy thêm một mệnh đề else vào tập lệnh ví dụ trước:

#!/bin/bash

echo -n "Enter a number: "
read VAR

if [[ $VAR -gt 10 ]]
then
  echo "The variable is greater than 10."
else
  echo "The variable is equal or less than 10."
fi

Nếu bạn chạy mã và nhập một số, tập lệnh sẽ in một thông báo khác dựa trên việc số đó lớn hơn hay nhỏ hơn / bằng 10.

If..elif..else Statement

Câu if..elif..else lệnh Bash có dạng sau:

if TEST-COMMAND1
then
  STATEMENTS1
elif TEST-COMMAND2
then
  STATEMENTS2
else
  STATEMENTS3
fi

Nếu giá trị TEST-COMMAND1 được đánh giá là TrueSTATEMENTS1 sẽ được thực thi. Nếu giá trị TEST-COMMAND2 được đánh giá là TrueSTATEMENTS2 sẽ được thực thi. Nếu không có lệnh nào trong số các lệnh kiểm tra được đánh giá là True , lệnh STATEMENTS2 được thực thi.

Bạn có thể có một hoặc nhiều elif mệnh đề trong câu lệnh. Các else điều khoản là không bắt buộc.

Các điều kiện được đánh giá tuần tự. Khi một điều kiện trả về True , các điều kiện còn lại sẽ không được thực hiện và điều khiển chương trình sẽ chuyển đến phần cuối của các if câu lệnh.

Hãy thêm một mệnh đề elif vào tập lệnh trước:

#!/bin/bash

echo -n "Enter a number: "
read VAR

if [[ $VAR -gt 10 ]]
then
  echo "The variable is greater than 10."
elif [[ $VAR -eq 10 ]]
then
  echo "The variable is equal to 10."
else
  echo "The variable is less than 10."
fi

Câu lệnh lồng nhau

Bash cho phép bạn lồng các câu lệnh if trong các câu lệnh if. Bạn có thể đặt nhiều câu lệnh if bên trong một if câu lệnh khác .

Tập lệnh sau sẽ nhắc bạn nhập ba số và in ra số lớn nhất trong ba số.

#!/bin/bash

echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3

if [[ $VAR1 -ge $VAR2 ]]
then
  if [[ $VAR1 -ge $VAR3 ]]
  then
    echo "$VAR1 is the largest number."
  else
    echo "$VAR3 is the largest number."
  fi
else
  if [[ $VAR2 -ge $VAR3 ]]
  then
    echo "$VAR2 is the largest number."
  else
    echo "$VAR3 is the largest number."
  fi
fi

Đây là cách đầu ra sẽ như thế nào:

Enter the first number: 4
Enter the second number: 7
Enter the third number: 2
7 is the largest number.

Nói chung, sẽ hiệu quả hơn nếu sử dụng case thay vì if câu lệnh lồng nhau .

Nhiều điều kiện

Các toán tử OR và lôgic AND cho phép bạn sử dụng nhiều điều kiện trong các câu lệnh if.

Đây là một phiên bản khác của tập lệnh để in số lớn nhất trong ba số. Trong phiên bản này, thay vì các if lồng nhau , chúng ta đang sử dụng toán tử logic AND&& ).

#!/bin/bash

echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3

if [[ $VAR1 -ge $VAR2 ]] && [[ $VAR1 -ge $VAR3 ]]
then
  echo "$VAR1 is the largest number."
elif [[ $VAR2 -ge $VAR1 ]] && [[ $VAR2 -ge $VAR3 ]]
then
  echo "$VAR2 is the largest number."
else
  echo "$VAR3 is the largest number."
fi

Toán tử test

Trong Bash,lệnh test có một trong các dạng cú pháp sau:

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

Để làm cho tập lệnh di động, hãy thích sử dụng [ lệnh kiểm tra cũ , lệnh này có sẵn trên tất cả các trình bao POSIX. Phiên bản nâng cấp mới của test lệnh [[ (dấu ngoặc kép) được hỗ trợ trên hầu hết các hệ thống hiện đại sử dụng Bash, Zsh và Ksh làm trình shell mặc định.

Để phủ định biểu thức kiểm tra, hãy sử dụng toán tử logic NOT! ). Khi so sánh các chuỗi , hãy luôn sử dụng dấu ngoặc kép đơn hoặc dấu ngoặc kép để tránh các vấn đề tách từ và lặp lại.

Dưới đây là một số toán tử được sử dụng phổ biến nhất:

  • -n  VAR – Đúng nếu độ dài của VAR lớn hơn 0.
  • -z  VAR – Đúng nếu giá trị VAR trống.
  • STRING1 = STRING2 – Đúng nếu STRING1 và STRING2 bằng nhau.
  • STRING1 != STRING2 – Đúng nếu STRING1 và STRING2 không bằng nhau.
  • INTEGER1 -eq INTEGER2 – Đúng nếu INTEGER1 và INTEGER2 bằng nhau.
  • INTEGER1 -gt INTEGER2 – Đúng nếu INTEGER1 lớn hơn INTEGER2 .
  • INTEGER1 -lt INTEGER2 – Đúng nếu INTEGER1 nhỏ hơn INTEGER2 .
  • INTEGER1 -ge INTEGER2 – Đúng nếu INTEGER1 bằng hoặc lớn hơn INTEGER2.
  • INTEGER1 -le INTEGER2 – Đúng nếu INTEGER1 bằng hoặc nhỏ hơn INTEGER2 .
  • -h  FILE – Đúng nếu FILE tồn tại và là một liên kết tượng trưng.
  • -r  FILE – Đúng nếu FILE tồn tại và có thể đọc được.
  • -w  FILE – Đúng nếu FILE tồn tại và có thể ghi.
  • -x  FILE – Đúng nếu FILE tồn tại và có thể thực thi được.
  • -d  FILE – Đúng nếu FILE tồn tại và là một thư mục.
  • -e  FILE – Đúng nếu FILE tồn tại và là một tệp, bất kể loại (nút, thư mục, ổ cắm, v.v.).
  • -f  FILE – Đúng nếu FILE  tệp tồn tại và là tệp thông thường (không phải thư mục hoặc thiết bị).

Phần kết luận

Các lệnh ifif..else và if..elif..else cho phép bạn kiểm soát các luồng thực hiện kịch bản Bash của bằng cách đánh giá các điều kiện nhất định.

Nếu bạn có bất kỳ câu hỏi hoặc phản hồi nào, vui lòng để lại bình luận.

5 1 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments