Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

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

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

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

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

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

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

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

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

#!/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. -v (ย่อมาจาก verbose) – บอกให้เชลล์แสดงบรรทัดทั้งหมดในสคริปต์ในขณะที่อ่าน มันเปิดใช้งานโหมด verbose
  2. -n (ย่อมาจาก noexec หรือ no ecxecution) – สั่งให้เชลล์อ่านคำสั่งทั้งหมด แต่ไม่ได้ดำเนินการ ตัวเลือกนี้จะเปิดใช้งานโหมดการตรวจสอบไวยากรณ์
  3. -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