Step 1 : พูดคุยรายละเอียดงาน

นัดพูดคุยกับทางแพลตฟอร์มเพื่อคุยรายละเอียดงานหรือส่งรายละเอียดงานผ่านฟอร์ม
โทรปรึกษาฟรี 0815459423

Step 2 : ขอใบเสนอราคา และชำระเงิน

ตกลงจ้างงาน โดยขอใบเสนอราคากับทางแพลตฟอร์ม และชำระเงิน

Step 3 : แพลตฟอร์มส่งงาน

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

คำแนะนำเพิ่มเติม

Supapongai เป็นแพลตฟอร์มทำเว็บไซต์โดยคุณศุภพงศ์ Web Developer มืออาชีพ ร่วมงานกับบริษัทชั้นนำมากมาย เช่น FutureSkill , Skillane , The Blacksmith และอื่นๆ มั่นใจ ปลอดภัย งานดีมีคุณภาพ พร้อมไลน์ให้คำปรึกษาตลอดการใช้งาน

เขียนโปรแกรม Shell Script Unix (Bash) ง่ายๆใน 10 นาที

Introduction

สวัสดีครับนักอ่านทุกท่าน ในบทความนี้ผมจะพานักอ่านทุกท่านมารู้จักกับการเขียนโปรแกรม Shell Script Unix (bash) ง่ายๆใน 10 นาที นะครับ ปกติแล้วเราก็มักจะเขียนโปรแกรมด้วยภาษา Python Java Kotlin และอื่นๆอีกมากมายใช่ไหมครับ แต่ว่าภาษา Shell Script ก็มีความสำคัญในการเขียนโปรแกรมให้กับระบบ OS หรือที่เรียกกันว่า Operation System นั่นเองครับ จะเป็นยังไงนั้นมาอ่านไปพร้อมๆกันเลยครับ

Requirements

  • เครื่อง Mac OS สักเครื่อง เช่น Mac Book Pro , Mac Book Air
  • เครื่องที่มีระบบปฏิบัติการ Linux เช่น Ubuntu 
  • สามารถใช้เว็บ GDB Online แล้วเลือกภาษาเป็น Bash โดยสามารถกดเข้าที่ลิงค์นี้ได้เลย

ขั้นตอนการเขียนโปรแกรม Shell Script 

  1. เปิด terminal  ขึ้นมาก่อน
  2. พิมพ์คำว่า bash ตามตัวอย่างด้านล่าง เพื่อเริ่มการเขียนโปรแกรม
bash

1. echo

มาเริ่มกันแบบง่ายๆก่อนกับคำสั่ง echo กันเลยครับ คำสั่ง echo เป็นคำสั่งที่เอาไว้แสดงข้อความออกทางจอภาพครับ มีวิธีใช้ง่ายๆ ดังนี้ครับ

  • echo “ข้อความที่ต้องการแสดง”
echo "Hello World"

2. read -p ข้อความบอกผู้ใช้ var

เป็นการรับข้อความทาง keyboard จากผู้ใช้ 

read -p "Please input your name" username

คำอธิบาย

ถ้าเรารันคำสั่งข้างบนแล้ว จะเห็นข้อความ Please input your name แสดงออกทางจอภาพ แล้วถ้าผู้ใช้กรอกข้อความกลับมา ข้อความที่ผู้ใช้กรอกมาจะถูกเก็บลงในตัวแปร username

3. read -s -p ข้อความบอกผู้ใช้ var

เป็นการรับข้อความผ่านทาง keyboard จากผู้ใช้เหมือนข้อ 2 เลย แต่จะไม่ให้ผู้ใช้เห็นข้อความที่ตัวเองพิมพ์ลงไป คล้ายๆกรอก password จะเห็นเป็น **** นั่นแหละครับ

read -s -p "Please enter your password" pswd

คำอธิบาย

ถ้าเรารันคำสั่งข้างบนแล้ว จะเห็นข้อความ Please enter your password แสดงออกทางจอภาพ แล้วถ้าผู้ใช้กรอกข้อความกลับมา ข้อความที่ผู้ใช้กรอกมาจะถูกเก็บลงในตัวแปร pswd แต่ผู้ใช้จะไม่เห็นข้อความที่ตัวเองกรอก

ข้อควรระวัง : ในการเขียนโปรแกรม Shell Script ช่องว่าง ตัวใหญ่ ตัวเล็ก มีผลหมดนะครับ ให้ระวังด้วย 

4. nano 

คำสั่ง nano เป็นคำสั่งเอาไว้เปิด text editor ขึ้นมาแล้วเราสามารถเขียน code ในนั้นได้ แล้ว save เป็นไฟล์ .c กรณีเขียนโค้ดภาษา C หรือ .sh กรณีเขียนโค้ดเป็นภาษา bash script  ถ้าต้องการรันให้ใช้คำสั่ง bash ตามด้วยชื่อไฟล์ที่จะรัน.sh  

nano

ตัวอย่างการรัน

bash test.sh

5. การแสดงค่าที่ตัวแปรเก็บไว้ด้วย $

หากต้องการแสดงค่าที่เก็บเอาไว้ในตัวแปร สามารถใช้ $ นำหน้าตัวแปรได้ 

result=19
echo $result

ผลลัพธ์ก็จะได้ 19 

6. การดำเนินการระหว่างตัวแปร

หากเราต้องการบวกเลขแล้วเนี่ย เราไม่สามารถเขียนธรรมดาแบบภาษาอื่นทั่วไปได้แบบ สมมุติว่าผมมีตัวแปร 2 ตัว คือ a=13,b=12 อยากเอา a กับ b มาบวกกันใช่ไหมครับ ถ้าเป็นในภาษา Python ผมก็แค่ print(a+b) ก็จบใช่ไหมครับ แต่ใน Bash Script ไม่สามารถทำได้ครับแบบนี้ ซึ่งวิธีการบวกเลขนั้น ทำได้โดยการ $(($a+$b)) ใส่ $ ไว้ข้างหน้าวงเล็บ 2 วงเล็บนะครับ ย้ำวงเล็บ 2 วงเล็บซ้อนกันนะครับ แล้วเอาค่าในตัวแปรของ a และ b มาบวกกัน 

a=13
b=12
echo $(($a+$b))

7. การใช้งาน if else 

เนื่องจากมันมีหลายเคส ผมจะยกตัวอย่างมาให้ดูเลยละกันครับ

ตัวอย่างการใช้งาน if then else

if [ "foo" = "foo" ]; then
echo expression evaluated as true
else
echo expression evaluated as false
fi

ตัวอย่างการใช้งาน if then

if [ "foo" = "foo" ]; then
echo expression evaluated as true fi

ตัวอย่างการใช้งานร่วมกับตัวแปร

T1="foo"
T2="bar"
if [ "$T1" = "$T2" ]; then
echo expression evaluated as true else
echo expression evaluated as false fi

8. การประกาศ array

สามารถประกาศด้วยคำสั่งง่ายๆ declare -a ชื่ออารเรย์

declare -a square

ในที่นี้ square จะเป็นตัวแปรประเภท array

9. การประกาศฟังก์ชัน

function ex {
echo $1
}

ตัวอย่างการเรียกใช้และผลลัพธ์

ex "World"
>>> World

คำอธิบาย 

ex เป็นชื่อฟังก์ชัน และเราโยน String ของคำว่า “World” เข้าไปในฟังก์ชัน แล้วฟังก์ชันจึงทำงาน โดยการนำ World ไปแทนที่ $1 (หมายถึง พารามิเตอร์ของฟังก์ชันตัวแรกที่ฟังก์ชันต้องไปรับมา เช่นกัน ถ้าเป็น $2 ก็ต้องหมายถึงพารามิเตอร์ตัวที่ 2 ที่ฟังก์ชันต้องไปรับมา) ผลลัพธ์จึงเป็นการปริ้นคำว่า World ออกทางหน้าจอนั่นเองครับ

10. While Loop

การใช้ while loop ก็จะแตกต่างกับภาษาอื่นิดหน่อย แต่แอบคล้ายภาษา C อยู่นะครับ ถ้าใครที่เคยเขียนภาษา C มาบ้างก็จะรู้ ส่วนใครไม่เคยก็ไม่เป็นไรครับ เรามาเริ่มต้นไปด้วยกัน โอเคงั้นเรามาเริ่มดู syntax กันเลย

Syntax

while [ expression ]
do
         commands
          ………….
done

ตัวอย่างการใช้งาน

num=1
while [ $num -le 10 ]
do echo "Loop $num" ((num = $num+1)) done

ผลลัพธ์การรัน

$ ./test.sh
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
Loop 7
Loop 8
Loop 9
Loop 10

11. For Loop

การใช้ for loop จะมี syntax คล้ายๆในภาษา Python มากเลยนะครับ มาลองดู

Syntax

for  var  in  list
do
         commands
          ………….
done

ตัวอย่างการใช้งาน

for i in 1 2 3 4 5
do
 echo "Loop $i"
done

ผลลัพธ์การรัน

$ ./test.sh
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5

คำอธิบาย

จากในตัวอย่างเป็นการแสดงข้อความ “Loop ” ตามด้วยตัวเลข ในเงื่อนไข for นั้น “ i ” จะรับค่าตัวแปรที่อยู่หลัง “ in “ เข้ามาเก็บไว้ในตัวเอง ซึ่งตั้งไว้เป็น “ 1 2 3 4 5 “ มาทีละตัว ( จะใช้ช่องว่างในการแบ่งว่ามีกี่ตัว หรือกี่ argumentในเงื่อนไข ) loop for จะทำการแสดงข้อความตามจำนวน argument ที่อยู่หลัง “ in ” ซึ่งในโปรแกรมกำหนดเป็น “ 1 2 3 4 5 “ ซึ่งมีอยู่ห้าตัว โดยถูกแบ่งด้วยช่องว่าง เมื่อรันโปรแกรมแล้วจะเห็นได้ว่า ข้อความ “ Loop ” ตามด้วยจำนวนตัวเลข ถูกแสดงออกมา 5 บรรทัด โดยที่ตัวเลขนั้นมาจากตัวแปร “ $i ” ที่อยู่ในบรรทัด echo “Loop ” $i นั่นเองครับ

13. การเขียนเงื่อนไขโดยใช้ตัวย่อใน Shell Script

เปรียบเทียบจำนวนเต็ม

เงื่อนไข ความหมาย
int1 –eq int2 เป็นจริงเมื่อ int1 เท่ากับ int2
int1 –ne int2 เป็นจริงเมื่อ int1 ไม่เท่ากับ int2
int1 –gt int2 เป็นจริงเมื่อ int1 มากกว่า int2
int1 –ge int2 เป็นจริงเมื่อ int1 มากกว่า หรือ เท่ากับ int2
int1 –le int2 เป็นจริงเมื่อ int1 น้อยกว่า int2
int1 –lt int2 เป็นจริงเมื่อ int1 น้อยกว่า หรือ เท่ากับ int2


เปรียบเทียบ string

เงื่อนไข ความหมาย
str1 = str2 เป็นจริงเมื่อ str1 เหมือนกับ str2
str1 != str2 เป็นจริงเมื่อ str1 ไม่เหมือนกับ str2
Str เป็นจริงเมื่อ str ไม่เป็นค่าว่าง
-n str เป็นจริงเมื่อ str มีความยาวมากกว่า 0
-z str เป็นจริงเมื่อ str มีความยาวเป็น 0


ตรวจสอบ file

เงื่อนไข ความหมาย
-d filename เป็นจริงเมื่อ filename เป็น directory
-f filename เป็นจริงเมื่อ filename เป็น file
-r filename เป็นจริงเมื่อ filename อ่านได้โดยโปรแกรม
-w filename เป็นจริงเมื่อ filename เขียนได้โดยโปรแกรม
-x filename เป็นจริงเมื่อ filename run ได้โดยโปรแกรม
-s filename เป็นจริงเมื่อ filename มีขนาดไม่เป็น 0


เงื่อนไขอื่นๆ

เงื่อนไข ความหมาย
!expr เป็นจริงเมื่อ exp เป็นเท็จ
exp1 –a exp2 เป็นจริงเมื่อ exp1 และ exp2 เป็นจริง
exp1 –o exp2 เป็นจริงเมื่อ exp1 หรือ exp2 เป็นจริง

 

14. การ Random ใน Shell Script 

การ random นั้น ก็มี syntax ง่ายๆ โดยในที่นี้เราจะใช้คำสั่ง shuf ในการ random มาดู syntax กันเลยครับ 

Syntax

$(shuf -i start-stop -n จำนวนเลขที่จะสุ่มออกมา)

ตัวอย่างการเรียกใช้งาน

rand=$(shuf -i 0-10 -n 1)
echo $rand

คำอธิบาย

จากตัวอย่างข้างบนเป็นการสุ่มเลขตั้งแต่เลข 0 ถึง 10 (0-10) เป็นจำนวน 1 ตัว นั่นเองครับ แล้ว assign ให้กับตัวแปร result เก็บไว้ จากนั้นปริ้นค่าที่เก็บไว้ในตัวแปร result ซึ่งก็คือค่าที่ได้จากการสุ่มออกมาทางหน้าจอด้วยคำสั่ง echo นั่นเองครับ

15. การใช้ square root ใน Shell Script

เนื้อหาตรงนี้อาจจะค่อนข้างทำความเข้าใจยากหน่อยนะครับ เนื่องจากการจะใช้ฟังก์ชันทางคณิตศาสตร์ใน shell ได้ จะต้องพึ่ง library awk นั่นเองครับ แล้วเราจำเป็นต้องใช้ pipeline ในการส่งค่าไปทำงานครับ มาดู syntax กันเลยดีกว่า

Syntax

$(echo "เลข" | awk '{print sqrt($1)}')

ตัวอย่างการใช้งาน

var=25
a=$(echo "$var" | awk '{print sqrt($1)}')
echo $a
echo $(echo "9" | awk '{print sqrt($1)}')

ผลลัพธ์การรัน

5
3

คำอธิบาย

$var เอาค่าในตัวแปร var ส่งต่อให้ $1 ($1 เป็น พารามิเตอร์ ของฟังก์ชัน) ผ่าน | หรือที่เรียกว่า pipeline นั่นเองครับ แล้วเอาไปหา sqrt (square root) แล้วส่งค่ากลับมาที่ตัวแปร a

16. เงื่อนไข Switch Case

คำสั่ง case เป็นคำสั่งที่ใช้ในการเปรียบเทียบเช่นเดียวกับคำสั่ง if แต่มีรูปการทำงานที่ต่างกัน โดยมี syntax ดังนี้

Syntax

case string in
str1)
commands;;
str2)
commands;;
str3)
commands;;
*)
commands;;
esac

ตัวอย่างการใช้ switch มาเปรียบเทียบตัวแปร string

var1="bee"
case $var1 in
"ant")
echo "It is an ant";;
"bee")
echo "It is an bee";;
"cat")
echo "It is an cat";;
*)
echo "I don't know";;
esac

ผลลัพธ์การรัน

$ ./test.sh
It is an bee

ในตัวอย่างแสดงการเปรียบเทียบตัวอักษรของตัวแปร var1 ว่าตรงกับ String ที่เป็นเงื่อนไขของ case หรือไม่ ถ้าเหมือนกันก็ให้แสดงข้อความที่ตั้งไว้ในเงื่อนไง

17. Color echo ใน Shell Script

อเคครับ ก็มาถึงหัวข้อสุดท้ายของวันนี้กันแล้วนะครับ ซึ่งในหัวข้อนี้ผมก็จะมาพานักอ่านทุกท่านแสดงผลข้อความ echo เป็นสีสันสวยงามนั่นเองครับ โดยมีวิธีใช้ ดังนี้

คำสั่ง สีของข้อความ
$(tput setaf 0) สีดำ (Black)
$(tput setaf 1) สีแดง (Red)
$(tput setaf 2) สีเขียว (Green)
$(tput setaf 3) สีเหลือง (Yellow)
$(tput setaf 4) สีฟ้าเข้ม (Blue)
$(tput setaf 5) สีม่วงแดง (Magenta)
$(tput setaf 6) สีฟ้าน้ำทะเล (Cyan)
$(tput setaf 7) สีขาว (White)

Note : จะต้อง Reset สีข้อความกลับไปเป็นสีเดิมทุกครั้งเมื่อ echo หรือปริ้นแล้ว

คำสั่ง reset สีเป็นสีปกติ

$(tput sgr 0)

ตัวอย่างการใช้งาน

 echo "$(tput setaf เลขสี)ข้อความที่ต้องการปริ้น$(tput sgr 0)"

ผลลัพธ์การรัน

18. seq (เทียบเท่ากับ range ใน Python)

แถมให้อีกตัวกับคำสั่ง seq นั้นจะเป็นคำสั่งที่เอาไว้สร้างลิสต์ของตัวเลขใน shell script นั่นเองครับ ยกตัวอย่างเช่น ผมบอกว่า $(seq 0 7) ผมจะได้ [0 1 2 3 4 5 6 7] นั่นเอง ทีนี้มาดูตัวอย่างการใช้งานกันครับ 

Syntax

$(seq start end)

ตัวอย่างการใช้งาน

for i in $(seq 0 7)
do
echo $(tput setaf $i)" $i Hello World"$(tput sgr 0)
done

ผลลัพธ์การรัน

สรุป

ก็จบกันไปแล้วนะครับกับบทความ เขียนโปรแกรม Shell Script Unix (Bash) ง่ายๆใน 10 นาที สำหรับใครที่อ่านจนจบเช่นเคยครับ ยินดีด้วยคุณไม่ต้องดูคลิป indian guy หรือพวกคนอินเดียสอนเขียน shell script แล้วครับ เพราะเนื้อหาที่ผมเอามาให้ทุกท่านอ่านทั้งหมดในวันนี้ ผมรวบรวมมาจากหลายแหล่ง รวมถึงคลิปสอนของชาวอินเดียบางคนด้วย สุดท้ายนี้ก็ขอขอบคุณนักอ่านทุกท่านที่แวะเข้ามาอ่านกันนะครับ แล้วเจอกันบทความหน้า สวัสดีครับ

References

https://linuxhint.com/30_bash_script_examples/

https://flaviocopes.com/bash/