12 Advanced Bash Tricks for Writing High-Performance Scripts
04-Jul-25
คัมภีร์เทพ IT
See the original english version Click here!
เคยเจอบ้างไหม? ที่ Bash Script ที่ควรจะ Run ในไม่กี่วินาที แต่สุดท้ายกลับกินเวลานานจนทำให้คุรรู้สึกหงุดหงิด ถ้าคุณเคยเจอสถานการณ์แบบนั้น ขอแนะนำบทความนี้มี 12 เทคนิคที่จะช่วยให้ Bash Script ของคุณทำงานเร็วขึ้น ลื่นขึ้น และดูดีกว่าเดิม
1. ใช้ readarray (หรือ mapfile) แทนการวน Loop แบบดั้งเดิม
การอ่านไฟล์ขนาดใหญ่ทีละบรรทัดด้วย While Loop นั้นช้าและใช้ Resources ค่อนข้างมาก
วิธีที่ดีกว่า ก็คือ:
readarray จะโหลดไฟล์ทั้งไฟล์เข้า Memory ในครั้งเดียว ซึ่งจะทำให้เร็วกว่าการอ่านทีละบรรทัดได้อย่างมาก โดยเฉพาะเมื่อไฟล์นั้นมีขนาดใหญ่
2. ใช้ xargs -P เพื่อ Run คำสั่งแบบ Parallel
หากต้องการ Run คำสั่งหลายคำสั่งพร้อม ๆ กัน คุณไม่จำเป็นต้องเขียน Code ให้ซับซ้อน
เพียงแค่ใช้:
วิธีนี้จะช่วยให้คุณสามารถ Run งานต่าง ๆ หลายงานได้พร้อมกันในเวลาเดียวกัน เช่น Run คำสั่งระยะไกล, บีบอัดไฟล์, หรืออัปเดตระบบ โดยลดเวลาในการประมวลผลลงได้มาก
3. หลีกเลี่ยงการใช้ cat โดยไม่จำเป็น
ทุกครั้งที่ใช้ cat หรือ Pipe โดยไม่จำเป็น จะทำให้มี Process เพิ่มขึ้น
ถ้า Script ถูก Run บ่อยหรือจัดการกับข้อมูลจำนวนมาก สิ่งเล็ก ๆ เหล่านี้จะสะสมและส่งผลกระทบต่อประสิทธิภาพโดยรวมของ Bash อย่างมีนัยสำคัญ
4. ใช้ [[ ... ]] แทน [ ... ]
เพราะการใช้ [[ ... ]] นั้น ปลอดภัยและมีประสิทธิภาพมากกว่าการใช้ [ ... ]
- รองรับการใช้ regex
- ไม่เกิด glob (การจับ Pattern ไฟล์) โดยไม่ตั้งใจ
- จัดการ String ที่มีช่องว่างได้ดีกว่า
5. ใช้ trap เพื่อจัดการเมื่อ Script ล้มเหลว
trap จะช่วยให้มั่นใจว่า เราจะเคลียร์ Resources เช่น Temp Files, SSH Tunnels หรือ Mount ต่าง ๆ เมื่อออกจากระบบ หรือแม้ว่าจะเกิดการขัดจังหวะหรือข้อผิดพลาดก็ตาม
6. ใช้ Named Pipes (FIFO) เพื่อส่งข้อมูลระหว่าง Process ให้มีประสิทธิภาพ
ใช้เมื่อต้องการ Stream Data จาก Process หนึ่งไปอีก Process แบบมีประสิทธิภาพสูงโดยไม่ต้องเขียนลง Disk
7. เร่งการวน Loop ด้วย Process Substitution
หลีกเลี่ยงการใช้ subshell โดยใช้ Process Substitution แทน มันเหมาะสำหรับการจัดการกับข้อมูลจำนวนมากที่ต้องการ I/O เร็ว ๆ
8. ใช้ getopts เพื่อจัดการ Argument อย่างมืออาชีพ
แทนที่จะจัดการ Argument ที่ส่งเข้ามาแบบดิบ ๆ อย่าง $1, $2 เป็นต้น ให้ลองใช้ getopts ซึ่งจะช่วยให้คุณเขียน Code เพื่อรับค่า Parameters ได้อย่างเป็นระบบ อ่านง่าย, นำกลับมาใช้ซ้ำได้ และปรับขยายได้ในอนาคต
9. ใช้ declare -A สำหรับ Associative Arrays
Associative Arrays ช่วยให้คุณสามารถ Map Keys กับค่าต่าง ๆ ซึ่งมีประโยชน์ในการจัดการ config, IP mapping, สถานะของ Service และอื่นๆ
10. ใช้ set -euo pipefail เพื่อให้ Scripts ปลอดภัยยิ่งขึ้น
- -e: หยุดทันทีเมื่อมีคำสั่งใดล้มเหลว
- -u: แจ้ง Error หากเรียกใช้ตัวแปรที่ไม่ได้กำหนดไว้
- -o pipefail: ตรวจจับ Error จากทุกคำสั่งใน Pipeline
พวกมันจะช่วยให้จับ Error ได้อย่างรวดเร็วและป้องกันปัญหาที่อาจเราอาจยังไม่ค้นพบ
11. ใช้ Shellcheck เพื่อตรวจเช็ค Scripts ของคุณ
Shellcheck เป็นเครื่องมือ Lint สำหรับ Bash จะทำให้เราสามารถตรวจเจอ Bug ที่มองไม่เห็น, ปัญหาเรื่อง Quote, Syntax ที่ล้าสมัย และข้อผิดพลาดที่กระทบต่อ Performance ได้ มันคล้าย ๆ กับ ESLint สำหรับ JavaScript แต่เป็นสำหรับ Bash
12. วิเคราะห์ประสิทธิภาพด้วย time และ bash -x
ใช้ time เพื่อดูว่าคำสั่งใช้เวลาจริงไปเท่าไร และใช้ bash -x เพื่อ Debug Flow ของคำสั่งใน Scripts เรียกได้ว่า มันเป็นคู่เครื่องมือที่ทรงพลังมากสำหรับการปรับจูนและหาจุดอ่อนของ Scripts
สรุป
และนี่ก็เป็น 12 เทคนิคที่จะช่วยให้ Bash Script ของคุณทำงานเร็วขึ้น เพราะการเขียน Bash Script ให้มีประสิทธิภาพ ไม่ได้ขึ้นอยู่แค่กับการ “เขียนให้ทำงานได้” แต่คือการรู้จักใช้เครื่องมือและเทคนิคที่สามารถช่วยให้ Scripts ทำงานได้รวดเร็ว ปลอดภัย และดูแลรักษาง่ายในระยะยาว ดังนั้น ลองเลือกเทคนิคที่ตรงและเหมาะสมกับงานของคุณ
ที่มา: https://medium.com/
รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert
อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ
บทความล่าสุด