การจัดการข้อผิดพลาดและสถานะการออก
นำการตรวจสอบข้อผิดพลาดที่รัดกุมมาใช้ในสคริปต์ โดยทำความเข้าใจสถานะการออกและใช้ 'set -e' ร่วมกับตรรกะแบบมีเงื่อนไข
การจัดการข้อผิดพลาดและสถานะการออก เป็นบทเรียน Linux Command Line & Bash Scripting Mastery ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Linux Command Line & Bash Scripting Mastery และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Linux Command Line & Bash Scripting Mastery มีบทเรียนทั้งหมด 4 บทเรียน
ยินดีต้อนรับสู่การจัดการข้อผิดพลาด
ในบทเรียนนี้ เราจะทำให้สคริปต์ Bash ของคุณทำงานได้แข็งแกร่งขึ้น โดยเรียนรู้วิธีจัดการข้อผิดพลาดอย่างมีประสิทธิภาพ
ลองจินตนาการถึงสคริปต์ที่ดำเนินการหลายขั้นตอน หากขั้นตอนหนึ่งล้มเหลว คุณคงต้องการให้สคริปต์หยุดทำงาน หรืออย่างน้อยก็รับรู้ถึงความล้มเหลวนั้นใช่ไหม การจัดการข้อผิดพลาดช่วยในเรื่องนี้
สถานะการออกคืออะไร
ทุกคำสั่งที่คุณเรียกใช้ในเชลล์ Linux จะส่งคืนสถานะการออก (บางครั้งเรียกว่ารหัสการออกหรือรหัสส่งคืน)
- สถานะ 0 หมายถึงคำสั่งทำงานเสร็จสำเร็จ
- สถานะที่ไม่ใช่ศูนย์ (เช่น 1, 2, 127) แสดงถึงความล้มเหลวหรือข้อผิดพลาดบางรูปแบบ
สถานะนี้เปรียบเสมือนไฟจราจรสำหรับคำสั่งของคุณ!
ตรวจสอบสถานะการออกด้วยตนเอง
คุณสามารถตรวจสอบสถานะการออกของคำสั่งที่ดำเนินการล่าสุดได้โดยใช้ตัวแปรพิเศษ $?
มาลองใช้คำสั่งที่ทำงานสำเร็จและคำสั่งที่ล้มเหลวกัน:
#!/bin/bash
echo "Hello CoddyKit"
echo "Exit status: $?"
ls non_existent_file.txt
echo "Exit status: $?"การตรวจสอบข้อผิดพลาดแบบมีเงื่อนไขพื้นฐาน
การทราบสถานะการออกช่วยให้สคริปต์ตัดสินใจได้ คุณสามารถใช้คำสั่ง if เพื่อตรวจสอบ $? และตอบสนองต่อข้อผิดพลาด
วิธีนี้ทำให้สคริปต์รับรู้ปัญหาและป้องกันไม่ให้ทำงานต่อโดยใช้ข้อมูลที่ไม่ถูกต้อง
#!/bin/bash
ls non_existent_file.txt
if [ $? -ne 0 ]; then
echo "Error: The 'ls' command failed!"
exit 1 # Exit script with an error code
fi
echo "This line will not run if 'ls' fails."พลังของ `set -e`
การตรวจสอบ $? ด้วยตนเองหลังทุกคำสั่งอาจยุ่งยาก นี่คือจุดที่ set -e มีประโยชน์!
เมื่อเริ่มสคริปต์ด้วย set -e Bash จะออกทันทีหากคำสั่งใด ๆ (ที่ไม่ได้เป็นส่วนหนึ่งของการทดสอบแบบมีเงื่อนไข) สิ้นสุดด้วยสถานะที่ไม่ใช่ศูนย์
นี่คือสวิตช์ความปลอดภัยระดับสากลสำหรับสคริปต์ของคุณ!
`set -e` ขณะทำงาน
มาดูกันว่า set -e ป้องกันไม่ให้สคริปต์ทำงานต่อหลังเกิดข้อผิดพลาดได้อย่างไร สังเกตว่าคำสั่ง echo สุดท้ายจะไม่ถูกเรียกใช้
#!/bin/bash
set -e
echo "Starting important tasks..."
# This command will fail
cp /non_existent_source /tmp/destination
echo "This line will NOT be printed if 'cp' fails."
echo "All tasks completed successfully."กรณีที่ `set -e` ไม่หยุดการทำงาน
set -e มีประสิทธิภาพสูง แต่ก็มีกฎเฉพาะ โดยจะไม่ทำให้สคริปต์ออก หากคำสั่งที่ล้มเหลวเป็น:
- ส่วนหนึ่งของเงื่อนไข
ifหรือwhile - ส่วนหนึ่งของรายการ
&&หรือ||(ยกเว้นคำสั่งสุดท้าย) - มี
!อยู่ข้างหน้า
บริบทเหล่านี้ออกแบบมาเพื่อทดสอบความสำเร็จหรือความล้มเหลว ดังนั้น `set -e` จึงไม่เข้าไปแทรกแซง
รวม `set -e` กับ `||`
บางครั้งคุณอาจต้องการแสดงข้อความข้อผิดพลาดที่กำหนดเองก่อนออกจากโปรแกรม คุณสามารถรวม set -e กับตัวดำเนินการ || (OR) ได้
command || { echo "Error message"; exit 1; }
หาก command ล้มเหลว ส่วนหลัง || จะทำงาน แสดงข้อความของคุณ แล้วออกด้วยรหัสข้อผิดพลาดที่ระบุ
#!/bin/bash
set -e
echo "Attempting to find a file..."
find /non_existent_dir -name "*.txt" || \
{ echo "ERROR: Could not search in /non_existent_dir!"; exit 1; }
echo "Script continued (this won't print if 'find' fails)."จัดการรหัสการออกเฉพาะ
แม้ว่า 0 จะหมายถึงสำเร็จ และค่าที่ไม่ใช่ศูนย์จะหมายถึงล้มเหลว แต่รหัสที่ไม่ใช่ศูนย์แต่ละค่าก็อาจมีความหมายแตกต่างกัน
1: ข้อผิดพลาดทั่วไป2: ใช้คำสั่งภายในของเชลล์ไม่ถูกต้อง127: ไม่พบคำสั่ง
คุณสามารถใช้ if [ $? -eq 127 ] เพื่อตรวจสอบประเภทความล้มเหลวที่เฉพาะเจาะจง และแสดงข้อมูลข้อผิดพลาดที่เหมาะสมยิ่งขึ้น
แบบทดสอบการจัดการข้อผิดพลาด
ข้อความใดต่อไปนี้เกี่ยวกับสถานะการออกของ Bash และการจัดการข้อผิดพลาดเป็นจริง
ทบทวน: สคริปต์ที่ทำงานได้อย่างแข็งแกร่ง
คุณได้เรียนรู้วิธีทำให้สคริปต์ Bash เชื่อถือได้มากขึ้นแล้ว!
- ทุกคำสั่งจะส่งคืนสถานะการออก (0 เมื่อสำเร็จ และค่าที่ไม่ใช่ศูนย์เมื่อล้มเหลว)
- ตัวแปร
$?จะแสดงสถานะการออกของคำสั่งล่าสุด set -eเป็นเครื่องมือที่มีประสิทธิภาพ ซึ่งจะออกจากสคริปต์โดยอัตโนมัติเมื่อคำสั่งส่วนใหญ่ล้มเหลว- รวม
set -eกับ||เพื่อแสดงข้อความข้อผิดพลาดที่กำหนดเอง
การใช้เทคนิคเหล่านี้จะช่วยให้คุณเขียนสคริปต์ที่เป็นมืออาชีพและเสถียรมากขึ้น
คำถามที่พบบ่อย
บทเรียน “การจัดการข้อผิดพลาดและสถานะการออก” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การจัดการข้อผิดพลาดและสถานะการออก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Linux Command Line & Bash Scripting Mastery ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Linux Command Line & Bash Scripting Mastery มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การจัดการข้อผิดพลาดและสถานะการออก”
นำการตรวจสอบข้อผิดพลาดที่รัดกุมมาใช้ในสคริปต์ โดยทำความเข้าใจสถานะการออกและใช้ 'set -e' ร่วมกับตรรกะแบบมีเงื่อนไข คุณปฏิบัติ Linux Command Line & Bash Scripting Mastery ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Linux Command Line & Bash Scripting Mastery หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Linux Command Line & Bash Scripting Mastery บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การจัดการข้อผิดพลาดและสถานะการออก” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Linux Command Line & Bash Scripting Mastery นี้ได้ไหม
ได้ บทเรียน Linux Command Line & Bash Scripting Mastery ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การดีบักสคริปต์ Bash (set -x, trap)
- การจัดการข้อผิดพลาดและสถานะการออก
- แนวทางปฏิบัติที่ดีในการเขียนสคริปต์และการตรวจไวยากรณ์
- การทดสอบสคริปต์ Bash ด้วย Bats