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, if
, if..else
, if..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à True
, STATEMENTS1
sẽ được thực thi. Ngược lại, nếu TEST-COMMAND
trả về False
, STATEMENTS2
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à True
, STATEMENTS1
sẽ được thực thi. Nếu giá trị TEST-COMMAND2
được đánh giá là True
, STATEMENTS2
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ủaVAR
lớn hơn 0.-z
VAR
– Đúng nếu giá trịVAR
trống.STRING1 = STRING2
– Đúng nếuSTRING1
vàSTRING2
bằng nhau.STRING1 != STRING2
– Đúng nếuSTRING1
vàSTRING2
không bằng nhau.INTEGER1 -eq INTEGER2
– Đúng nếuINTEGER1
vàINTEGER2
bằng nhau.INTEGER1 -gt INTEGER2
– Đúng nếuINTEGER1
lớn hơnINTEGER2
.INTEGER1 -lt INTEGER2
– Đúng nếuINTEGER1
nhỏ hơnINTEGER2
.INTEGER1 -ge INTEGER2
– Đúng nếuINTEGER1
bằng hoặc lớn hơn INTEGER2.INTEGER1 -le INTEGER2
– Đúng nếuINTEGER1
bằng hoặc nhỏ hơnINTEGER2
.-h
FILE
– Đúng nếuFILE
tồn tại và là một liên kết tượng trưng.-r
FILE
– Đúng nếuFILE
tồn tại và có thể đọc được.-w
FILE
– Đúng nếuFILE
tồn tại và có thể ghi.-x
FILE
– Đúng nếuFILE
tồn tại và có thể thực thi được.-d
FILE
– Đúng nếuFILE
tồn tại và là một thư mục.-e
FILE
– Đúng nếuFILE
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ếuFILE
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 if
, if..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.