Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

เชี่ยวชาญการดีบัก Shell Script ใน Linux: คู่มือทีละขั้นตอน

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

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

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

ดังนั้น ในซีรีส์การดีบักเชลล์สคริปต์ใน Linux นี้ เราจะเดินผ่านวิธีเปิดใช้งานการดีบักเชลล์สคริปต์ ไปต่อที่การอธิบายโหมดการดีบักเชลล์สคริปต์ต่างๆ และวิธีใช้พวกมันในซีรีส์ต่อไป

วิธีเริ่มต้นสคริปต์

สคริปต์แตกต่างจากไฟล์อื่นด้วยบรรทัดแรก ที่มี #! (She-bang – กำหนดประเภทไฟล์) และ path name (path ไปยัง interpreter) ซึ่งบอกระบบว่าไฟล์นี้เป็นชุดคำสั่งที่จะถูกแปลโดยโปรแกรมที่ระบุ (interpreter)

ด้านล่างเป็นตัวอย่าง "บรรทัดแรก" ในประเภทสคริปต์ต่างๆ:

#!/bin/sh [สำหรับ sh scripting]
#!/bin/bash [สำหรับ bash scripting]
#!/usr/bin/perl [สำหรับ perl programming]
#!/bin/awk -f [สำหรับ awk scripting]

หมายเหตุ: บรรทัดแรกหรือ #! สามารถละเว้นได้ หากสคริปต์ประกอบด้วยชุดคำสั่งระบบมาตรฐานอย่างเดียว โดยไม่มีคำสั่งเชลล์ภายใน

วิธีรัน Shell Script ใน Linux

ไวยากรณ์แบบดั้งเดิมสำหรับเรียกเชลล์สคริปต์คือ:

$ script_name argument1 ... argumentN

รูปแบบอีกแบบหนึ่งคือระบุเชลล์ที่จะรันสคริปต์อย่างชัดเจน ดังนี้:

$ shell script_name argument1 ... argumentN

ตัวอย่าง:

$ /bin/bash script_name argument1 ... argumentN [สำหรับ bash scripting]
$ /bin/ksh script_name argument1 ... argumentN [สำหรับ ksh scripting]
$ /bin/sh script_name argument1 ... argumentN [สำหรับ sh scripting]

สำหรับสคริปต์ที่ไม่มี #! เป็นบรรทัดแรก และมีเฉพาะคำสั่งระบบพื้นฐาน เช่น ตัวอย่างด้านล่าง:

#script containing standard system commands
cd /home/$USER
mkdir tmp
echo "tmp directory created under /home/$USER"

เพียงทำให้รันได้และรันดังนี้:

$ chmod +x script_name
$ ./script_name

วิธีการเปิดใช้งาน Shell Script Debugging Mode

ด้านล่างคือตัวเลือกการดีบักเชลล์สคริปต์หลัก:

  1. -v (ย่อมาจาก verbose) – สั่งให้เชลล์แสดงบรรทัดทั้งหมดในสคริปต์ขณะที่ถูกอ่าน เปิดใช้งาน verbose mode
  2. -n (ย่อมาจาก noexec หรือ no execution) – สั่งให้เชลล์อ่านคำสั่งทั้งหมด แต่ไม่ได้รันมัน ตัวเลือกนี้เปิดใช้งาน syntax checking mode
  3. -x (ย่อมาจาก xtrace หรือ execution trace) – สั่งให้เชลล์แสดงคำสั่งทั้งหมดและอาร์กิวเมนต์บนเทอร์มินัลขณะที่ถูกรัน ตัวเลือกนี้เปิดใช้งาน shell tracing mode

1. การแก้ไขบรรทัดแรกของ Shell Script

กลไกแรกคือการเปลี่ยนบรรทัดแรกของเชลล์สคริปต์ดังนี้ ซึ่งจะเปิดใช้งานการดีบักทั้งสคริปต์

#!/bin/sh option(s)

ในรูปแบบข้างต้น option สามารถเป็นตัวเลือกการดีบักอย่างใดอย่างหนึ่งหรือการรวมกัน

2. การเรียกเชลล์พร้อมตัวเลือกการดีบัก

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

$ shell option(s) script_name argument1 ... argumentN

ตัวอย่าง:

$ /bin/bash option(s) script_name argument1 ... argumentN

3. การใช้คำสั่ง set Shell Built-in Command

กลไกที่สามคือการใช้คำสั่ง set built-in เพื่อดีบักส่วนที่กำหนดของเชลล์สคริปต์ เช่น ฟังก์ชัน กลไกนี้สำคัญ เพราะมันอนุญาตให้เราเปิดใช้งานการดีบักที่ส่วนใดส่วนหนึ่งของเชลล์สคริปต์

เราสามารถเปิดใช้งานโหมดการดีบักด้วยคำสั่ง set ในรูปแบบด้านล่าง โดย option เป็นตัวเลือกการดีบักใดๆ

$ set option

เพื่อเปิดใช้งานโหมดการดีบัก ใช้:

$ set -option

เพื่อปิดใช้งานโหมดการดีบัก ใช้:

$ set +option

นอกจากนี้ หากเราเปิดใช้งานโหมดการดีบักหลายโหมดในส่วนต่างๆ ของเชลล์สคริปต์ เราสามารถปิดทั้งหมดพร้อมกันได้ดังนี้:

$ set -

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

ในสองตอนถัดไปของซีรีส์นี้ เราจะครอบคลุมวิธีใช้ตัวเลือกการดีบักเชลล์สคริปต์เพื่ออธิบาย verbose, syntax checking และ shell tracing debugging modes พร้อมตัวอย่าง

สำคัญ อย่าลืมถามคำถามเกี่ยวกับคู่มือนี้ หรือให้ข้อเสนอแนะผ่านส่วนความคิดเห็นด้านล่าง จนกว่าจะพบกันใหม่ ติดต่อกับ Tecmint