0Pricing
DevOps Bootcamp · บทเรียน

แนวทางปฏิบัติที่ดีในการเขียนสคริปต์และการตรวจไวยากรณ์

เรียนรู้แบบแผนการเขียนโค้ด การใส่คำอธิบาย และการใช้เครื่องมืออย่าง 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การดีบักสคริปต์ Bash (set -x, trap)
  2. การจัดการข้อผิดพลาดและสถานะการออก
  3. แนวทางปฏิบัติที่ดีในการเขียนสคริปต์และการตรวจไวยากรณ์
  4. การทดสอบสคริปต์ Bash ด้วย Bats
← กลับไปที่ DevOps Bootcamp