การเขียนสคริปต์ Bash เป็นเครื่องมือสำคัญสำหรับนักพัฒนาในการทำงานอัตโนมัติบน Linux
สคริปต์ Bash สามารถใช้ทำงานอัตโนมัติในการพัฒนาในเครื่อง (เช่น อัปโหลดไฟล์สำหรับ deployment, คอมไพล์แอป, หรือปรับขนาดรูปภาพจำนวนมาก) รวมถึงงานฝั่งเซิร์ฟเวอร์ (ส่งอีเมลตามกำหนดการ, รวบรวมข้อมูลทุกช่วงเวลา, หรือส่งการแจ้งเตือนไปยังอุปกรณ์)
คุณจะต้องการรันงานบางอย่างขึ้นอยู่กับผลลัพธ์ของงานอื่นหรือตัวแปร และนั่นคือที่ที่ if … else จะช่วยคุณ กระบวนการตัดสินใจในสคริปต์ Bash เรียกว่าการใช้เงื่อนไข (conditionals)
บทช่วยสอนนี้จะให้รายละเอียดและตัวอย่างการใช้งานสำหรับคำสั่ง if… else ใน Bash
การใช้คำสั่ง if
คำสั่ง if แบบง่ายจะรันการกระทำที่มีอยู่ภายใน หากเงื่อนไขเป็นจริง และมีลักษณะดังนี้:
if CONDITIONS; then ACTIONS fi
ตัวอย่างเต็มรูปแบบ:
#!/bin/bash if [ 2 -lt 3 ]; then echo "2 is less than 3!" fi
โปรดสังเกตว่า:
- สคริปต์ Bash ทั้งหมดเริ่มต้นด้วยบรรทัด #!/bin/bash
- ตัวดำเนินการ -lt ตรวจสอบว่าค่าแรกน้อยกว่าค่าที่สอง หากเราต้องการตรวจสอบว่าค่าที่สองมากกว่าค่าแรก เราจะใช้ -gt
- อ่านต่อเพื่อดูรายการตัวดำเนินการตรรกะเพิ่มเติม
- เราใช้คำสั่ง echo เพื่อแสดงข้อความบนบรรทัดคำสั่ง
- if statements จะจบด้วย fi เสมอเพื่อปิดท้าย
การใช้คำสั่ง else
หากคุณต้องการดำเนินการกระทำ dựa trênชุดเงื่อนไข และจากนั้นกระทำที่แตกต่างกัน ก็ต่อเมื่อ เงื่อนไขเหล่านั้นล้มเหลว คุณสามารถใช้คำสั่ง else:
#!/bin/bash echo -n "Enter number: " read number if [ $number -lt 3 ]; then echo "$number is less than 3!" else echo "$number is not less than 3!" fi
โปรดสังเกตว่า:
- เรายังใช้องค์ประกอบเดียวกันกับข้างต้นสำหรับเปรียบเทียบค่าและแสดงข้อความ
- เราใช้คำสั่ง read เพื่อรับอินพุตผู้ใช้
- เราใช้ตัวแปรเก็บค่าเพื่อใช้งานภายหลัง
การใช้คำสั่ง elif (Else If)
เพื่อตรวจสอบชุดเงื่อนไขหลายชุดและดำเนินการกระทำที่แตกต่างกันหากแต่ละชุดทดสอบเป็นจริง ใช้คำสั่ง elif (else if):
#!/bin/bash echo -n "Enter number: " read number if [ $number -lt 3 ]; then echo "$number is less than 3!" elif [ $number -eq 3]; then echo "$number is equal to 3!" else echo "$number is not less than 3!" fi
เงื่อนไขหลายเงื่อนไขในคำสั่ง if
หากคุณมีเงื่อนไขหลายอย่างที่ต้องการตรวจสอบ คุณสามารถใช้ตัวดำเนินการ && (AND) และ || (OR) เพื่อตัดสินใจว่าควรดำเนินการกระทำหรือไม่
#!/bin/bash echo -n "Enter number: " read number if [[ $number -lt 3 ]] && [[ $number -lt 0 ]]; then echo "$number is less than three and is negative" elif [[ $number -lt 3 ]] || [[ $number -gt 6 ]]; then echo "$number is not negative, but is less than 3 or greater than 6" else echo "$number is greater than3 and less than 6" fi
การซ้อนคำสั่ง (Statement Nesting)
คุณสามารถวางคำสั่ง if ภายในคำสั่ง if อื่นได้:
#!/bin/bash echo -n "Enter number: " read number if [$number -gt 3]; then echo "$number is greater than 3" if [$number -gt 6]; then echo "$number is also greater than 6" else echo "$number is not also greater than 6" fi fi
ตัวดำเนินการเปรียบเทียบ
ในตัวอย่างข้างต้น เราใช้ตัวดำเนินการ -lt (น้อยกว่า), -gt (มากกว่า), และ = (เท่ากับ) นี่คือตัวดำเนินการตรรกะที่ใช้บ่อยอื่นๆ:
เปรียบเทียบตัวเลข
$number1 -eq $number2 : คืนค่า true หากตัวแปรเท่ากัน $number1 -gt $number2 : คืนค่า true หาก $number1 มากกว่า $number2 $number1 -ge $number2 : คืนค่า true หาก $number1 เท่ากับหรือมากกว่า $number2 $number1 -lt $number2 : คืนค่า true หาก $number1 น้อยกว่า $number2 $number1 -le $number2 : คืนค่า true หาก $number1 เท่ากับหรือน้อยกว่า $number2
เปรียบเทียบสตริง
$string1 = $string2 : คืนค่า true หาก $string1 และ $string2 เท่ากัน $string1 != $string2 : คืนค่า true หาก $string1 และ $string2 ไม่เท่ากัน
như показано ข้างต้น เพื่อกลับผลลัพธ์ของนิพจน์การเปรียบเทียบ ให้วางตัวดำเนินการ ! (NOT) นำหน้า เช่น *!= หมายถึง NOT EQUALS
เมื่อเปรียบเทียบสตริง ควรห่อด้วยเครื่องหมายคำพูดคู่เสมอ เพื่อให้ช่องว่างไม่ถูกตีความผิดโดย สคริปต์ bash
คุณควรห่อตัวแปรที่มีสตริงด้วยเครื่องหมายคำพูดเช่นกัน เพื่อให้แน่ใจว่าพวกมันไม่ถูกตีความผิด:
#!/bin/bash echo -n "Enter string: " read string if ["$string" = "hello there!"] echo "You said hello there!" fi
ตรวจสอบสถานะของไฟล์หรือไดเรกทอรี
-d $filepath : คืนค่า true หาก $filepath มีอยู่และเป็นไดเรกทอรี -e $filepath : คืนค่า true หาก $filepath มีอยู่ ไม่ว่าจะเป็นไฟล์หรือไดเรกทอรี -f $filepath : คืนค่า true หาก $filepath มีอยู่และเป็นไฟล์ -h $filepath : คืนค่า true หาก $filepath มีอยู่และเป็น symbolic link -r $filepath : คืนค่า true หาก $filepath มีอยู่และอ่านได้ -w $filepath : คืนค่า true หาก $filepath มีอยู่และเขียนได้ -x $filepath : คืนค่า true หาก $filepath มีอยู่และรันได้
สรุป
การสร้างสคริปต์ Bash ของคุณเองสามารถประหยัดเวลาอย่างมาก และเขียนได้ค่อนข้างง่ายเมื่อคุณรู้บล็อกก่อสร้างพื้นฐาน
if… else statements ช่วยให้คุณควบคุมว่าสคริปต์ของคุณตอบสนองต่ออินพุตผู้ใช้หรือสถานะของไฟล์อย่างไร
ดูบทความ Bash อื่นๆ ของเราเพื่อเรียนรู้เพิ่มเติม!