วิธีใช้ Bash If Statement (พร้อม 4 ตัวอย่าง)
เผยแพร่แล้ว: 2023-05-08if
then
fi
เพิ่มคีย์เวิร์ด elif
สำหรับนิพจน์เงื่อนไขเพิ่มเติม หรือคีย์เวิร์ด else
เพื่อกำหนดส่วน catch-all ของโค้ดที่จะดำเนินการหากไม่มีการดำเนินการเงื่อนไขก่อนหน้าสคริปต์ Bash ที่ไม่สำคัญทั้งหมดจำเป็นต้องทำการตัดสินใจ คำสั่ง Bash if ช่วยให้สคริปต์ Linux ของคุณถามคำถามและเรียกใช้ส่วนต่างๆ ของโค้ด ทั้งนี้ขึ้นอยู่กับคำตอบ นี่คือวิธีการทำงาน
การดำเนินการตามเงื่อนไขคืออะไร?
โดยรวมแล้วสคริปต์ Bash นั้นไม่สำคัญเลย โดยปกติแล้วจำเป็นต้องมีลำดับการดำเนินการเพื่อใช้เส้นทางที่แตกต่างกันผ่านสคริปต์ ตามผลลัพธ์ของการตัดสินใจ สิ่งนี้เรียกว่าการดำเนินการตามเงื่อนไข
วิธีหนึ่งในการตัดสินใจว่าจะใช้สาขาใดของการดำเนินการคือการใช้คำสั่ง if
คุณอาจได้ยินคำสั่ง if
ที่เรียกว่า if then
statement หรือ if then else
คำสั่ง พวกเขาเป็นชื่อที่แตกต่างกันสำหรับสิ่งเดียวกัน
คำสั่ง 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
มาเรียกใช้สคริปต์ของเรากันเถอะ
./if-age.sh
ตอนนี้เราจะแก้ไขไฟล์และใช้อายุน้อยกว่า 21
ลูกค้า_อายุ=18
ทำการเปลี่ยนแปลงนั้นกับสคริปต์ของคุณ และบันทึกการเปลี่ยนแปลงของคุณ หากเราเรียกใช้ตอนนี้ เงื่อนไขจะส่งกลับเป็นเท็จ และส่วนคำสั่งอื่นจะถูกดำเนินการ
./if-age.sh
ข้อเอลฟ์
ประโยค 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
นั่นคือทั้งหมดที่ทำงานได้ดี
รูปแบบต่างๆ ของการทดสอบแบบมีเงื่อนไข
เครื่องหมายวงเล็บ ” []
” ที่เราใช้สำหรับการทดสอบแบบมีเงื่อนไขนั้นเป็นการเรียกสั้นๆ ว่าโปรแกรม 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
ที่เกี่ยวข้อง: การทดสอบตามเงื่อนไขใน 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
ที่เกี่ยวข้อง: วิธีใช้การทดสอบแบบมีเงื่อนไขแบบ Double Bracket ใน Linux
กรณีสำหรับถ้า
การดำเนินการตามเงื่อนไขคือสิ่งที่นำพลังมาสู่การเขียนโปรแกรมและการเขียนสคริปต์ และคำสั่ง if
แบบถ่อมตัวอาจเป็นวิธีที่ใช้บ่อยที่สุดในการเปลี่ยนเส้นทางการดำเนินการภายในโค้ด แต่นั่นไม่ได้หมายความว่าจะเป็นคำตอบเสมอไป
การเขียนโค้ดที่ดีหมายถึงการรู้ว่าคุณมีตัวเลือกใดและตัวเลือกใดดีที่สุดที่จะใช้เพื่อแก้ไขข้อกำหนดเฉพาะ คำสั่ง if
นั้นยอดเยี่ยม แต่อย่าปล่อยให้เป็นเครื่องมือเดียวในกระเป๋าของคุณ โดยเฉพาะอย่างยิ่ง ให้ตรวจสอบคำสั่ง case
ซึ่งอาจเป็นวิธีแก้ปัญหาในบางสถานการณ์
ที่เกี่ยวข้อง: วิธีใช้ Case Statement ใน Bash Scripts