Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

6 Ví dụ về biểu thức có điều kiện Bash (-e, -eq, -z,! =, [, [[..)

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.