0Pricing
Linux Command Line & Bash Scripting Mastery · บทเรียน

โครงงานการเขียนสคริปต์ขั้นสูง

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

โครงงานการเขียนสคริปต์ขั้นสูง เป็นบทเรียน Linux Command Line & Bash Scripting Mastery ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Linux Command Line & Bash Scripting Mastery และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Linux Command Line & Bash Scripting Mastery มีบทเรียนทั้งหมด 4 บทเรียน

เริ่มโครงการ: โจทย์ท้าทาย

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

ในบทเรียนนี้ เราจะสร้างสคริปต์ Bash ขั้นสูงที่ใช้งานได้จริงตั้งแต่ต้น โครงการนี้จะท้าทายให้คุณผสานทุกสิ่งที่เรียนรู้เข้ากับโซลูชันเดียวที่ทำงานได้

กำหนดเป้าหมายโครงการของเรา

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

สคริปต์ของเราจะทำสิ่งต่อไปนี้:

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

พื้นฐานสคริปต์: Shebang และตัวแปร

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

เราจะกำหนดพาธสำหรับไดเรกทอรีที่ใช้ตรวจสอบ ไดเรกทอรีจัดเก็บถาวร และไฟล์บันทึก

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

ตรวจสอบให้แน่ใจว่าไดเรกทอรีมีอยู่

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

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

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

# Ensure monitoring and archive directories exist
mkdir -p "$MONITOR_DIR" || { echo "$(date): ERROR: Cannot create $MONITOR_DIR. Exiting." >> "$LOG_FILE"; exit 1; }
mkdir -p "$ARCHIVE_DIR" || { echo "$(date): ERROR: Cannot create $ARCHIVE_DIR. Exiting." >> "$LOG_FILE"; exit 1; }

echo "$(date): Directories checked/created." >> "$LOG_FILE"

ลูปตรวจสอบ

สคริปต์ของเราต้องทำงานอย่างต่อเนื่องเพื่อตรวจสอบไฟล์ใหม่ ลูป while true เหมาะอย่างยิ่งสำหรับงานนี้ ภายในลูป เราจะใช้ sleep เพื่อหยุดรอสองสามวินาทีระหว่างการตรวจสอบแต่ละครั้ง ป้องกันไม่ให้สคริปต์ใช้ทรัพยากรมากเกินไป

เราจะบันทึกการตรวจสอบแต่ละครั้งไว้ด้วย เพื่อติดตามกิจกรรมต่าง ๆ

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

# Ensure monitoring and archive directories exist
mkdir -p "$MONITOR_DIR" || { echo "$(date): ERROR: Cannot create $MONITOR_DIR. Exiting." >> "$LOG_FILE"; exit 1; }
mkdir -p "$ARCHIVE_DIR" || { echo "$(date): ERROR: Cannot create $ARCHIVE_DIR. Exiting." >> "$LOG_FILE"; exit 1; }

echo "$(date): Directories checked/created." >> "$LOG_FILE"

# --- Main Monitoring Loop ---
while true; do
  echo "$(date): Checking for new files in $MONITOR_DIR..." >> "$LOG_FILE"
  # File processing will go here
  sleep 5 # Check every 5 seconds
done

การค้นหาและประมวลผลไฟล์

ภายในลูปของเรา เราจำเป็นต้องค้นหาไฟล์ข้อความใหม่ คำสั่ง find เหมาะอย่างยิ่งสำหรับงานนี้เมื่อใช้ร่วมกับลูป for เพื่อประมวลผลไฟล์ที่ค้นพบแต่ละไฟล์ เราจะใช้ wc -l เพื่อนับจำนวนบรรทัดในแต่ละไฟล์เป็นขั้นตอนการประมวลผล

ตัวอย่างนี้แสดงให้เห็นการรวมเครื่องมือบรรทัดคำสั่งหลายรายการไว้ในสคริปต์

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

# Ensure monitoring and archive directories exist
mkdir -p "$MONITOR_DIR" || { echo "$(date): ERROR: Cannot create $MONITOR_DIR. Exiting." >> "$LOG_FILE"; exit 1; }
mkdir -p "$ARCHIVE_DIR" || { echo "$(date): ERROR: Cannot create $ARCHIVE_DIR. Exiting." >> "$LOG_FILE"; exit 1; }

echo "$(date): Directories checked/created." >> "$LOG_FILE"

# --- Main Monitoring Loop ---
while true; do
  echo "$(date): Checking for new files in $MONITOR_DIR..." >> "$LOG_FILE"
  # Find new .txt files and process them
  for file in $(find "$MONITOR_DIR" -maxdepth 1 -type f -name "*.txt"); do
    if [ -f "$file" ]; then # Double-check if it's a regular file
      LINE_COUNT=$(wc -l < "$file")
      echo "$(date): Found '$file'. Lines: $LINE_COUNT." >> "$LOG_FILE"
      # Archiving will go here
    fi
  done
  sleep 5 # Check every 5 seconds
done

การจัดเก็บไฟล์ที่ประมวลผลแล้ว

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

การทำเช่นนี้ช่วยเพิ่มความทนทานให้สคริปต์ของเรา

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

# Ensure monitoring and archive directories exist
mkdir -p "$MONITOR_DIR" || { echo "$(date): ERROR: Cannot create $MONITOR_DIR. Exiting." >> "$LOG_FILE"; exit 1; }
mkdir -p "$ARCHIVE_DIR" || { echo "$(date): ERROR: Cannot create $ARCHIVE_DIR. Exiting." >> "$LOG_FILE"; exit 1; }

echo "$(date): Directories checked/created." >> "$LOG_FILE"

# --- Main Monitoring Loop ---
while true; do
  echo "$(date): Checking for new files in $MONITOR_DIR..." >> "$LOG_FILE"
  for file in $(find "$MONITOR_DIR" -maxdepth 1 -type f -name "*.txt"); do
    if [ -f "$file" ]; then
      LINE_COUNT=$(wc -l < "$file")
      echo "$(date): Found '$file'. Lines: $LINE_COUNT." >> "$LOG_FILE"
      
      mv "$file" "$ARCHIVE_DIR/"
      if [ $? -eq 0 ]; then
        echo "$(date): Moved '$file' to '$ARCHIVE_DIR'." >> "$LOG_FILE"
      else
        echo "$(date): ERROR: Failed to move '$file' to '$ARCHIVE_DIR'." >> "$LOG_FILE"
      fi
    fi
  done
  sleep 5
done

การเพิ่มการออกจากโปรแกรมอย่างเหมาะสมด้วย Trap

สคริปต์ที่ทำงานเป็นเวลานานจำเป็นต้องมีวิธีหยุดการทำงานอย่างเหมาะสม คำสั่ง trap ช่วยให้เราดักจับสัญญาณ เช่น SIGINT (ซึ่งเกิดจาก Ctrl+C) และเรียกใช้ฟังก์ชันล้างข้อมูลก่อนออกจากโปรแกรม วิธีนี้ทำให้แน่ใจว่าสคริปต์ของเราจะบันทึกการปิดการทำงาน

นี่เป็นขั้นตอนสำคัญสำหรับสคริปต์ที่พร้อมใช้งานจริง

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# --- Functions ---
cleanup() {
  echo "$(date): Script received stop signal. Exiting gracefully." >> "$LOG_FILE"
  exit 0 # Exit with success status
}

# --- Trap Signals ---
# Trap SIGINT (Ctrl+C) and call the cleanup function
trap cleanup SIGINT

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

# Ensure monitoring and archive directories exist
mkdir -p "$MONITOR_DIR" || { echo "$(date): ERROR: Cannot create $MONITOR_DIR. Exiting." >> "$LOG_FILE"; exit 1; }
mkdir -p "$ARCHIVE_DIR" || { echo "$(date): ERROR: Cannot create $ARCHIVE_DIR. Exiting." >> "$LOG_FILE"; exit 1; }

echo "$(date): Directories checked/created." >> "$LOG_FILE"

# --- Main Monitoring Loop ---
while true; do
  echo "$(date): Checking for new files in $MONITOR_DIR..." >> "$LOG_FILE"
  for file in $(find "$MONITOR_DIR" -maxdepth 1 -type f -name "*.txt"); do
    if [ -f "$file" ]; then
      LINE_COUNT=$(wc -l < "$file")
      echo "$(date): Found '$file'. Lines: $LINE_COUNT." >> "$LOG_FILE"
      
      mv "$file" "$ARCHIVE_DIR/"
      if [ $? -eq 0 ]; then
        echo "$(date): Moved '$file' to '$ARCHIVE_DIR'." >> "$LOG_FILE"
      else
        echo "$(date): ERROR: Failed to move '$file' to '$ARCHIVE_DIR'." >> "$LOG_FILE"
      fi
    fi
  done
  sleep 5
done

การทดสอบสคริปต์ขั้นสูงของคุณ

เมื่อสคริปต์ของเราเสร็จสมบูรณ์แล้ว ก็ถึงเวลาทดสอบ! โดยทั่วไปคุณจะเรียกใช้สคริปต์ในเบื้องหลัง (เช่น ./monitor.sh &) จากนั้นสร้างไฟล์ทดสอบใน $MONITOR_DIR และสังเกต $LOG_FILE กับ $ARCHIVE_DIR

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

#!/bin/bash
# create_test_file.sh

MONITOR_DIR="/tmp/coddykit_monitor"
mkdir -p "$MONITOR_DIR" # Ensure dir exists for this test script

# Create a unique test file
TEST_FILE="$MONITOR_DIR/test_log_$(date +%Y%m%d_%H%M%S).txt"
echo "This is a test entry." > "$TEST_FILE"
echo "Another line for testing." >> "$TEST_FILE"
echo "Created new test file: $TEST_FILE"

ทบทวนตรรกะของสคริปต์

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

ลองพิจารณาว่าแต่ละคำสั่งมีบทบาทอย่างไรในการบรรลุเป้าหมายของโครงการ

ต่อยอด: การตั้งเวลาและการปรับแต่ง

สคริปต์นี้ได้รับการออกแบบให้ทำงานอย่างต่อเนื่อง ในสถานการณ์จริง คุณอาจเรียกใช้สคริปต์ในเบื้องหลังด้วย nohup ./script.sh & หรือที่ใช้กันทั่วไปกว่านั้นคือตั้งเวลาให้ทำงานเป็นระยะด้วย Cron

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

ลองปรับแต่งสคริปต์เพื่อ:

  • ประมวลผลไฟล์ประเภทอื่น
  • ดำเนินการอื่น (เช่น บีบอัดไฟล์ อัปโหลดไปยังคลาวด์)
  • เพิ่มการรายงานข้อผิดพลาดที่ละเอียดขึ้น (เช่น การแจ้งเตือนทางอีเมล)

สรุปโครงการและขั้นตอนถัดไป

ยินดีด้วย! คุณเพิ่งทำโครงการเขียนสคริปต์ Bash ขั้นสูงเสร็จสมบูรณ์ โดยผสานรวมคำสั่ง Linux และเทคนิคการเขียนสคริปต์ไว้มากมาย

คุณได้เรียนรู้วิธี:

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

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

คำถามที่พบบ่อย

บทเรียน “โครงงานการเขียนสคริปต์ขั้นสูง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “โครงงานการเขียนสคริปต์ขั้นสูง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Linux Command Line & Bash Scripting Mastery ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Linux Command Line & Bash Scripting Mastery มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “โครงงานการเขียนสคริปต์ขั้นสูง”

ลงมือทำโครงงานที่ครอบคลุมและผสานแนวคิดทั้งหมดที่เรียนมา ตั้งแต่เครื่องมือบรรทัดคำสั่งไปจนถึงเทคนิคการเขียนสคริปต์ Bash ขั้นสูง คุณปฏิบัติ Linux Command Line & Bash Scripting Mastery ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Linux Command Line & Bash Scripting Mastery หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Linux Command Line & Bash Scripting Mastery บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “โครงงานการเขียนสคริปต์ขั้นสูง” ใช้เวลานานแค่ไหน

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

ฉันเขียนและรันโค้ดในบทเรียน Linux Command Line & Bash Scripting Mastery นี้ได้ไหม

ได้ บทเรียน Linux Command Line & Bash Scripting Mastery ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. การตั้งเวลางานด้วย Cron
  2. การทำงานดูแลระบบให้เป็นอัตโนมัติ
  3. โครงงานการเขียนสคริปต์ขั้นสูง
  4. การหมุนเวียนบันทึกและการล้างข้อมูลอัตโนมัติ
← กลับไปที่ Linux Command Line & Bash Scripting Mastery