Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

6 Bash Conditional Expression Examples ( -e, -eq, -z, !=, [, [[ ..)

นิพจน์ Bash คือการรวมกันของตัวดำเนินการ คุณลักษณะ หรือค่าที่ใช้เพื่อสร้างคำสั่งแบบมีเงื่อนไขของ bash นิพจน์แบบมีเงื่อนไขอาจเป็นนิพจน์ไบนารีหรือยูนารีที่เกี่ยวข้องกับตัวเลข สตริง หรือคำสั่งใดๆ ที่มีสถานะส่งคืนเป็นศูนย์เมื่อสำเร็จ


มีนิพจน์เงื่อนไขหลายอย่างที่สามารถใช้ในการทดสอบกับไฟล์ได้ ต่อไปนี้เป็นนิพจน์เงื่อนไขที่เป็นประโยชน์

  • [ -e filepath ] คืนค่า true หากมีไฟล์อยู่
  • [ -x filepath ] คืนค่า true หากมีไฟล์อยู่และสามารถเรียกทำงานได้
  • [ -S filepath ] คืนค่า true หากมีไฟล์อยู่และเป็นไฟล์ซ็อกเก็ต
  • [ expr1 -a expr2 ] คืนค่า true ถ้านิพจน์ทั้งสองเป็นจริง
  • [ expr1 -o expr2 ] คืนค่า true ถ้านิพจน์ 1 หรือ 2 เป็นจริง

สำหรับนิพจน์เงื่อนไขเพิ่มเติมเพื่อตรวจสอบไฟล์ สตริง และตัวเลข โปรดดูที่หน้า bash man

Bash Example 1. ตรวจสอบการมีอยู่ของไฟล์

ข้อมูลโค้ดสคริปต์เปลือก Bash ต่อไปนี้รับชื่อไฟล์พร้อมพา ธ ที่แน่นอนและตรวจสอบว่าไฟล์นั้นมีอยู่หรือไม่และจะส่งข้อมูลที่เหมาะสม

$ 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

อ้างถึงบทความก่อนหน้าของเราเพื่อทำความเข้าใจ bash if ประเภทคำสั่งต่างๆ

Bash Example 2. เปรียบเทียบตัวเลข

สคริปต์ด้านล่างอ่านตัวเลขจำนวนเต็มสองตัวจากผู้ใช้ และตรวจสอบว่าตัวเลขทั้งสองมีค่าเท่ากันหรือมากกว่าหรือน้อยกว่ากัน

$ 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

หากคุณยังใหม่ต่อการเขียนสคริปต์ทุบตี โปรดอ่านบทแนะนำ Bash ของเรา

ตัวอย่างการทุบตี 3. เครื่องคำนวณเลขคณิตพื้นฐาน

ตัวอย่างนี้อ่านอินพุต ซึ่งเป็นประเภทของการดำเนินการทางคณิตศาสตร์ที่ต้องการดำเนินการกับตัวแปร bash (inp1 และ inp2) การดำเนินการเลขคณิตอาจเป็นการบวก ลบ หรือคูณ..

$ 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

การรู้วิธีใช้พารามิเตอร์พิเศษของ bash ( $*, $@, $#, $$, $!, $?, $-, $_ ) จะทำให้การเขียนสคริปต์ของคุณง่ายขึ้น

Bash Example 4. อ่านและปิงที่อยู่ IP

สคริปต์ต่อไปนี้ใช้เพื่ออ่านที่อยู่ IP และตรวจสอบว่าสามารถเข้าถึงที่อยู่ IP ได้หรือไม่ และพิมพ์ข้อความที่เหมาะสม

$ 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

ในตัวอย่างนี้ -z คืนค่า จริง หาก ipaddress มีความยาวเป็นศูนย์ เมื่อเงื่อนไขนำหน้าด้วย ! (ปฏิเสธ) โอเปอเรเตอร์ หากนิพจน์เป็นเท็จ จะเข้าสู่ if part และดำเนินการ ดังนั้นเมื่อที่อยู่ IP ไม่เป็นค่าว่าง มันจะเข้าไปและตรวจสอบว่าที่อยู่ IP นั้นสามารถเข้าถึงได้หรือไม่

Bash Example 5. สคริปต์การติดตั้ง

สคริปต์ตัวติดตั้งของแพ็คเกจส่วนใหญ่จะไม่อนุญาตให้เรียกใช้งานเหล่านั้นในฐานะผู้ใช้รูท สคริปต์ตรวจสอบผู้ใช้ที่กำลังดำเนินการและแสดงข้อผิดพลาด

สคริปต์ต่อไปนี้อนุญาตให้คุณรันสคริปต์ตัวติดตั้ง oracle เฉพาะในกรณีที่ผู้ใช้ที่ดำเนินการไม่ใช่รูท

$ 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

ในตัวอย่างนี้ ผลลัพธ์ของคำสั่ง whoami จะถูกเปรียบเทียบกับคำว่า "root" สำหรับการเปรียบเทียบสตริง ==, !=, < และควรใช้และสำหรับการเปรียบเทียบตัวเลข eq, ne,lt และ gt ควรใช้

Bash Example 6. วงเล็บที่ปรับปรุงแล้ว

ในตัวอย่างทั้งหมดข้างต้น เราใช้วงเล็บเดียวเพื่อใส่นิพจน์เงื่อนไข แต่ bash อนุญาตให้ใช้วงเล็บคู่ซึ่งทำหน้าที่เป็นเวอร์ชันปรับปรุงของไวยากรณ์วงเล็บเดียว

$ 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"
  • [ เป็นคำพ้องสำหรับคำสั่งทดสอบ แม้ว่ามันจะสร้างขึ้นในเชลล์ มันก็สร้างกระบวนการใหม่
  • [[ เป็นเวอร์ชันปรับปรุงใหม่ ซึ่งเป็นคีย์เวิร์ด ไม่ใช่โปรแกรม
  • [[ เข้าใจโดย Korn และ Bash
  • ในตัวอย่างข้างต้น หากตัวแปร $str มีวลี "condition" อยู่ที่ใด เงื่อนไขจะเป็นจริง
  • นี่คือคุณลักษณะของเปลือกหุ้ม ซึ่งจะได้รับการสนับสนุนเมื่อคุณใช้ [[ (วงเล็บคู่) เท่านั้น ดังนั้นจึงไม่จำเป็นต้องอ้างอาร์กิวเมนต์จำนวนมาก