ค้นหาเว็บไซต์

วิธีเปิดใช้งานโหมดดีบักสคริปต์เชลล์ใน Linux


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

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

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

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

วิธีการเริ่มสคริปต์

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

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

#!/bin/sh          [For sh scripting]
#!/bin/bash        [For bash scripting] 
#!/usr/bin/perl    [For perl programming]
#!/bin/awk -f      [For awk scripting]   

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

วิธีดำเนินการเชลล์สคริปต์ใน Linux

ไวยากรณ์ทั่วไปสำหรับการเรียกใช้เชลล์สคริปต์คือ:

script_name  argument1 ... argumentN

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

shell script_name argument1 ... argumentN  

ตัวอย่างเช่น:

/bin/bash script_name argument1 ... argumentN     [For bash scripting]
/bin/ksh script_name argument1 ... argumentN      [For ksh scripting]
/bin/sh script_name argument1 ... argumentN       [For 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 

วิธีการเปิดใช้งานโหมดดีบักสคริปต์เชลล์

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

  1. -n (ย่อมาจาก noexec หรือ no ecxecution) – สั่งให้เชลล์อ่านคำสั่งทั้งหมด แต่จะไม่ดำเนินการคำสั่งเหล่านั้น ตัวเลือกนี้จะเปิดใช้งานโหมดการตรวจสอบไวยากรณ์
  2. -x (ย่อมาจาก xtrace หรือ การติดตามการดำเนินการ) – บอกให้เชลล์แสดงคำสั่งทั้งหมดและอาร์กิวเมนต์บนเทอร์มินัลในขณะที่ดำเนินการ ตัวเลือกนี้เปิดใช้งานโหมดการติดตามเชลล์

1. การแก้ไขบรรทัดแรกของเชลล์สคริปต์

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

#!/bin/sh option(s)

ในแบบฟอร์มด้านบน ตัวเลือกอาจเป็นเพียงตัวเลือกเดียวหรือหลายตัวเลือกในการแก้ไขจุดบกพร่องด้านบนก็ได้

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

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

shell option(s) script_name argument1 ... argumentN

ตัวอย่างเช่น:

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

3. การใช้ชุดคำสั่งเชลล์ในตัว

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

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

set option 

หากต้องการเปิดใช้งานโหมดแก้ไขข้อบกพร่อง ให้ใช้:

set -option

หากต้องการปิดใช้งานโหมดแก้ไขข้อบกพร่อง ให้ใช้:

set +option

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

set -

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

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

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