Category Archive Shell Script

Byphunsanit

Command Chaining เชื่อมคำสั่ง

การเชื่อมคำสั่ง (Command Chaining) หรือการ join เป็นเทคนิคที่ช่วยให้เราสั่งงานคอมพิวเตอร์หลายๆ อย่างได้ใน termimal บรรทัดเดียว ซึ่งช่วยประหยัดเวลาและทำให้การเขียน Script มีประสิทธิภาพมากครับ นี่คือเครื่องหมายหลักๆ ที่ใช้บ่อยที่สุด พร้อมตัวอย่างการใช้งานครับ (ใช้ได้ทั้ง Linux, macOS และ Windows PowerShell ส่วนใหญ่ครับ)


เครื่องหมาย ; (ทำต่อกันทันที)

คอนเซปต์: “ทำคำสั่งแรกเสร็จ แล้วทำคำสั่งสองต่อเลย ไม่สนว่าคำสั่งแรกจะผ่านหรือพัง”
ใช้เมื่อ: คำสั่งที่ 2 ไม่ได้ขึ้นอยู่กับผลลัพธ์ของคำสั่งที่ 1
echo "เริ่มทำงาน"; ls -la; echo "จบการทำงาน"
(ระบบจะพิมพ์ “เริ่มทำงาน” -> แล้วแสดงรายชื่อไฟล์ -> แล้วพิมพ์ “จบการทำงาน” ตามลำดับ)


เครื่องหมาย && (ทำเมื่อ สำเร็จ เท่านั้น)

คอนเซปต์: “ทำคำสั่งแรกก่อน ถ้า สำเร็จ (Success/Exit code 0) ค่อยทำคำสั่งสอง”
ใช้เมื่อ: คำสั่งที่ 2 จำเป็นต้องให้คำสั่งแรกผ่านก่อน เช่น สร้างโฟลเดอร์เสร็จแล้วค่อยเข้าไปข้างใน
mkdir my_project && cd my_project
(ถ้าสร้างโฟลเดอร์ my_project สำเร็จ ระบบจะ cd เข้าไปข้างในทันที แต่ถ้าสร้างไม่สำเร็จ เช่น พื้นที่เต็ม มันจะไม่รันคำสั่ง cd)


เครื่องหมาย || (ทำเมื่อ ล้มเหลว เท่านั้น)

คอนเซปต์: “ทำคำสั่งแรกก่อน ถ้า พัง (Error) ให้ทำคำสั่งสอง”
ใช้เมื่อ: ต้องการดักจับ Error หรือแจ้งเตือนเมื่อมีปัญหา
ping google.com || echo "อินเทอร์เน็ตมีปัญหา"
(ระบบจะลอง ping Google ถ้า ping ไม่เจอ (Error) มันจะพิมพ์ว่า “อินเทอร์เน็ตมีปัญหา” ออกมา)


เครื่องหมาย | (Pipe – ส่งต่อข้อมูล)

คอนเซปต์: “เอา ผลลัพธ์ (Output) ของคำสั่งแรก ส่งไปเป็น ข้อมูลเข้า (Input) ให้คำสั่งสอง”

คอนเซปต์: “เอา ผลลัพธ์ (Output) ของคำสั่งแรก ส่งไปเป็น ข้อมูลเข้า (Input) ให้คำสั่งสอง”
ใช้เมื่อ: ต้องการกรองข้อมูล หรือประมวลผลต่อ
cat access.log | grep "Error"
(อ่านไฟล์ access.log แล้วส่งข้อความทั้งหมดไปให้ grep คัดเลือกเฉพาะบรรทัดที่มีคำว่า “Error” ออกมาแสดง)


สรุปตารางเปรียบเทียบ

เครื่องหมายความหมายภาษาคนเงื่อนไขการทำงาน
;“แล้วก็…”ทำต่อเลย ไม่สนผลลัพธ์ก่อนหน้า
&&“ถ้าผ่าน ให้…”ทำต่อเมื่อคำสั่งหน้า สำเร็จ เท่านั้น
``
``“ส่งผลลัพธ์ให้…”

เทคนิคเสริม: การผสมคำสั่ง

คุณสามารถใช้เครื่องหมายเหล่านี้ผสมกันได้เพื่อให้ Logic ซับซ้อนขึ้นครับ

ตัวอย่าง: “ลองอัปเดตระบบ ถ้าสำเร็จให้บอกว่า Done แต่ถ้าพังให้บอกว่า Failed”
sudo apt update && echo "Done" || echo "Failed"


อ่านเพิ่มเติม