วิธีใช้ Bash If Statement (พร้อม 4 ตัวอย่าง)

เผยแพร่แล้ว: 2023-05-08
แล็ปท็อป Linux แสดงหน้าต่างเทอร์มินัลที่มีรูปแบบลูกโลกในพื้นหลังและลายน้ำไบนารี
fatmawati achmad zaenuri/Shutterstock
ใช้คำสั่ง Linux Bash if เพื่อสร้างนิพจน์เงื่อนไขด้วยโครงสร้าง if then fi เพิ่มคีย์เวิร์ด elif สำหรับนิพจน์เงื่อนไขเพิ่มเติม หรือคีย์เวิร์ด else เพื่อกำหนดส่วน catch-all ของโค้ดที่จะดำเนินการหากไม่มีการดำเนินการเงื่อนไขก่อนหน้า

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

การดำเนินการตามเงื่อนไขคืออะไร?

โดยรวมแล้วสคริปต์ Bash นั้นไม่สำคัญเลย โดยปกติแล้วจำเป็นต้องมีลำดับการดำเนินการเพื่อใช้เส้นทางที่แตกต่างกันผ่านสคริปต์ ตามผลลัพธ์ของการตัดสินใจ สิ่งนี้เรียกว่าการดำเนินการตามเงื่อนไข

วิธีหนึ่งในการตัดสินใจว่าจะใช้สาขาใดของการดำเนินการคือการใช้คำสั่ง if คุณอาจได้ยินคำสั่ง if ที่เรียกว่า if then statement หรือ if then else คำสั่ง พวกเขาเป็นชื่อที่แตกต่างกันสำหรับสิ่งเดียวกัน

9 ตัวอย่างของ for Loops ใน Linux Bash Scripts
ที่เกี่ยวข้อง 9 ตัวอย่างของ for Loops ใน Linux Bash Scripts

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

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

คำสั่ง if อาจเป็นวิธีที่ใช้บ่อยที่สุดในการดำเนินการตามเงื่อนไข นี่คือวิธีใช้ในการเขียนสคริปต์ Bash

ที่เกี่ยวข้อง: วิธีตรวจสอบว่ามีไฟล์อยู่ใน Linux Bash Scripts หรือไม่

ตัวอย่างคำสั่ง if อย่างง่าย

นี่คือรูปแบบมาตรฐานของคำสั่ง if ที่ง่ายที่สุด:

 ถ้า [เงื่อนไขนี้เป็นจริง]
แล้ว
  ดำเนินการคำสั่งเหล่านี้
ไฟ

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

 ถ้า [เงื่อนไขนี้เป็นจริง]; แล้ว
  ดำเนินการคำสั่งเหล่านี้
ไฟ

บางประเด็นที่ควรทราบ:

  • คำสั่ง if สรุปโดยการเขียน fi
  • ต้องมีช่องว่าง หลัง วงเล็บเหลี่ยมแรก ” [ ” และ ก่อน วงเล็บเหลี่ยมที่สอง ” ] ” ของการทดสอบแบบมีเงื่อนไข
  • หากคุณกำลังจะใส่คีย์เวิร์ด then ในบรรทัดเดียวกับการทดสอบเงื่อนไข ตรวจสอบให้แน่ใจว่าคุณใช้เครื่องหมายอัฒภาค ” ; ” หลังการทดสอบ

เราสามารถเพิ่มส่วนคำสั่ง else เป็นทางเลือกเพื่อให้โค้ดทำงานหากการทดสอบเงื่อนไขพิสูจน์แล้วว่าเป็นเท็จ ส่วนคำสั่ง else ไม่ต้องการคำหลัก then

 ถ้า [เงื่อนไขนี้เป็นจริง]
แล้ว
  ดำเนินการคำสั่งเหล่านี้
อื่น
  ดำเนินการคำสั่งเหล่านี้แทน
ไฟ

สคริปต์นี้แสดงตัวอย่างง่ายๆ ของคำสั่ง if ที่ใช้คำสั่ง else การทดสอบแบบมีเงื่อนไขจะตรวจสอบว่าอายุของลูกค้ามากกว่าหรือเท่ากับ 21 หรือไม่ ถ้าใช่ ลูกค้าสามารถเข้าไปในสถานที่ได้ then ดำเนินการตามข้อ หากอายุไม่เพียงพอ คำสั่ง else จะถูกดำเนินการ และไม่อนุญาตให้ใช้คำสั่งเหล่านี้

 #!/bin/bash

ลูกค้า_อายุ=25

ถ้า [ $customer_age -ge 21 ]
แล้ว
  ก้อง "เข้ามาเลย"
อื่น
  echo "เข้าไม่ได้"
ไฟ

คัดลอกสคริปต์จากด้านบนลงในเอดิเตอร์ บันทึกเป็นไฟล์ชื่อ “if-age.sh” และใช้คำสั่ง chmod เพื่อให้เรียกใช้งานได้ คุณจะต้องทำแบบนั้นกับแต่ละสคริปต์ที่เราคุยกัน

 chmod +x if-age.sh 

การใช้ chmod เพื่อทำให้สคริปต์ทำงานได้

มาเรียกใช้สคริปต์ของเรากันเถอะ

 ./if-age.sh 

เรียกใช้สคริปต์ if-age.sh โดยตั้งค่าตัวแปรอายุเป็น 25

ตอนนี้เราจะแก้ไขไฟล์และใช้อายุน้อยกว่า 21

 ลูกค้า_อายุ=18

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

 ./if-age.sh 

เรียกใช้สคริปต์ if-age.sh โดยตั้งค่าตัวแปรอายุเป็น 18

ข้อเอลฟ์

ประโยค elif เพิ่มการทดสอบเงื่อนไขเพิ่มเติม คุณสามารถมี elif clause ได้มากเท่าที่คุณต้องการ พวกเขาจะถูกประเมินตามลำดับจนกว่าจะพบว่าหนึ่งในนั้นเป็นจริง หากไม่มีการทดสอบเงื่อนไข elif ข้อใดพิสูจน์ได้ว่าเป็นจริง คำสั่ง else จะถูกดำเนินการ

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

ตัวเลขอื่นๆ ทั้งหมดจะทดสอบโดยหาโมดูโลของการหารด้วยสอง ในกรณีของเรา โมดูโลคือเศษส่วนของผลลัพธ์ของการหารด้วยสอง หากไม่มีเศษส่วน จำนวนนั้นหารด้วยสองลงตัว จึงเป็นเลขคู่.

 #!/bin/bash

echo -n "ป้อนตัวเลข: "

อ่านหมายเลข

ถ้า [ $number -eq 0 ]
แล้ว
  echo "คุณป้อนเลขศูนย์ เลขศูนย์เป็นเลขคู่"
elif [ $(($number % 2)) -eq 0 ]
แล้ว
  echo "คุณป้อน $number เป็นเลขคู่"
อื่น
  echo "คุณป้อน $number เป็นเลขคี่"
ไฟ

หากต้องการเรียกใช้สคริปต์นี้ ให้คัดลอกไปยังโปรแกรมแก้ไขและบันทึกเป็น “if-even.sh” จากนั้นใช้ chmod เพื่อให้เรียกใช้งานได้

ลองเรียกใช้สคริปต์สักสองสามครั้งแล้วตรวจสอบผลลัพธ์

 ./if-even.sh 

เรียกใช้สคริปต์ if-even.sh ด้วยอินพุตต่างๆ

นั่นคือทั้งหมดที่ทำงานได้ดี

รูปแบบต่างๆ ของการทดสอบแบบมีเงื่อนไข

เครื่องหมายวงเล็บ ” [] ” ที่เราใช้สำหรับการทดสอบแบบมีเงื่อนไขนั้นเป็นการเรียกสั้นๆ ว่าโปรแกรม test ด้วยเหตุนี้ การเปรียบเทียบและการทดสอบทั้งหมดที่สนับสนุน test จึงพร้อมใช้งานสำหรับคำสั่ง if ของคุณ

นี่เป็นเพียงบางส่วนเท่านั้น:

  • ! นิพจน์ : จริงถ้านิพจน์เป็นเท็จ
  • -n string : True ถ้าความยาวของ string มากกว่า 0
  • -z string : จริงถ้าความยาวของสตริงเป็นศูนย์ นั่นคือมันเป็นสตริงว่าง
  • string1 = string2 : จริง ถ้า string1 เหมือนกับ string2
  • string1 != string2 : จริง ถ้า string1 ไม่เหมือนกับ string2
  • integer1 -eq integer2 : จริงถ้าจำนวนเต็ม 1 เท่ากับจำนวนเต็ม 2
  • integer1 -qt integer2 : จริงถ้าจำนวนเต็ม 1 มากกว่าจำนวนเต็ม 2
  • integer1 -lt integer2 : จริงถ้าจำนวนเต็ม 1 มีค่าน้อยกว่าจำนวนเต็ม 2
  • -d ไดเร็กทอรี : จริงหากไดเร็กทอรีนั้นมีอยู่
  • -e ไฟล์ : จริงถ้ามีไฟล์อยู่
  • -s file : จริงถ้าไฟล์มีขนาดมากกว่าศูนย์
  • -r file : จริงถ้ามีไฟล์อยู่และสิทธิ์ในการอ่านถูกตั้งค่าไว้
  • -w file : จริงถ้ามีไฟล์อยู่และตั้งค่าสิทธิ์ในการเขียน
  • -x ไฟล์ : จริงหากไฟล์นั้นมีอยู่และตั้งค่าการอนุญาตให้ดำเนินการ

ในตาราง "ไฟล์" และ "ไดเร็กทอรี" สามารถรวมพาธไดเร็กทอรี ไม่ว่าจะเป็นแบบสัมพัทธ์หรือแบบสัมบูรณ์

เครื่องหมายเท่ากับ “ = ” และการทดสอบความเท่าเทียมกัน -eq นั้น ไม่ เหมือนกัน เครื่องหมายเท่ากับแสดง อักขระโดยการเปรียบเทียบข้อความอักขระ การทดสอบความเท่าเทียมกันทำการเปรียบเทียบ เป็นตัวเลข

เราสามารถดูได้โดยใช้โปรแกรม test บนบรรทัดคำสั่ง

 ทดสอบ "สตริงนี้" = "สตริงนี้"
 ทดสอบ "สตริงนี้" = "สตริงนั้น"
 ทดสอบ 1 = 001
 ทดสอบ 1 -eq 001

ในแต่ละกรณี เราใช้คำสั่ง echo เพื่อพิมพ์โค้ดส่งคืนของคำสั่งสุดท้าย ศูนย์หมายถึงจริง หนึ่งหมายถึงเท็จ

การใช้โปรแกรมทดสอบบนบรรทัดคำสั่งเพื่อทดสอบการเปรียบเทียบต่างๆ

การใช้เครื่องหมายเท่ากับ ” = ” ทำให้เราได้คำตอบที่ผิดพลาดเมื่อเปรียบเทียบ 1 ถึง 001 ซึ่งถูกต้อง เนื่องจากเป็นสตริงอักขระที่แตกต่างกันสองชุด ตัวเลข คือค่าเดียวกัน—หนึ่ง—ดังนั้นตัวดำเนินการ -eq จึงส่งกลับการตอบสนองที่แท้จริง

หากคุณต้องการใช้การจับคู่สัญลักษณ์แทนในการทดสอบตามเงื่อนไข ให้ใช้ไวยากรณ์วงเล็บคู่ ” [[ ]]

 #!/bin/bash

ถ้า [[ $USER == *เคย ]]
แล้ว
  echo "สวัสดี $USER"
อื่น
  echo "$USER ไม่ได้ลงท้ายด้วย 've'"
ไฟ

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

 ./if-wild.sh 

การรันสคริปต์ if-wild.sh แสดงการค้นหาไวด์การ์ดในการทดสอบแบบมีเงื่อนไขของคำสั่ง if

ที่เกี่ยวข้อง: การทดสอบตามเงื่อนไขใน Bash: if, then, else, elif

คำสั่งที่ซ้อนกันหาก

คุณสามารถใส่คำสั่ง if ไว้ในคำสั่ง if อื่นได้

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

นี่คือสคริปต์ที่ทำให้วันเป็นตัวเลข ตั้งแต่หนึ่งถึงเจ็ด หนึ่งคือวันจันทร์ เจ็ดคือวันอาทิตย์

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

หากร้านค้าเปิดอยู่ คำสั่ง if ที่ซ้อนกันจะทำการทดสอบครั้งที่สอง ถ้าวันนั้นเป็นวันพุธ จะบอกว่าเปิดช่วงเช้าเท่านั้น

 #!/bin/bash

#รับวันเป็นเลข1..7
วัน=$(วันที่ +"%u")

ถ้า [ $day -le 6 ]
แล้ว
  ##ร้านเปิดนะครับ
  ถ้า [ $day -eq 3 ]
  แล้ว
    #วันพุธหยุดครึ่งวัน
    echo "วันพุธ เราเปิดเฉพาะช่วงเช้า"
  อื่น
    #วันธรรมดาและวันเสาร์
   echo "เราเปิดทั้งวัน"
  ไฟ
อื่น
  #วันอาทิตย์ไม่เปิด
  echo "วันอาทิตย์ เราปิด"
ไฟ

คัดลอกสคริปต์นี้ลงในเอดิเตอร์ บันทึกเป็นไฟล์ชื่อ “if-shop.sh” และทำให้เรียกใช้งานได้โดยใช้คำสั่ง chmod

เรารันสคริปต์หนึ่งครั้ง จากนั้นเปลี่ยนนาฬิกาของคอมพิวเตอร์เป็นวันพุธ และรันสคริปต์อีกครั้ง จากนั้นเราเปลี่ยนวันเป็นวันอาทิตย์และวิ่งอีกครั้ง

 ./if-shop.sh
 ./if-shop.sh
 ./if-shop.sh 

เรียกใช้สคริปต์ if-shop.sh โดยตั้งค่านาฬิกาของคอมพิวเตอร์เป็นวันธรรมดา จากนั้นเป็นวันพุธ จากนั้นเป็นวันอาทิตย์

ที่เกี่ยวข้อง: วิธีใช้การทดสอบแบบมีเงื่อนไขแบบ Double Bracket ใน Linux

กรณีสำหรับถ้า

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

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

ที่เกี่ยวข้อง: วิธีใช้ Case Statement ใน Bash Scripts