โครงงานการเขียนสคริปต์ขั้นสูง
ลงมือทำโครงงานที่ครอบคลุมและผสานแนวคิดทั้งหมดที่เรียนมา ตั้งแต่เครื่องมือบรรทัดคำสั่งไปจนถึงเทคนิคการเขียนสคริปต์ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตั้งเวลางานด้วย Cron
- การทำงานดูแลระบบให้เป็นอัตโนมัติ
- โครงงานการเขียนสคริปต์ขั้นสูง
- การหมุนเวียนบันทึกและการล้างข้อมูลอัตโนมัติ