แนวทางปฏิบัติที่ดีในการเขียนสคริปต์และการตรวจไวยากรณ์
เรียนรู้แบบแผนการเขียนโค้ด การใส่คำอธิบาย และการใช้เครื่องมืออย่าง ShellCheck เพื่อเขียนสคริปต์ Bash ที่สะอาด อ่านง่าย และปราศจากข้อผิดพลาด
แนวทางปฏิบัติที่ดีในการเขียนสคริปต์และการตรวจไวยากรณ์ เป็นบทเรียน DevOps Bootcamp ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน DevOps Bootcamp และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดแนวทางปฏิบัติที่ดีในการเขียนสคริปต์จึงสำคัญ
การเขียนสคริปต์ Bash มีประสิทธิภาพมาก แต่หากไม่มีนิสัยที่ดี สคริปต์ก็อาจเข้าใจ ดูแลรักษา และแก้ไขข้อผิดพลาดได้ยาก
แนวทางปฏิบัติที่ดีคือคำแนะนำที่ช่วยให้คุณเขียนโค้ดที่สะอาด แข็งแกร่ง และอ่านง่าย แนวทางเหล่านี้ทำให้สคริปต์ของคุณ:
- อ่านง่ายขึ้น: ทั้งสำหรับคุณและผู้อื่น
- ดูแลรักษาง่ายขึ้น: อัปเดตหรือแก้ไขได้ง่ายกว่า
- มีโอกาสเกิดข้อผิดพลาดน้อยลง: ป้องกันข้อผิดพลาดทั่วไป
- เหมาะกับการทำงานร่วมกันมากขึ้น: ทำให้รูปแบบและพฤติกรรมของโค้ดเป็นมาตรฐานเดียวกัน
การเขียนคำอธิบายเพื่อความชัดเจน
คำอธิบายมีความสำคัญอย่างยิ่งสำหรับอธิบายเหตุผลที่โค้ดทำบางสิ่ง ไม่ใช่เพียงสิ่งที่โค้ดทำ คำอธิบายทำหน้าที่เป็นบันทึกสำหรับคุณในอนาคตหรือนักพัฒนาคนอื่น
ใช้คำอธิบายเพื่อ:
- อธิบายวัตถุประสงค์โดยรวมของสคริปต์ไว้ด้านบน
- อธิบายตรรกะที่ซับซ้อนหรือส่วนที่เข้าใจได้ยาก
- บันทึกข้อมูลฟังก์ชัน ได้แก่ วัตถุประสงค์ อาร์กิวเมนต์ และค่าที่ส่งคืน
เริ่มคำอธิบายด้วยสัญลักษณ์ # (แฮช)
#!/bin/bash
# This script demonstrates commenting best practices.
# Author: CoddyKit
# Date: 2023-10-27
# Function: greet_user
# Description: Prints a greeting message to the console.
# Arguments:
# $1 - The name of the user to greet.
greet_user() {
local name="$1" # Store the first argument in a local variable.
echo "Hello, ${name}!" # Output the greeting message.
}
# Main script execution starts here.
echo "Script execution started."
greet_user "CoddyKit Learner" # Call the function with a specific name.
echo "Script execution finished."หลักการตั้งชื่อที่ชัดเจน
ชื่อที่สื่อความหมายทำให้ติดตามการทำงานของสคริปต์ได้ง่ายขึ้น หลีกเลี่ยงตัวแปรชื่ออักษรเดี่ยว เว้นแต่เป็นตัวนับลูปที่ใช้กันทั่วไป (เช่น i หรือ j)
หลักการทั่วไป:
- ตัวแปร: ใช้ชื่อที่อธิบายความหมาย (เช่น
user_name,log_file) ใช้UPPERCASEสำหรับตัวแปรสภาพแวดล้อมหรือค่าคงที่ส่วนกลาง และใช้lowercase_with_underscoresสำหรับตัวแปรภายในสคริปต์ - ฟังก์ชัน: ใช้
lowercase_with_underscoresโดยมักขึ้นต้นด้วยคำกริยา (เช่นprocess_data,check_status) - สคริปต์: ใช้
lowercase_with_hyphens(เช่นbackup-script.sh)
รูปแบบและการเยื้องที่สอดคล้องกัน
การจัดรูปแบบให้สอดคล้องกัน เช่น การเยื้องและการเว้นวรรค ช่วยเพิ่มความสามารถในการอ่านได้อย่างมาก ลองนึกภาพการอ่านหนังสือที่การเยื้องย่อหน้าไม่สม่ำเสมอ!
ประเด็นสำคัญ:
- ใช้การเว้นวรรค 2 หรือ 4 ช่องสำหรับการเยื้อง (โดยมักไม่แนะนำให้ใช้แท็บ)
- จำกัดความยาวของบรรทัดให้สั้น (น้อยกว่า 80 อักขระเป็นหลักเกณฑ์โดยประมาณที่ดีสำหรับเทอร์มินัล)
- ใช้บรรทัดว่างเพื่อแยกกลุ่มโค้ดที่มีตรรกะเกี่ยวข้องกัน
- จัดแนวองค์ประกอบที่เกี่ยวข้องกันเมื่อเหมาะสม
ความสอดคล้องกันสำคัญกว่ารูปแบบเฉพาะที่คุณเลือก
ความแข็งแกร่ง: 'set -u' (nounset)
ตัวเลือก set -u (หรือ set -o nounset) ช่วยป้องกันข้อผิดพลาดที่เกิดจากการพิมพ์ผิดหรือตัวแปรที่ไม่ได้กำหนดค่าโดยไม่ตั้งใจได้เป็นอย่างดี หากสคริปต์พยายามใช้ตัวแปรที่ยังไม่ได้กำหนดค่า set -u จะออกจากสคริปต์ทันทีพร้อมข้อผิดพลาด
วิธีนี้ช่วยตรวจจับข้อผิดพลาดได้ตั้งแต่เนิ่น ๆ และป้องกันพฤติกรรมที่ไม่คาดคิดในภายหลังของสคริปต์
ลองเรียกใช้โค้ดด้านล่าง โค้ดนี้ออกแบบให้สิ้นสุดการทำงานตั้งแต่ต้น เนื่องจากไม่ได้กำหนด UNSET_NAME ไว้
#!/bin/bash
# Demonstrating 'set -u' (nounset)
set -u # Exit if an unset variable is used
MY_GREETING="Hello"
echo "${MY_GREETING}, CoddyKit!"
# This variable is NOT set. With 'set -u', the script will exit here.
echo "Your name is: ${UNSET_NAME}"
echo "This line will NOT be reached if 'set -u' is active and UNSET_NAME is indeed unset."ความแข็งแกร่ง: 'set -o pipefail'
เมื่อคุณส่งคำสั่งต่อกันเป็นสาย (เช่น cmd1 | cmd2 | cmd3) โดยปกติ Bash จะแจ้งเฉพาะสถานะการออกของคำสั่งสุดท้ายในสายเท่านั้น ซึ่งหมายความว่าหาก cmd1 ล้มเหลว แต่ cmd2 และ cmd3 ทำงานสำเร็จ สายคำสั่งก็อาจยังรายงานว่าสำเร็จ!
set -o pipefail จะเปลี่ยนพฤติกรรมนี้ หากคำสั่งใด ๆ ในสายล้มเหลว (ส่งคืนสถานะการออกที่ไม่ใช่ศูนย์) สถานะการออกของสายทั้งหมดจะเป็นสถานะที่ไม่ใช่ศูนย์นั้น
วิธีนี้ทำให้สายคำสั่งของคุณเชื่อถือได้มากขึ้น โดยแจ้งทันทีหากคำสั่งช่วงต้นล้มเหลว
#!/bin/bash
# Demonstrating 'set -o pipefail'
set -o pipefail # Ensures pipe's exit status is the last non-zero command
echo "Running a failing command in a pipe:"
echo "---"
# 'false' command always fails (exit status 1).
# 'cat /dev/null' always succeeds (exit status 0).
# With 'set -o pipefail', the pipe's overall exit status will be 1 from 'false'.
false | cat /dev/null
# This line will only be reached if the pipe above succeeds.
echo "---"
echo "Script finished successfully (this line won't show if pipe failed with set -o pipefail)."แนะนำ ShellCheck
แม้จะใช้แนวทางปฏิบัติที่ดีแล้ว ก็ยังมองข้ามข้อผิดพลาดทางไวยากรณ์เล็ก ๆ หรือข้อผิดพลาดที่พบบ่อยได้ง่าย นี่คือจุดที่ ShellCheck เข้ามาช่วย!
ShellCheck เป็นเครื่องมือวิเคราะห์แบบสถิต (หรือที่เรียกว่า 'เครื่องมือตรวจโค้ด') สำหรับสคริปต์เชลล์ โดยจะอ่านสคริปต์ของคุณและชี้ให้เห็น:
- ข้อผิดพลาดทางไวยากรณ์
- ข้อผิดพลาดทั่วไปของผู้เริ่มต้น
- ปัญหาด้านความหมายที่สังเกตได้ยาก
- ปัญหาด้านการใช้งานข้ามเชลล์แต่ละชนิด
เครื่องมือนี้ให้คำแนะนำที่เป็นประโยชน์ โดยมักมีลิงก์ไปยังคำอธิบายโดยละเอียดเพิ่มเติม
ShellCheck ขณะทำงาน: สคริปต์ที่มีข้อผิดพลาด
มาดูสคริปต์ที่มีปัญหาทั่วไปบางประการกัน ปัญหาเหล่านี้อาจไม่ทำให้สคริปต์หยุดทำงานทันที แต่เป็นแนวทางปฏิบัติที่ไม่ดีหรืออาจก่อให้เกิดข้อผิดพลาด
สมมติว่าคุณบันทึกสคริปต์นี้ไว้เป็น bad_script.sh หากต้องการเรียกใช้ ShellCheck กับสคริปต์นี้ ให้พิมพ์: shellcheck bad_script.sh
ลองดูว่าคุณจะสังเกตเห็นปัญหาได้หรือไม่ก่อนเรียกใช้ ShellCheck!
#!/bin/bash
# A script with some common issues
MY_NAME=coddykit # Variable assignment needs no space, but quoting is good for values
echo "Hello $MY_NAME!" # Missing quotes around variable expansion
if [ $1 = "admin" ]; then # Missing quotes around $1
echo "Welcome, administrator."
fi
# A simple loop with potential issues
for file in *.txt; do # Unquoted glob could expand to multiple arguments
echo File: $file # Missing quotes around $file
doneแก้ไขคำเตือนจาก ShellCheck
ShellCheck จะแสดงผลลัพธ์ประมาณนี้: SC2086: Double quotes missing around "$MY_NAME" โดยมักระบุรหัสเฉพาะ เช่น SC2086 ซึ่งคุณสามารถค้นหาเพื่อดูรายละเอียดเพิ่มเติมได้
นี่คือสคริปต์เดิมที่แก้ไขตามคำแนะนำของ ShellCheck และแนวปฏิบัติทั่วไปที่ดี:
สังเกตการใช้เครื่องหมายอัญประกาศคู่ "" ครอบการขยายค่าตัวแปรและการแทนที่คำสั่ง เพื่อป้องกันการแยกคำและการขยายรูปแบบไฟล์ ซึ่งมักเป็นสาเหตุของข้อผิดพลาด
#!/bin/bash
# A script with issues fixed by ShellCheck
MY_NAME="CoddyKit" # Quote variable assignment values
echo "Hello ${MY_NAME}!" # Always quote variable expansions
if [ "$1" = "admin" ]; then # Quote positional parameters like $1
echo "Welcome, administrator."
fi
# A simple loop with corrected quoting
for file in *.txt; do
echo "File: ${file}" # Quote variable expansions, especially in loops
doneตรวจสอบแนวปฏิบัติที่ดี
ข้อใดต่อไปนี้ถือเป็นแนวปฏิบัติที่ดีเมื่อเขียนสคริปต์ Bash
สรุป: การเขียนสคริปต์ระดับมืออาชีพ
ยินดีด้วย! คุณได้เรียนรู้วิธียกระดับสคริปต์ Bash จากระดับที่ใช้งานได้ให้เป็นสคริปต์ระดับมืออาชีพแล้ว
เราได้ครอบคลุมหัวข้อต่อไปนี้:
- ความสำคัญของแนวปฏิบัติที่ดีต่อการอ่านและการบำรุงรักษาโค้ด
- การใช้ความคิดเห็นและรูปแบบการตั้งชื่อเพื่อให้โค้ดชัดเจน
- การทำให้สคริปต์ทนทานด้วย
set -uและset -o pipefail - ประโยชน์ของ ShellCheck ในการค้นหาปัญหาและปรับปรุงโค้ดโดยอัตโนมัติ
เมื่อนำหลักการเหล่านี้ไปใช้ คุณจะเขียนสคริปต์ Bash ที่น่าเชื่อถือ เข้าใจง่าย และทำงานร่วมกับผู้อื่นได้ดีขึ้น หมั่นฝึกฝนต่อไปนะครับ/ค่ะ!
คำถามที่พบบ่อย
บทเรียน “แนวทางปฏิบัติที่ดีในการเขียนสคริปต์และการตรวจไวยากรณ์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “แนวทางปฏิบัติที่ดีในการเขียนสคริปต์และการตรวจไวยากรณ์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส DevOps Bootcamp ให้อัปเกรดเป็น CoddyKit PRO คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “แนวทางปฏิบัติที่ดีในการเขียนสคริปต์และการตรวจไวยากรณ์”
เรียนรู้แบบแผนการเขียนโค้ด การใส่คำอธิบาย และการใช้เครื่องมืออย่าง ShellCheck เพื่อเขียนสคริปต์ Bash ที่สะอาด อ่านง่าย และปราศจากข้อผิดพลาด คุณปฏิบัติ DevOps Bootcamp ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน DevOps Bootcamp หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน DevOps Bootcamp บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “แนวทางปฏิบัติที่ดีในการเขียนสคริปต์และการตรวจไวยากรณ์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน DevOps Bootcamp นี้ได้ไหม
ได้ บทเรียน DevOps Bootcamp ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การดีบักสคริปต์ Bash (set -x, trap)
- การจัดการข้อผิดพลาดและสถานะการออก
- แนวทางปฏิบัติที่ดีในการเขียนสคริปต์และการตรวจไวยากรณ์
- การทดสอบสคริปต์ Bash ด้วย Bats