บทนำสู่ Bash Script: ตัวอย่างสคริปต์อัตโนมัติง่ายๆ ที่ควรเขียนเป็นอันดับแรก
ในบทความที่แล้ว เราได้เรียนรู้ "คำศัพท์" พื้นฐานของ Bash (คำสั่ง) เช่น cd และ ls ไปแล้ว แม้การพิมพ์คำสั่งทีละคำสั่งจะสะดวก แต่พลังที่แท้จริงของ Bash อยู่ที่การนำคำศัพท์เหล่านี้มาร้อยเรียงเป็น "ประโยค" หรือ "เรื่องราว" เพื่อสั่งให้คอมพิวเตอร์ทำงานให้เราโดยอัตโนมัติ ซึ่งนั่นก็คือ Bash Script ครับ
คุณเคยเจองานที่น่าเบื่อและซ้ำซากแบบนี้ไหมครับ? "ต้องเตรียมโครงสร้างโฟลเดอร์เหมือนเดิมทุกครั้งที่เริ่มโปรเจกต์ใหม่", "ต้องย่อขนาดรูปภาพทีละหลายๆ รูป", "ต้องสำรองข้อมูลไฟล์เป็นประจำ"... หากคุณเรียนรู้ Bash Script คุณจะสามารถทำงานเหล่านี้ให้เสร็จสิ้นได้ในพริบตาเหมือนใช้เวทมนตร์
บทความนี้จัดทำขึ้นสำหรับผู้เริ่มต้นที่เริ่มคุ้นเคยกับการใช้คำสั่งแล้ว โดยจะอธิบายตั้งแต่วิธีการเขียน Bash Script ขั้นพื้นฐาน ไปจนถึงพื้นฐานการเขียนโปรแกรมอย่างตัวแปร, การแบ่งเงื่อนไข (if), และการทำงานซ้ำ (for) พร้อมตัวอย่างสคริปต์อัตโนมัติง่ายๆ ที่สามารถคัดลอกไปใช้งานได้ทันที มาสร้างเครื่องมืออัตโนมัติง่ายๆ ในแบบของคุณ เหมือนกับการเขียนสูตรอาหารกันเถอะ!
1. Bash Script แรกของคุณ - ก้าวแรกสู่งานอัตโนมัติ
Bash Script ก็คือไฟล์ข้อความธรรมดาๆ ที่เขียนลำดับของคำสั่งที่คุณต้องการรันเอาไว้ ไม่จำเป็นต้องใช้เครื่องมือพิเศษใดๆ ในการสร้างมันขึ้นมา เรามาลองสร้างและรันสคริปต์ง่ายๆ กันเลย
ขั้นตอนที่ 1: สร้างไฟล์สคริปต์
ก่อนอื่น ให้สร้างไฟล์ข้อความชื่อ hello_script.sh แล้วเขียนเนื้อหาต่อไปนี้ลงไป โดยทั่วไปนิยมใช้นามสกุล .sh สำหรับไฟล์สคริปต์
#!/bin/bash
# แสดงข้อความบนหน้าจอ
echo "สวัสดี ยินดีต้อนรับสู่โลกของ Bash Script!"
echo "วันและเวลาปัจจุบันคือ:"
date
บรรทัดแรก #!/bin/bash ให้คิดว่าเป็น "คาถา" ก่อนก็ได้ครับ นี่คือการเขียน (ที่เรียกว่า Shebang) เพื่อบอกระบบว่า "ให้รันไฟล์นี้ด้วย Bash นะ"
ขั้นตอนที่ 2: ให้สิทธิ์ในการรัน (Execute Permission)
ไฟล์สคริปต์ที่เพิ่งสร้างเสร็จยังไม่ถูกมองว่าเป็น "โปรแกรมที่รันได้" เราต้องใช้คำสั่ง chmod เพื่อให้สิทธิ์ในการรันแก่ไฟล์เสียก่อน
$ chmod +x hello_script.sh
ขั้นตอนที่ 3: รันสคริปต์
เตรียมการพร้อมแล้ว! รันสคริปต์ด้วยคำสั่งต่อไปนี้ได้เลย ./ หมายถึง "ไฟล์ที่อยู่ในไดเรกทอรีปัจจุบัน"
$ ./hello_script.sh
สวัสดี ยินดีต้อนรับสู่โลกของ Bash Script!
วันและเวลาปัจจุบันคือ:
อา. 6 ก.ค. 2025 09:47:45 JST
คำสั่งที่คุณเขียนไว้ถูกรันตามลำดับแล้วใช่ไหมครับ นี่แหละคือพื้นฐานของ Bash Script!
2. ตัวแปรและอาร์กิวเมนต์ - สร้างสคริปต์ที่ยืดหยุ่น
สคริปต์ที่ทำได้แต่เรื่องเดิมๆ คงไม่สนุกเท่าไหร่ เรามาใช้ "ตัวแปร" และ "อาร์กิวเมนต์" เพื่อทำให้สคริปต์ของเรายืดหยุ่นมากขึ้นกันดีกว่า
ตัวแปร: "กล่อง" สำหรับเก็บข้อมูล
ตัวแปรคือ "กล่องที่มีชื่อ" ซึ่งคุณสามารถใส่ข้อมูลอะไรก็ได้ที่ต้องการ (เช่น ข้อความหรือตัวเลข) เรากำหนดตัวแปรในรูปแบบ ชื่อตัวแปร=ค่า และเวลาใช้งานจะเขียนว่า $ชื่อตัวแปร
#!/bin/bash
# เก็บข้อความไว้ในตัวแปรชื่อ GREETING
GREETING="ยินดีต้อนรับ"
USER_NAME="อลิซ"
# แสดงข้อความโดยใช้ตัวแปร
echo "$GREETING คุณ $USER_NAME!"
อาร์กิวเมนต์: ส่งข้อมูลเข้าสคริปต์จากภายนอก
การต้องมานั่งแก้ไขสคริปต์ทุกครั้งที่รันเป็นเรื่องน่าเบื่อ เราจึงใช้ "อาร์กิวเมนต์" (Argument) ซึ่งเป็นกลไกสำหรับส่งข้อมูลจากภายนอกเข้าไปในสคริปต์ขณะที่รัน เราสามารถรับค่าเหล่านี้ได้ด้วยหมายเลข เช่น $1, $2
ลองสร้างสคริปต์ชื่อ greet.sh ตามนี้ดูครับ
#!/bin/bash
# เก็บอาร์กิวเมนต์ตัวที่ 1 ที่ส่งเข้ามาตอนรันไว้ในตัวแปร USER_NAME
USER_NAME=$1
echo "สวัสดี คุณ $USER_NAME!"
เวลาจะรันสคริปต์นี้ ให้ใส่ชื่อต่อท้ายตอนรัน
$ ./greet.sh บ็อบ
สวัสดี คุณ บ็อบ!
เห็นไหมครับว่าการใช้อาร์กิวเมนต์ทำให้การนำสคริปต์กลับมาใช้ใหม่สะดวกขึ้นมาก
3. การแบ่งเงื่อนไขด้วย if - เปลี่ยนการทำงานตามสถานการณ์
พื้นฐานของการเขียนโปรแกรมอย่าง "ถ้าเป็น A ให้ทำ B" ก็สามารถเขียนใน Bash Script ได้ง่ายๆ ด้วยการใช้ if
ตัวอย่างเช่น ลองสร้างสคริปต์ที่ตรวจสอบว่า "มีไฟล์ที่ระบุอยู่หรือไม่"
#!/bin/bash
FILE_NAME=$1
# ถ้ามี "ไฟล์" ชื่อ $FILE_NAME อยู่
if [ -f "$FILE_NAME" ]; then
echo "พบไฟล์ '$FILE_NAME' แล้ว"
else
echo "ไม่พบไฟล์ '$FILE_NAME'"
fi
[ -f "ชื่อไฟล์" ] คือเงื่อนไขที่ใช้ตรวจสอบว่า "มีไฟล์นั้นอยู่หรือไม่?" เรามาลองรันสคริปต์นี้กัน
กรณีที่ไฟล์มีอยู่:
$ touch sample.txt
$ ./check_file.sh sample.txt
พบไฟล์ 'sample.txt' แล้ว
กรณีที่ไฟล์ไม่มีอยู่:
$ ./check_file.sh another.txt
ไม่พบไฟล์ 'another.txt'
4. การทำงานซ้ำด้วย for loop - จัดการงานที่น่าเบื่อให้สิ้นซาก
หัวใจของระบบอัตโนมัติอยู่ที่ "การทำงานซ้ำ" หากมีงานคล้ายๆ กันที่ต้องทำซ้ำหลายครั้ง ก็ปล่อยให้คอมพิวเตอร์ทำแทนเถอะครับ ซึ่ง for loop นั้นสะดวกมาก
เรามาดูตัวอย่างสคริปต์ที่สร้างไฟล์ HTML หลายไฟล์พร้อมกันเพื่อเป็นต้นแบบสำหรับเว็บไซต์กัน
#!/bin/bash
# ทำงานซ้ำสำหรับชื่อ about, works, contact
for page in about works contact
do
# ใช้ตัวแปร page เพื่อสร้างชื่อไฟล์และแท็ก H1 แบบไดนามิก
FILE_NAME="${page}.html"
TITLE_TEXT=$(echo "$page" | sed 's/./\u&/') # เปลี่ยนตัวอักษรแรกเป็นตัวพิมพ์ใหญ่
# ใช้ Here Document เพื่อเขียน HTML ทั้งหมดลงในไฟล์
cat << EOF > $FILE_NAME
<!DOCTYPE html>
<html lang="th">
<head>
<meta charset="UTF-8">
<title>$TITLE_TEXT Page</title>
<style>
body { font-family: sans-serif; line-height: 1.6; color: #333; }
h1 { color: #0056b3; }
</style>
</head>
<body>
<h1>This is the $TITLE_TEXT page.</h1>
<p>Content for the $page page goes here.</p>
</body>
</html>
EOF
echo "Created ${FILE_NAME}."
done
echo "All pages created!"
สคริปต์นี้จะวนลูปสำหรับ 3 คำคือ about, works, contact และสร้างไฟล์ HTML ที่สมบูรณ์สำหรับแต่ละชื่อ ส่วนที่อยู่ระหว่าง << EOF และ EOF เรียกว่า Here Document ซึ่งสะดวกในการแสดงผลข้อความหลายบรรทัดตามที่เป็นอยู่
ลองรันดูครับ
$ ./create_pages.sh
Created about.html.
Created works.html.
Created contact.html.
All pages created!
ลองตรวจสอบเนื้อหาของไฟล์ที่สร้างขึ้น
$ cat about.html
<!DOCTYPE html>
<html lang="th">
...
<h1>This is the About page.</h1>
...
</html>
ยอดเยี่ยมไปเลย! ไฟล์ HTML ที่มีเนื้อหาต่างกัน 3 ไฟล์ถูกสร้างขึ้นในพริบตาเดียว!
สรุป
ครั้งนี้ เราได้ก้าวแรกเข้าสู่โลกของ Bash Script โดยได้ดู синтаксисพื้นฐานและตัวอย่างระบบอัตโนมัติง่ายๆ กันไปแล้ว
- เพียงแค่รวบรวมคำสั่งต่างๆ ไว้ในไฟล์เดียว ก็กลายเป็น สคริปต์
- การใช้ ตัวแปร และ อาร์กิวเมนต์ ทำให้สคริปต์ยืดหยุ่นและนำกลับมาใช้ใหม่ได้ง่ายขึ้น
- การใช้ if ทำให้สามารถแบ่งการทำงานตามเงื่อนไขได้
- การใช้ for ทำให้สามารถมอบหมายงานที่ซ้ำซากน่าเบื่อให้คอมพิวเตอร์ทำแทนได้
คำว่าสคริปต์อาจฟังดูยาก แต่สุดท้ายแล้วมันก็คือ "การเขียนคำสั่งที่ปกติเราพิมพ์ด้วยมือทีละคำสั่งเรียงกันไว้" เท่านั้นเอง ลองเริ่มจากคิดว่ามีงานอะไรที่คุณทำเป็นประจำแล้วสามารถเปลี่ยนเป็นสคริปต์ได้บ้าง ก้าวเล็กๆ นั้นจะปลดปล่อยคุณจากงานที่น่าเบื่อและช่วยให้คุณมีสมาธิกับงานที่สร้างสรรค์มากขึ้น
เอาล่ะ เมื่อเรียนรู้วิธีการเขียนพื้นฐานแล้ว ต่อไปคุณคงอยากเรียนรู้วิธีการเขียนที่ "ดี" และเป็นที่ยอมรับในทางปฏิบัติ รวมถึงเคล็ดลับในการหลีกเลี่ยงข้อผิดพลาดที่มือใหม่มักจะเจอใช่ไหมครับ? ในบทความหน้า เราจะมาอธิบายเกี่ยวกับ Best Practice เหล่านั้นกัน
[ฉบับสมบูรณ์] 5 รูปแบบ Bash ที่ควรจำและวิธีหลีกเลี่ยงข้อผิดพลาด