Biểu thức bash là sự kết hợp của các toán tử, tính năng hoặc giá trị được sử dụng để tạo thành một câu lệnh điều kiện bash. Biểu thức điều kiện có thể là biểu thức nhị phân hoặc đơn phân liên quan đến số, chuỗi hoặc bất kỳ lệnh nào có trạng thái trả về bằng 0 khi thành công.
Có một số biểu thức điều kiện có thể được sử dụng để kiểm tra với các tệp. Sau đây là một số biểu thức điều kiện hữu ích.
- [-e filepath] Trả về true nếu tệp tồn tại.
- [-x filepath] Trả về true nếu tệp tồn tại và có thể thực thi được.
- [-S filepath] Trả về true nếu tệp tồn tại và tệp đó là tệp socket.
- [expr1 -a expr2] Trả về true nếu cả hai biểu thức đều đúng.
- [expr1 -o expr2] Trả về true nếu một trong hai biểu thức 1 hoặc 2 là true.
Để biết thêm biểu thức điều kiện để kiểm tra tệp, chuỗi và số, vui lòng tham khảo trang bash man.
Ví dụ về Bash 1. Kiểm tra sự tồn tại của tệp
Đoạn mã Bash shell script sau lấy tên tệp với đường dẫn tuyệt đối của nó và kiểm tra xem tệp có tồn tại hay không và nó sẽ đưa ra thông tin thích hợp.
$ cat exist.sh #! /bin/bash file=$1 if [ -e $file ] then echo -e "File $file exists" else echo -e "File $file doesnt exists" fi $ ./exist.sh /usr/bin/boot.ini File /usr/bin/boot.ini exists
Tham khảo bài viết trước của chúng tôi để hiểu các loại câu lệnh if bash khác nhau.
Ví dụ về Bash 2. So sánh các số
Tập lệnh dưới đây đọc hai số nguyên từ người dùng và kiểm tra xem cả hai số đều bằng nhau hoặc lớn hơn hoặc nhỏ hơn nhau.
$ cat numbers.sh #!/bin/bash echo "Please enter first number" read first echo "Please enter second number" read second if [ $first -eq 0 ] && [ $second -eq 0 ] then echo "Num1 and Num2 are zero" elif [ $first -eq $second ] then echo "Both Values are equal" elif [ $first -gt $second ] then echo "$first is greater than $second" else echo "$first is lesser than $second" fi $ ./numbers.sh Please enter first number 1 Please enter second number 1 Both Values are equal $ ./numbers.sh Please enter first number 3 Please enter second number 12 3 is lesser than 12
Nếu bạn chưa quen với bash scripting, hãy tham khảo hướng dẫn Giới thiệu về Bash của chúng tôi.
Ví dụ về Bash 3. Máy tính số học cơ bản
Ví dụ này đọc đầu vào, là một loại phép toán số học muốn thực hiện trên các biến cơ sở (inp1 và inp2). Phép toán số học có thể là phép cộng, phép trừ hoặc phép nhân ..
$ cat calculator.sh #!/bin/bash inp1=12 inp2=11 echo "1. Addition" echo "2. Subtraction" echo "3. Multiplication" echo -n "Please choose a word [1,2 or 3]? " read oper if [ $oper -eq 1 ] then echo "Addition Result " $(($inp1 + $inp2)) else if [ $oper -eq 2 ] then echo "Subtraction Result " $(($inp1 - $inp2)) else if [ $oper -eq 3 ] then echo "Multiplication Result " $(($inp1 * $inp2)) else echo "Invalid input" fi fi fi $ ./calculator.sh 1. Addition 2. Subtraction 3. Multiplication Please choose a word [1,2 or 3]? 4 Invalid input
Biết cách sử dụng các tham số đặc biệt bash ($ *, $ @, $ #, $$, $ !, $ ?, $ -, $ _) sẽ giúp cuộc sống viết kịch bản của bạn trở nên dễ dàng.
Bash Ví dụ 4. Đọc và Ping địa chỉ IP
Tập lệnh sau được sử dụng để đọc địa chỉ IP và kiểm tra xem địa chỉ IP có thể truy cập được hay không và in thông báo thích hợp.
$ cat ipaddr.sh #!/bin/bash echo "Enter the Ipaddress" read ip if [ ! -z $ip ] then ping -c 1 $ip if [ $? -eq 0 ] ; then echo "Machine is giving ping response" else echo "Machine is not pinging" fi else echo "IP Address is empty" fi $ ./ipaddr.sh Enter the Ipaddress 10.176.191.106 Pinging 10.176.191.106 with 32 bytes of data: Reply from 10.176.191.106: bytes=32 time<1ms TTL=128 Ping statistics for 10.176.191.106: Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms Machine is giving ping response
Trong ví dụ này, -z trả về true nếu ipaddress có độ dài bằng 0, Khi điều kiện được đặt trước! (phủ định) toán tử, nếu biểu thức là sai, nó nhập vào if part và thực thi. Vì vậy, khi địa chỉ IP không rỗng, nó sẽ nhập và kiểm tra xem địa chỉ IP có thể truy cập được hay không.
Ví dụ về Bash 5. Tập lệnh trình cài đặt
Tập lệnh trình cài đặt của hầu hết các gói sẽ không cho phép thực thi những gói đó với tư cách là người dùng root. Tập lệnh kiểm tra người dùng đang thực thi và xử lý lỗi.
Tập lệnh sau, cho phép bạn thực thi tập lệnh trình cài đặt oracle chỉ khi người dùng đang thực thi không phải là root.
$ cat preinstaller.sh #!/bin/bash if [ `whoami` != 'root' ]; then echo "Executing the installer script" ./home/oracle/databases/runInstaller.sh else echo "Root is not allowed to execute the installer script" fi Executing the script as a root user, # ./preinstaller.sh Root is not allowed to execute the installer script
Trong ví dụ này, đầu ra của lệnh whoami được so sánh với từ "root". Để so sánh chuỗi ==,! =, ≪ và nên được sử dụng và để so sánh số eq, ne, lt và gt nên được sử dụng.
Ví dụ về Bash 6. Dấu ngoặc nâng cao
Trong tất cả các ví dụ trên, chúng tôi chỉ sử dụng dấu ngoặc đơn để bao quanh biểu thức điều kiện, nhưng bash cho phép dấu ngoặc kép đóng vai trò là phiên bản nâng cao của cú pháp dấu ngoặc đơn.
$ cat enhanced.sh #!/bin/bash echo "Enter the string" read str if [[ $str == *condition* ]] then echo "String "$str has the word \"condition\" fi $ ./enhanced.sh Enter the string conditionalstatement String conditionalstatement has the word "condition"
- [là một từ đồng nghĩa với lệnh kiểm tra. Ngay cả khi nó được tích hợp vào shell, nó sẽ tạo ra một quy trình mới.
- [[là phiên bản cải tiến mới của nó, là một từ khóa, không phải một chương trình.
- [[được hiểu bởi Korn và Bash.
- Trong ví dụ trên, nếu biến $ str chứa cụm từ “điều kiện” ở bất kỳ đâu thì điều kiện là đúng.
- Đây là tính năng bao cầu của trình bao, sẽ chỉ được hỗ trợ khi bạn sử dụng [[(dấu ngoặc kép) và do đó nhiều đối số không cần được trích dẫn.