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