🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

บทนำสู่ 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 โดยได้ดู синтаксисพื้นฐานและตัวอย่างระบบอัตโนมัติง่ายๆ กันไปแล้ว

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

เอาล่ะ เมื่อเรียนรู้วิธีการเขียนพื้นฐานแล้ว ต่อไปคุณคงอยากเรียนรู้วิธีการเขียนที่ "ดี" และเป็นที่ยอมรับในทางปฏิบัติ รวมถึงเคล็ดลับในการหลีกเลี่ยงข้อผิดพลาดที่มือใหม่มักจะเจอใช่ไหมครับ? ในบทความหน้า เราจะมาอธิบายเกี่ยวกับ Best Practice เหล่านั้นกัน

[ฉบับสมบูรณ์] 5 รูปแบบ Bash ที่ควรจำและวิธีหลีกเลี่ยงข้อผิดพลาด