จะดีบักสคริปต์ทุบตีได้อย่างไร?

How Debug Bash Script




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

ภาษาการเขียนโปรแกรมทั้งหมดมีวิธีทั่วไปและแตกต่างกันเล็กน้อยในการค้นหาจุดบกพร่อง ตัวอย่างเช่น สามารถใช้โปรแกรมดีบั๊กเพื่อลบข้อผิดพลาดได้อย่างรวดเร็ว ในขณะที่เชลล์สคริปต์ไม่มีเครื่องมือเฉพาะใด ๆ ในการดีบักโค้ด บทความนี้เป็นเรื่องเกี่ยวกับการอภิปรายเทคนิคการดีบักต่างๆ ที่สามารถใช้เพื่อทำให้สคริปต์ทุบตีปราศจากข้อผิดพลาด ก่อนที่เราจะลงลึกถึงวิธีการ เรามาทำความเข้าใจพื้นฐานเกี่ยวกับเชลล์และเชลล์สคริปต์ก่อน:







เชลล์ใน Linux คืออะไร?

เมื่อคุณบูตเครื่องคอมพิวเตอร์ เคอร์เนลจะรับข้อมูลเกี่ยวกับฮาร์ดแวร์ที่เชื่อมต่อและอนุญาตให้ส่วนประกอบอื่นๆ ที่เชื่อมต่อโต้ตอบกันได้ นอกจากนั้น ยังจัดการหน่วยความจำ ซีพียู และรับรู้อุปกรณ์ต่อพ่วงใหม่ๆ โดยรวมแล้ว เคอร์เนลเป็นแกนหลักของระบบปฏิบัติการใดๆ แต่คุณเคยคิดที่จะโต้ตอบกับเคอร์เนลโดยตรงหรือสั่งให้ทำงานเฉพาะหรือไม่? เป็นไปได้ไหมที่จะทำอย่างนั้น? อย่างแน่นอน! ด้วยความช่วยเหลือของเชลล์ โปรแกรมคอมพิวเตอร์ที่มีอินเทอร์เฟซแบบโต้ตอบ ใครๆ ก็สามารถใช้งานเคอร์เนลได้ เชลล์อนุญาตให้มนุษย์โต้ตอบกับเคอร์เนลและสั่งให้ทำงานใดๆ



ใน Unix มีสองเชลล์หลัก เปลือกบอร์น และ ซีเชลล์ . ทั้งสองประเภทนี้มีหมวดหมู่ย่อย เปลือกหอยบอร์นประเภทต่างๆ ได้แก่ Korn เชลล์ (ksh), เชลล์ Almquist (เถ้า), บอร์นอีกครั้งเชลล์ (ทุบตี), และ เปลือก Z (zsh) . ในเวลาเดียวกัน C เชลล์มีหมวดหมู่ย่อยของตัวเองเช่น ซีเชลล์ (csh) และ เปลือก TENEX C (tcsh) . ดังที่ได้กล่าวมาแล้ว จากเปลือกทั้งหมด Bash (เปลือกบอร์นอีกครั้ง) เป็นเชลล์ที่ใช้กันอย่างแพร่หลายมากที่สุดและออกมาจากกล่องในลีนุกซ์รุ่นต่างๆ เนื่องจากมีประสิทธิภาพและใช้งานง่าย



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





เชลล์สคริปต์คืออะไร:

เมื่อเราได้เรียนรู้แนวคิดพื้นฐานของเชลล์แล้ว เรามาเริ่มกันที่เชลล์สคริปต์กัน เชลล์สคริปต์คือโปรแกรมคอมพิวเตอร์ที่รันคำสั่งหลายคำสั่งในเชลล์ซึ่งทำหน้าที่เป็นล่ามเพื่อทำหน้าที่เฉพาะ ตามที่กล่าวไว้ข้างต้น เชลล์มี 2 ประเภทโดยเฉพาะ อย่างไรก็ตาม คู่มือนี้เน้นที่เปลือก Bourne Again (Bash)
แล้วสคริปต์ทุบตีคืออะไร? ใน Linux คำสั่ง bash ทั้งหมดจะถูกเก็บไว้ใน /usr/bin และ /bin โฟลเดอร์ ตัวอย่างเช่น เมื่อใดก็ตามที่คุณเรียกใช้คำสั่ง bash จะค้นหาว่ามีอยู่ในไดเร็กทอรีหรือไม่ คำสั่งจะถูกดำเนินการหากพบในไดเร็กทอรีอื่นทำให้เกิดข้อผิดพลาด

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



ข้อบกพร่องในการเขียนสคริปต์ทุบตีคืออะไร:

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

ทุกภาษาโปรแกรมมีขั้นตอนในการค้นหาจุดบกพร่อง ในทำนองเดียวกัน bash ก็มีตัวเลือกในตัวมากมายในการดีบักโปรแกรมเทอร์มินัล

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

วิธีดีบักสคริปต์ทุบตี:

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

มีเครื่องมือต่างๆ ใน ​​Linux ในการดีบักโค้ด เช่น GNU Debugger หรือ gdb เครื่องมือเช่น GDB มีประโยชน์สำหรับภาษาโปรแกรมที่คอมไพล์เป็นไบนารี เนื่องจาก bash เป็นภาษาที่ตีความอย่างง่าย จึงไม่จำเป็นต้องใช้เครื่องมือหนักๆ ในการดีบัก

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

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

  1. วิธีดีบักสคริปต์ทุบตีโดยเปิดใช้งาน verbose -v ตัวเลือก
  2. วิธีดีบักสคริปต์ทุบตีโดยใช้ xtrace -x ตัวเลือก
  3. วิธีดีบักสคริปต์ทุบตีโดยใช้ noexec -n ตัวเลือก
  4. วิธีการระบุ ยกเลิกการตั้งค่าตัวแปร ขณะดีบักสคริปต์ทุบตี
  5. วิธีการดีบัก เฉพาะส่วน ของสคริปต์ทุบตี
  6. วิธีดีบักสคริปต์ทุบตีโดยใช้คำสั่ง กับดัก สั่งการ
  7. วิธีดีบักสคริปต์ทุบตีด้วยการกำจัด ไฟล์ globbing ใช้ -NS ตัวเลือก
  8. ทำอย่างไร รวม ตัวเลือกการดีบักเพื่อดีบักเชลล์สคริปต์
  9. ทำอย่างไร เปลี่ยนเส้นทาง debug-report เป็นไฟล์

ลองตรวจสอบเทคนิคต่าง ๆ ใน bash เพื่อดีบักสคริปต์ทุบตี:

1. วิธีดีบักสคริปต์ทุบตีโดยเปิดใช้งานตัวเลือก verbose -v:

วิธีที่ง่ายที่สุดวิธีหนึ่งในการดีบักสคริปต์ทุบตีคือการใช้ -v ตัวเลือกหรือที่เรียกว่า verbose สามารถเพิ่มตัวเลือกด้วย shebang หรือใส่ชื่อไฟล์สคริปต์อย่างชัดเจนขณะดำเนินการ ตัวเลือก verbose จะดำเนินการและพิมพ์โค้ดทุกบรรทัดเป็นกระบวนการโดยล่าม มาทำความเข้าใจกับตัวอย่างสคริปต์ทุบตี:

#! /bin/bash
โยนออก 'ป้อนหมายเลข 1'
อ่านหมายเลข1
โยนออก 'ป้อนหมายเลข 2'
อ่านหมายเลข2
ถ้า [ '$number1' -gt '$number2' ]
แล้ว
โยนออก 'หมายเลข 1 มากกว่าหมายเลข 2'
เอลฟ์ [ '$number1' -eq '$number2' ]
แล้ว
โยนออก 'หมายเลข 1 เท่ากับหมายเลข 2'
อื่น
โยนออก 'หมายเลข 2 มากกว่าหมายเลข 1'
เป็น

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

$sudoฉลาดติดตั้ง ฉันมา

สร้างไฟล์สคริปต์ทุบตีโดยใช้:

$ฉันมาb_script.sh

หากคุณยังใหม่กับโปรแกรมแก้ไข Vim ฉันแนะนำให้คุณเรียนรู้ วิธีใช้โปรแกรมแก้ไข vim ก่อนดำเนินการต่อ

ตอนนี้ กลับไปที่สคริปต์ รันสคริปต์โดยใช้ -v ตัวเลือก:

$ทุบตี -vb_script.sh

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

#! / bin / bash -v

ในทำนองเดียวกัน แฟล็ก verbose สามารถเพิ่มในบรรทัดถัดไปของ shebang โดยใช้ the ชุด สั่งการ:

#! /bin/bash
ชุด -v

วิธีการใด ๆ ที่กล่าวถึงข้างต้นสามารถเปิดใช้งาน verbose

2 วิธีดีบักสคริปต์ทุบตีโดยใช้ตัวเลือก xtrace -x:

การติดตามการดำเนินการ หรือที่เรียกว่า xtrace เป็นตัวเลือกการดีบักที่ชาญฉลาดและมีประโยชน์ โดยเฉพาะอย่างยิ่งเพื่อติดตามข้อผิดพลาดทางตรรกะ ข้อผิดพลาดทางตรรกะมักเกี่ยวข้องกับตัวแปรและคำสั่ง ในการตรวจสอบสถานะของตัวแปรระหว่างการดำเนินการของสคริปต์ เราใช้ -NS ตัวเลือก. ตอนนี้อีกครั้ง เรียกใช้ b_script.sh ไฟล์ที่มี -NS ธง:

$ทุบตี -NSb_script.sh

ผลลัพธ์จะแสดงค่าของตัวแปรแต่ละตัวอย่างชัดเจนในระหว่างกระบวนการดำเนินการ อีกครั้งที่ -NS สามารถใช้ข้าง shebang และหลังบรรทัด shebang โดยใช้คำสั่ง set xtrace ใส่เครื่องหมาย + กับแต่ละบรรทัดของสคริปต์

3 วิธีดีบักสคริปต์ทุบตีโดยใช้ตัวเลือก noexec -n:

ข้อผิดพลาดทางไวยากรณ์เป็นหนึ่งในสาเหตุหลักของข้อบกพร่อง ในการดีบักสคริปต์ทุบตีทางวากยสัมพันธ์ เราใช้ noexec (ไม่มีการดำเนินการ) โหมด ตัวเลือกที่ใช้สำหรับโหมด noexec คือ -NS. มันจะแสดงเฉพาะข้อผิดพลาดทางไวยากรณ์ของรหัสแทนที่จะดำเนินการ วิธีที่ปลอดภัยกว่ามากในการดีบักโค้ด มาดำเนินการกันเถอะ b_script.sh อีกครั้งกับ -NS ตัวเลือก:

$ทุบตี -NSb_script.sh

โค้ดจะไม่ทำงานหากไม่มีข้อผิดพลาดทางไวยากรณ์ ตอนนี้ มาแก้ไขโค้ดของเรากัน:

#! /bin/bash

โยนออก 'ป้อนหมายเลข 1'
อ่านหมายเลข1
โยนออก 'ป้อนหมายเลข 2'
อ่านหมายเลข2
ถ้า [ '$number1' -gt '$number2' ]
แล้ว
โยนออก 'หมายเลข 1 มากกว่าหมายเลข 2'
เอลฟ์ [ '$number1' -eq '$number2' ]
#แล้ว
โยนออก 'หมายเลข 1 เท่ากับหมายเลข 2'
อื่น
โยนออก 'หมายเลข 2 มากกว่าหมายเลข 1'
เป็น

ฉันกำลังแสดงความคิดเห็น แล้ว หลังจาก เอลฟ์ . ตอนนี้ด้วย -n ดำเนินการ b_script.sh สคริปต์:

$ทุบตี -NSb_script.sh

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

4 วิธีระบุตัวแปรที่ไม่ได้ตั้งค่าขณะดีบักสคริปต์ทุบตี:

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

#! /bin/bash
โยนออก 'ป้อนหมายเลข 1'
อ่านหมายเลข1
โยนออก 'ป้อนหมายเลข 2'
อ่านหมายเลข2
ถ้า [ '$num1' -gt '$number2' ]
แล้ว
โยนออก 'หมายเลข 1 มากกว่าหมายเลข 2'
เอลฟ์ [ '$number1' -eq '$number2' ]
แล้ว
โยนออก 'หมายเลข 1 เท่ากับหมายเลข 2'
อื่น
โยนออก 'หมายเลข 2 มากกว่าหมายเลข 1'
เป็น

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

$ทุบตี -ยูb_script.sh

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

5. วิธีดีบักส่วนเฉพาะของสคริปต์ทุบตี:

โหมด xtrace ประมวลผลโค้ดทุกบรรทัดและให้เอาต์พุต อย่างไรก็ตาม การค้นหาข้อผิดพลาดในโค้ดขนาดใหญ่อาจใช้เวลานาน หากเราทราบแล้วว่าส่วนใดที่อาจก่อให้เกิดข้อผิดพลาด โชคดีที่ xtrace ยังอนุญาตให้คุณดีบักบางส่วนของโค้ด ซึ่งสามารถทำได้โดยใช้ ชุด สั่งการ. สถานที่ ตั้ง -x ที่จุดเริ่มต้นของส่วนที่ต้องดีบั๊กแล้ว ตั้งค่า +x ในตอนท้าย ตัวอย่างเช่น ฉันต้องการดีบักคำสั่งแบบมีเงื่อนไขของ b_script.sh ดังนั้นฉันจะใส่เงื่อนไขเงื่อนไขทั้งหมดไว้ใน ตั้ง -x และ ตั้งค่า +x ตัวเลือกตามที่แสดงในรหัสด้านล่าง:

#! /bin/bash
โยนออก 'ป้อนหมายเลข 1'
อ่านหมายเลข1
โยนออก 'ป้อนหมายเลข 2'
อ่านหมายเลข2
ชุด -NS
ถ้า [ '$number' -gt '$number2' ]
แล้ว
โยนออก 'หมายเลข 1 มากกว่าหมายเลข 2'
เอลฟ์ [ '$number1' -eq '$number2' ]
แล้ว
โยนออก 'หมายเลข 1 เท่ากับหมายเลข 2'
อื่น
โยนออก 'หมายเลข 2 มากกว่าหมายเลข 1'
เป็น
ชุด+ x

ตอนนี้ เรียกใช้สคริปต์โดยใช้ bash b_script.sh .

เอาต์พุตจะทำการดีบักเฉพาะเงื่อนไข if ตามที่ระบุ

6. วิธีดีบักสคริปต์ทุบตีโดยใช้คำสั่ง trap:

หากสคริปต์ของคุณซับซ้อน แสดงว่ามีเทคนิคที่ละเอียดกว่าสำหรับการดีบักด้วยเช่นกัน หนึ่งในนั้นคือ กับดัก สั่งการ. NS กับดัก คำสั่งจับสัญญาณและดำเนินการคำสั่งเมื่อเกิดสถานการณ์เฉพาะ คำสั่งอาจเป็นสัญญาณหรือฟังก์ชันก็ได้ ฉันได้สร้างสคริปต์อื่นโดยใช้ชื่อ sum_script.sh :

#! /bin/bash
กับดัก 'echo 'Line ${LINENO}: หมายเลขแรกคือ $number1 หมายเลขที่สองคือ $number2 และ sum คือ $sum' 'DEBUG
โยนออก 'ป้อนหมายเลขแรก'
อ่านหมายเลข1
โยนออก 'ป้อนหมายเลขที่สอง'
อ่านหมายเลข2
ผลรวม= $[เบอร์1 + เบอร์2]
โยนออก 'ผลรวมคือ$sum'

NS กับดัก สั่งกับ DEBUG สัญญาณแสดงสถานะของตัวแปร หมายเลข1 , หมายเลข2 และ ผลรวม หลังจากดำเนินการแต่ละบรรทัดดังแสดงในภาพที่ส่งออกต่อไปนี้:

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

7. วิธีดีบักสคริปต์ทุบตีโดยกำจัดไฟล์ที่ globbing โดยใช้ตัวเลือก -f:

File globbing เป็นกระบวนการในการค้นหาไฟล์ที่มีอักขระตัวแทน กล่าวคือ * และ ? . ในหลาย ๆ สถานการณ์ คุณไม่จำเป็นต้องขยายไฟล์ขณะแก้ไขจุดบกพร่อง ในกรณีดังกล่าว คุณสามารถบล็อกไฟล์ที่วนไปมาได้โดยใช้ปุ่ม -NS ตัวเลือก. มาทำความเข้าใจกับสคริปต์กันเถอะ fglobe_script.sh :

#! /bin/bash
โยนออก 'แสดงไฟล์ข้อความทั้งหมด'
ลส *.txt

รหัสด้านบนจะแสดงไฟล์ข้อความทั้งหมดในไดเร็กทอรีปัจจุบัน ดำเนินการ:

$ทุบตีfglobe_script.sh

ในการปิด file globbing ให้ใช้ปุ่ม -NS ตัวเลือก:

$ทุบตี -NSfglobe_script.sh

ในทำนองเดียวกัน คุณสามารถใช้กับ shebang และกับ the ชุด คำสั่งเช่นกัน:

#! /bin/bash
โยนออก 'แสดงไฟล์ข้อความทั้งหมด'
ลส *.txt
ชุด -NS
โยนออก 'แสดงไฟล์ข้อความทั้งหมด'
ลส *.txt
ชุด+f

ตอนนี้วิ่ง ทุบตี fglobe_script.sh:

ส่วนที่แนบมาด้วย ตั้งค่า -f/set +f ตัวเลือกไม่ได้ประมวลผลคำสั่งด้วยอักขระตัวแทน

8. วิธีรวมตัวเลือกการดีบักเพื่อดีบักเชลล์สคริปต์:

เราใช้ตัวเลือกเดียวในเทคนิคการดีบักที่กล่าวถึงข้างต้น แต่เราสามารถรวมตัวเลือกต่างๆ เพื่อให้เข้าใจได้ดีขึ้น มาดำเนินการกันเถอะ -NS และ -v ตัวเลือกในการ sum_script.sh สคริปต์ ฉันกำลังใช้ sum_script.sh สคริปต์

#! /bin/bash
โยนออก 'ป้อนหมายเลขแรก'
อ่านหมายเลข1
โยนออก 'ป้อนหมายเลขที่สอง'
อ่านหมายเลข2
ผลรวม= $[เบอร์1 + เบอร์2]
โยนออก 'ผลรวมคือ$sum'

ตอนนี้ดำเนินการ:

$ทุบตี -xvsum_script.sh

ทั้งคู่ -NS และ -v รวมเอาท์พุตตามที่แสดงในภาพที่ส่งออก ในทำนองเดียวกัน เรายังสามารถรวม -ยู ตัวเลือกที่มี verbose -v สำหรับการตรวจจับข้อผิดพลาด ฉันกำลังแทนที่ หมายเลข1 ตัวแปรด้วย หนึ่ง ในบรรทัดที่หกของสคริปต์:

#! /bin/bash
เป็น$number2และผลรวมเป็น$sum' ดีบัก
โยนออก '
ป้อนหมายเลขแรก'
อ่านหมายเลข1
โยนออก '
ใส่หมายเลขที่สอง'
อ่านหมายเลข2
sum=$[num + number2]
โยนออก '
NSผลรวมเป็น$sum'

หากต้องการดูผลลัพธ์ ให้รันคำสั่งที่กล่าวถึงด้านล่าง:

$ทุบตี -uvsum_script.sh

9. วิธีเปลี่ยนเส้นทางรายงานการดีบักไปยังไฟล์:

การบันทึกรายงานการดีบักของสคริปต์ทุบตีลงในไฟล์นั้นมีประโยชน์ในหลายสถานการณ์ ค่อนข้างยุ่งยากเพราะการเปลี่ยนเส้นทางรายงานการดีบักไปยังไฟล์ เราใช้ตัวแปรพิเศษบางอย่าง มาปรับใช้กันเถอะ b_script.sh รหัส:

#! /bin/bash
ผู้บริหาร 5>dubug_report.log
BASH_XTRACED='5'
PS4='$ LINENO--'
โยนออก 'ป้อนหมายเลข 1'
อ่านหมายเลข1
โยนออก 'ป้อนหมายเลข 2'
อ่านหมายเลข2
ถ้า [ '$number' -gt '$number2' ]
แล้ว
โยนออก 'หมายเลข 1 มากกว่าหมายเลข 2'
เอลฟ์ [ '$number1' -eq '$number2' ]
แล้ว
โยนออก 'หมายเลข 1 เท่ากับหมายเลข 2'
อื่น
โยนออก 'หมายเลข 2 มากกว่าหมายเลข 1'
เป็น

ในบรรทัดที่สองของโค้ด จะเห็นได้ว่าเรากำลังเปลี่ยนเส้นทางเอาต์พุตไปที่ a debug_report.log ไฟล์โดยใช้ ผู้บริหาร คำสั่งพร้อม file descriptor 5 (FD5)

exec 5> debug_report.log: NS ผู้บริหาร คำสั่งเปลี่ยนเส้นทางทุกอย่างที่เกิดขึ้นในเชลล์ไปยังไฟล์ debug_report.log

BASH_XTRACEFD=5: มันคือ ตัวแปรทุบตีเฉพาะ และไม่สามารถใช้กับเปลือกอื่นได้ จำเป็นต้องกำหนด file descriptor ที่ถูกต้อง และ bash จะเขียนเอาต์พุตที่แตกออกมาไปยัง debug_report.log

PS4=’$LINENO– ': นอกจากนี้ยังเป็นตัวแปรทุบตีที่ใช้ในการพิมพ์หมายเลขบรรทัดขณะทำการดีบักโดยใช้โหมด xtrace ค่าเริ่มต้นของ PS4 คือ ที่ + เข้าสู่ระบบ

สคริปต์ด้านบนกำลังสร้างไฟล์บันทึกชื่อ debug_report.log, หากต้องการอ่านให้ใช้ แมว สั่งการ:

บทสรุป:

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

ภาษาการเขียนโปรแกรมและสภาพแวดล้อมจำนวนมากมีตัวดีบักร่วมของตัวเอง ในการเขียนสคริปต์ทุบตี สามารถใช้เทคนิคต่างๆ ในการดีบักสคริปต์ได้ คู่มือนี้เน้นไปที่วิธีการทั้งหมดที่สามารถใช้เพื่อค้นหาจุดบกพร่องในสคริปต์ทุบตีอย่างละเอียด ดังนั้นเมื่อใดก็ตามที่คุณรู้สึกว่าสคริปต์ทุบตีของคุณไม่ทำงานตามที่คาดไว้ ให้ใช้เทคนิคใด ๆ ที่กล่าวถึงข้างต้น แต่โหมด xtrace (-x) มีประโยชน์มากในกรณีส่วนใหญ่