ตัวอย่าง Bash If-then-Else

Bash If Then Else Example



ในบทนี้ เราจะมาดูกันว่าเราจะใช้คำสั่ง if-then-Else ในสคริปต์สภาพแวดล้อม Bash ที่เราเขียนได้อย่างไร คำสั่ง if-then-Else เป็นเครื่องมือที่มีประโยชน์ในการกำหนดเส้นทางของการดำเนินการของสคริปต์เมื่อตรงตามเงื่อนไขบางประการ ให้เราดูว่าไวยากรณ์สำหรับคำสั่ง if-then-Else คืออะไร:

ถ้าบางคำสั่ง;
แล้วแล้ว-คำสั่ง;
อื่นคำสั่งอื่น;
เป็น

ในคำสั่งด้านบนที่แสดง หากพบว่า SOME-COMMANDS เป็นจริงหรือพบว่าสถานะการส่งคืนเป็น 0 คำสั่ง THEN-COMMANDS จะถูกดำเนินการ หากไม่เป็นเช่นนั้น คำสั่ง ELSE-COMMANDS จะถูกดำเนินการ ในคำสั่งบางคำสั่ง เรามักจะทำการเปรียบเทียบสตริงหรือการเปรียบเทียบค่าในรูปของจำนวนเต็ม เรายังดำเนินการหลายอย่างที่เกี่ยวข้องกับไฟล์ได้ ให้เราดูตัวอย่างคำสั่งหลักซึ่งส่วนใหญ่ใช้เมื่อทำงานกับเงื่อนไขแบบไฟล์:







หลัก ความหมาย
[ -ถึง ] คืนค่า true เมื่อมี FILE
[-NS] คืนค่า true เมื่อ FILE มีอยู่ & เป็นไฟล์บล็อกพิเศษ
[-ค] คืนค่า true เมื่อมี FILE อยู่ & เป็นไฟล์อักขระพิเศษ
[ -NS ] คืนค่า true เมื่อมี FILE อยู่ & เป็นไดเร็กทอรี
[ -และ ] คืนค่า true เมื่อมี FILE
[ -NS ] คืนค่า จริง เมื่อ FILE มีอยู่ & เป็นไฟล์ปกติ
[ -NS ] คืนค่า true เมื่อมี FILE และตั้งค่าบิต SGID
[ -ชม ] คืนค่า true เมื่อมี FILE อยู่ & เป็นลิงก์สัญลักษณ์
[-k] คืนค่า จริง เมื่อมี FILE และตั้งค่าบิตเหนียว
[ -NS ] คืนค่า true เมื่อมี FILE อยู่ & เป็นไพพ์ที่มีชื่อ (FIFO)
[ -NS ] คืนค่า true เมื่อมี FILE อยู่ & สามารถอ่านได้
[ -NS ] ส่งคืนค่าจริงเมื่อมี FILE และมีขนาดที่มากกว่าศูนย์
[ -NS ] คืนค่า จริง เมื่อ file descriptor FD เปิดอยู่ & หมายถึงเทอร์มินัล
[-ยู] ส่งคืนค่าจริงเมื่อมี FILE และบิต SUID (ตั้งค่า ID ผู้ใช้) ถูกตั้งค่า
[ -ใน ] คืนค่า true เมื่อมี FILE และเขียนได้
[-NS] คืนค่า true เมื่อมี FILE อยู่ & สามารถเรียกใช้งานได้
[-O] คืนค่า จริง เมื่อ FILE มีอยู่ & เป็นเจ้าของโดย ID ผู้ใช้ที่มีประสิทธิภาพ
[ -NS ] คืนค่า จริง เมื่อ FILE มีอยู่ & เป็นเจ้าของโดย ID กลุ่มที่มีผล
[ -NS ] คืนค่า true เมื่อมี FILE อยู่ & เป็นลิงก์สัญลักษณ์
[ -NS ] คืนค่า true เมื่อมี FILE อยู่ & ได้รับการแก้ไขตั้งแต่อ่านครั้งล่าสุด
[ -NS ] คืนค่า จริง เมื่อ FILE มีอยู่ & เป็นซ็อกเก็ต

THEN-COMMANDS และ ELSE-COMMANDS สามารถเป็นการดำเนินการ UNIX ที่ถูกต้องหรือโปรแกรมปฏิบัติการใดๆ ก็ได้ โปรดทราบว่า แล้ว และ เป็น คำสั่งจะถูกคั่นด้วยเครื่องหมายเซมิโคลอนเนื่องจากถือเป็นองค์ประกอบที่แยกจากกันโดยสิ้นเชิงของสคริปต์



ตัวอย่างง่ายๆ ถ้า-แล้ว-อื่น

เรามาเริ่มบทเรียนของเราด้วยตัวอย่างง่ายๆ ด้วยประโยค if-then-Else
นี่คือตัวอย่างโปรแกรม:



ถ้าตัวอย่าง

ถ้าตัวอย่าง





นี่คือผลลัพธ์ที่เราเห็นเมื่อเราเรียกใช้สคริปต์ของเรา:

$. ifelse1.sh
มีค่าเท่ากัน!
$

การใช้อาร์กิวเมนต์บรรทัดคำสั่ง

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



ฉันชื่อ LinuxHint ฉันรักเซิร์ฟเวอร์ โดยเฉพาะเซิร์ฟเวอร์ Ubuntu พวกเขาเป็นเช่นนั้น
สิ้นสุด!

ตอนนี้ เราสามารถเขียนสคริปต์เพื่อค้นหาว่าคำนั้นอยู่ในไฟล์ข้อความหรือไม่ มากำหนดสคริปต์กันตอนนี้:

โยนออก 'หา $1 ใน $2'
กริป $ 1 $ 2
ถ้า [ $? -เกิด 0 ]
แล้ว
โยนออก 'ไม่พบ $1 ในไฟล์ $2'
อื่น
โยนออก 'พบ $1 ในไฟล์ $2'
เป็น
โยนออก 'สคริปต์เสร็จสมบูรณ์'

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

. ifelse2.sh รัก hello.txt

เราจะเห็นผลลัพธ์เช่น:

พบรักในสวัสดี.txt
พบรักใน ไฟล์สวัสดี.txt
สคริปเสร็จแล้ว

การตรวจสอบจำนวนอาร์กิวเมนต์บรรทัดคำสั่ง

ภายในคำสั่ง IF เรายังสามารถตรวจสอบจำนวนอาร์กิวเมนต์บรรทัดคำสั่งที่ส่งผ่านไปยังคำสั่งเพื่อให้เราสามารถดำเนินการได้เช่นเดียวกัน:

นับ=$ #
ถ้า [ ! $count -gt 1 ]
แล้ว
โยนออก 'มีข้อโต้แย้งไม่เพียงพอ'
อื่น
โยนออก 'ทำได้ดีมาก!'
เป็น

เรียกใช้สคริปต์นี้ตอนนี้ เราจะเห็นผลลัพธ์ต่อไปนี้:

อาร์กิวเมนต์บรรทัดคำสั่ง

อาร์กิวเมนต์บรรทัดคำสั่ง

ถ้อยแถลง If-then-Elif-Else

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

ถ้าคำสั่งทดสอบ;
แล้ว
ผลลัพธ์-คำสั่ง;
เอลฟ์
คำสั่งอื่น;
แล้ว
คำสั่งผลลัพธ์อื่น;
อื่น
คำสั่งสำรอง;
เป็น

สิ่งนี้ดูค่อนข้างคุ้นเคยและติดตามได้ง่ายเช่นกัน ให้เรากำหนดตัวอย่างง่ายๆ เพื่อสร้างวิธีการทำงานของต้นไม้:

นับ=$ #
ถ้า [ $count -eq 1 ]
แล้ว
โยนออก 'พบเพียงข้อโต้แย้งเดียวเท่านั้น'
เอลฟ์ [ $count -eq 2 ]
แล้ว
โยนออก 'ดีกว่าพบสองอาร์กิวเมนต์'
อื่น
โยนออก 'ทำได้ดีมาก พบข้อโต้แย้งมากมาย!'
เป็น

นี่คือสิ่งที่เราได้รับกลับมาด้วยคำสั่งนี้:

ถ้า แล้ว เอลฟ์ อื่น ตัวอย่าง

ถ้า แล้ว เอลฟ์ อื่น ตัวอย่าง

การใช้คำสั่งกรณี

คำสั่ง IF-ELSE มีประโยชน์เมื่อคุณมีตัวเลือกมากมายที่คุณต้องตัดสินใจ แต่ในกรณีที่คุณต้องการดำเนินการเฉพาะบางกรณีของการจับคู่แบบตรงทั้งหมดกับผลลัพธ์ เราสามารถใช้คำสั่ง CASE ในสคริปต์ทุบตีได้เช่นกัน ไวยากรณ์ดูเหมือนว่า:

กรณีการแสดงออกในCASE1)คำสั่งเพื่อดำเนินการ;
CASE2)คำสั่งเพื่อดำเนินการ;
CASE2)คำสั่งเพื่อดำเนินการ;
...)คำสั่งเพื่อดำเนินการ;
*)คำสั่งเพื่อดำเนินการ;
esac

กรณีสุดท้ายที่มี * ทำหน้าที่เป็นกรณีเริ่มต้นและจะดำเนินการเมื่อไม่พบกรณีที่กำหนดไว้ข้างต้นที่ตรงกัน

ให้เราสร้างตัวอย่างง่ายๆ โดยใช้คำสั่ง CASE:

กรณี '$ 1' ใน
1)
โยนออก 'ค่าคือ 1'
;;
2)
โยนออก 'ค่าคือ 2'
;;
3)
โยนออก 'ค่าคือ 3'
;;
*)
โยนออก 'ค่าอื่นผ่านไป'
esac

แต่ละคำสั่งของ CASE สิ้นสุดลงโดย ;; (เครื่องหมายอัฒภาคสองครั้ง). นี่คือสิ่งที่เราได้รับกลับมาด้วยคำสั่งนี้:

กรณีตัวอย่าง

กรณีตัวอย่าง

บทสรุป

ในบทเรียนนี้ เรามาดูวิธีที่เราสามารถใช้คำสั่ง IF-ELSE, IF-THEN-ELIF และ CASE ในสคริปต์ Bash ที่เรากำหนดเพื่อดำเนินการเฉพาะตามค่าที่มีอยู่ในโปรแกรมของเราหรือส่งผ่านโดยผู้ใช้โดยใช้ตำแหน่ง พารามิเตอร์