shell script คืออะไร

ใครที่เคยใช้ Linux เคยทำ bah shell หรือ shell scrip มาบ้าง ซึ่งเป็นการการรวบรวมเอาคำสั่งของยูนิกส์มารวมเป็นไฟล์ โดยให้มีการทำงานในหลายรูปแบบเพื่อให้เกิดเกิดทำงานตามที่ผู้ใช้ต้องการ ซึ่งจะมีลักษณะคลายกับการทำงานของDOS ที่เราเรียกว่า Batch File แต่เชลล์คริปต์จะมีความสามารถมากกว่า และมีความยืดหยุ่นสูง คือจะลักษณะและวิธีการเขียนคลายกับการเขียนโปรแกรมภาษาทั่วไปได้ เพื่อสร้างความรวดเร็วในโอกาสต่อไปในวันข้างหน้า

เชลล์คืออะไร

เชลล์เป็นโปรแกรมที่ทำหน้าที่ติดต่อระหว่างผู้ใช้งานและยูนิกส์ ทำให้ผู้ใช้สามารถจะป้อนคำสั่งให้ยูนิกส์รันตามที่ต้องการ โดยจะซ่อนการทำงานของเคอร์เนลไว้เบื้องหลัง ทำให้ผู้ใช้ทำงานได้ง่ายขึ้น เช่นการเปลี่ยนทิศทางข้อมูล โดยใช้ > หรือ ถ้าต้องการจะเชื่อมต่อการทำงานงานของโปรเซสทำได้โดยใช้Pipe(|) หรืออาจจะเป็นภาษาสูง ที่ใช้ ในการเขียนโปรแกรมบนยูนิกส์

ชนิดของเชลล์

  1. sh(Bourne) เชลล์ดั้งเดิมของยูนิกส์
  2. csh,tcsh ซีเชลล์
  3. ksh,pdksh คอร์นเชลล์
  4. bash บอร์นเชลล์
  5. rc เป็นเชลล์ที่มีลักษณะเป็นภาษา C

โครงสร้างของภาษาที่ใช้เขียนเชลล์สคริปด์

ภาษาที่ใช้เขียนเชลล์สคริปด์ นอกจากภาษาที่ใช้การเขียนเชลล์จะง่ายต่อการเข้าใจแล้ว ยังสามารถจะเขียนเชลล์ ในลักษณะของโมดุล จากนั้นค่อยรวมเป็นโปรแกรมที่มีขนาดใหญ่ขึ้น

  • ตัวแปร: เก็บข้อความ ตัวเลข ตัวแปรเชลล์ หรือ พารามิเตอร์
  • ใช้เครื่องหมาย Quoting
  • เงื่อนไข
  • การควบคุมโปรแกรม: if,AND list หรือ OR list,elif,while,until,for,case
  • ใช้คำสั่งจากเชลล์
  • เรียกใช้ฟังก์ชั่น

ตัวแปร

โดยทั่วไปมักจะไม่มีการกำหนดตัวแปรไว้ล่วงหน้า ตัวแปรจะถูกกำหนดเมื่อต้องการ หรือเมื่อกำหนดค่าให้ ตัวแปรนั้น และโดยทั่วไปตัวแปรที่กำหนดขึ้นมาจะเป็นตัวแปรเก็บค่าที่เป็นตัวอักษรโดยอัตโนมัติ ยกเว้นเมื่อกำหนดค่าเป็นตัวเลข เชลล์จึงจะเปี่ยนเป็นค่าเลขนั้น เพื่อนำไปทำงานตามที่ต้องการ เนื่องจากยูนิกส์เป็นระบบ case sensitive ดังนั้นตัวแปร Test,test หรือ TEST จะมีความหมายแตกต่างกัน

ภายในเชลล์ สามารถจะแอ็คเซสค่าตัวแปรโดยใช้เครื่องหมาย $ นำหน้าชื่อตัวแปรนั้นและแสดงค่าตัวแปรด้วยคำสั่ง echo (เมื่อใช้ echo จะต้องนำหน้าตัวแปรด้วยเครื่องหมาย $)
ตัวอย่างของการใช้ตัวแปร

i=10 ให้ i เก็บข้อความ 10
j=1000 ให้ j เก็บข้อความ 1000
s=”This is Shell script” ให้ s เก็บข้อความ
x=1+2 ให้ x เก็บข้อความ 1+2

ตัวอย่างของเชลล์สคริปต์

#!/bin/sh
# This is First shell script
#
i=30
j=20
echo “Program Adder by Shell Script”
r=$(($i + $j))
echo “$i + $j = $r”

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

จากโปรแกรมตัวอย่างข้างบนถ้าหากสั่งให้โปรแกรมประมวลผลจะได้ผลการทำงานเป็นดังนี้

Program Adder by Shell Script
30 + 20 = 50

จะเห็นว่าเชลล์สคริปต์มีความสามรถในการคำนวณและแสดงผลได้คำสั่งเบื้องต้นของ Shell Script

คำสั่งรับข้อมูลแผ่นแป้นพิมพ์

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

โดยมีรูปแบบดังนี้

read ตัวแปร

ในการรับข้อมูลแต่ละครั้งจะรับได้ครั้งละ 1 ตัวเท่านั้น

ตัวอย่างการใช้คำสั่งรับข้อมูล

read a
หมายความว่า รับข้อมูลจากแป้นพิมพ์แล้วนำมาเก็บไว้ในตัวแปร a
read Ans
หมายความว่า รับข้อมูลจากแป้นพิมพ์แล้วนำมาเก็บไว้ในตัวแปร Ans
read str
หมายความว่า รับข้อมูลจากแป้นพิมพ์แล้วนำมาเก็บไว้ในตัวแปร str

คำสั่งในการแสดงผลทางจอภาพ

ในเชลล์สคริปต์จะมีคำสั่งในการแสดงผลทางจอภาพ คือ คำสั่ง echo ซึ่งเราสามารถจะแสดงที่เป็นค่าคงที่หรือเป็นตัวแปรก็ได้ โดยข้อความหรือตัวแปรจะอยู่ระหว่างเครื่องหมาย (DOUBLE QUOTE) หรือไม่มีก็ได้ โดยจะมีความแตกต่างกันเล็กน้อยระหว่างมีเครื่องหมาย ” กับไม่มีเครื่องหมาย ”

รูปแบบของคำสั่ง echo

echo ตัวแปร
echo ค่าคงที่
echo “ตัวแปร”
echo “ค่าคงที่”

ในคำสั่ง echo จะมี option ประกอบดังนี้

-n หมายถึง พิมพ์ข้อมูลเสร็จแล้วไม่ต้องขึ้นบรรทัดใหม่
-e หมายถึง อนุญาตให้ใช้เครื่องหมายพิเศษเศษได้

  • เครื่องหมายพิเศษ

\a หมายความว่า จะมีแสดงดังออกมาจากลำโพง\b หมายความว่า จะพิมพ์เครื่องช่องว่างออกทางจอภาพ\c หมายความว่า จะพิพม์โดยไม่สนใจเครื่องหมายขึ้นบรรทัดใหม่\f หมายความว่า พิมพ์เสร็จให้เลื่อนเคอร์เซอร์ไปต้นบรรทัด\n หมายความว่า พิมพ์ข้อความเสร็จแล้วให้ขึ้นบรรทัดใหม่\r หมายความว่า พิมพ์เสร็จให้ส่งเครื่องหมาย ENTER ด้วย\t หมายความว่า ในการพิมพ์ให้มีการจัดแท็บก่อนพิมพ์ในแนวนอน\v หมายความว่า ในการพิมพ์ให้มีการจัดแท็บก่อนพิมพ์ในแนวตั้ง\\ หมายความว่า ให้พิมพ์เครื่องหมาย \ ออกทางจอภาพ\nnn หมายความว่า ให้พิมพ์ตัวอักษรจากรหัสแอสกี้(ASCII) โดยที่ nnn อยู่ในรูปเลขฐานแปด

ตัวอย่างการใช้คำสั่ง echo ในรูปแบบต่าง ๆ

echo This is String
str=”This is String”
echo $str
echo “This is String”
echo “$str”

จากคำสั่งข้างบนจะได้ข้อความคำว่า This is String ออกมา 4 บรรทัดดังนี้

This is String
This is String
This is String
This is String

ตัวอย่างการใช้คำสั่ง echo ในรูปแบบที่มีการใช้ option

echo -n This is String
str=”This is String”
echo -n $str
echo “This is String”
echo “$str”

จากคำสั่งข้างบนจะได้ข้อความคำว่า This is String ออกมา 2 บรรทัดดังนี้

This is String This is String This is String
This is String

ตัวอย่างการใช้คำสั่งรับข้อมูลและแสดงข้อมูลด้วยกัน

#!/bin/sh
#First Program Shell
#
echo -n “Please enter name : ”
read name
echo “Hello $name”

การทำงานของโปรแกรม

  • โปรแกรมจะพิมพ์คำว่า Please enter name: ออกทางจอภาพและจะไม่ขึ้นบรรทัดใหม่
  • รับข้อมูลจากแป้นพิมพ์ แล้วเก็บไว้ในตัวแปร name โดยเคอร์เซอร์จะรอรับต่อจากเครื่องหมาย :
  • โปรแกรมจะพิมพ์คำว่า Hello และ ตามด้วยข้อมูลที่เราป้อนเข้าไปตัวอย่างเช่น ถ้าเราป้อนคำว่า Somsri ก็จะได้ผลเป็นดังนี้Hello Somsri

การสั่งให้สคริปต์ทำงาน

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

  1. สั่งให้ทำงานโดย เชลล์โดยตรง
  2. สั่งให้ทำงานโดยเปลี่ยนโหมดการทำงาน

1. สั่งทำงานโดยตรง

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

$shตามด้วยชื่อไฟล์ที่เราสร้างขึ้นในขั้นตอนการเขียน เช่นเรามีชื่อไฟล์ test.txt สามารถสั่งได้ดังนี้

$sh test.txt

หมายความว่า เราเรียกใช้โปรแกรม shซึ่งเป็นตัวแปรภาษาเชลล์ขึ้นมาตีความหมายพร้อมกับทำงานตามคำสั่งที่อยู่ในไฟล์ test.txt ชึ่งเป็นคำสั่งของเชลล์คริปต์ตามที่เราได้เขียนไว้

วิธีการสั่งแบบนี้จะไม่สนในบรรทัดแรก หรือบรรทัดที่มีข้อความ #!/bin/sh เพราะเราเรียกใช้โปรแกรมเชลล์โดยตรง แต่การเรียกใช้เราจะต้องพิมพ์คำว่า shเสมอ มิฉะนั้นจะไม่เกิดผลอะไรเลยกับโปรแกรมเพราะยูนิกส์ไม่สามารถตีความหมายได้ และเกิดข้อความผิดผลาดในการใช้คำสั่งภายในโปรแกรมเอง

2. สั่งทำงานโดยเปลี่ยนโหมดการทำงาน

วิธีนี้จะแตกต่างจากวิธีแรกอยู่หลายขั้นตอน แต่ในขั้นตอนการตีความหมายและวิธีการการทำงานของคำสั่งต่าง ๆ จะให้ผลการทำงานเหมือนกันทั้งสองวิธี

มีขั้นตอนดังนี้

  1. ทำการเปลี่ยนสิทธิ(Permision)การใช้ไฟล์ให้สามารถ Execute ได้ โดยใช้คำสั่ง chmod
  2. สั่งให้โปรแกรมทำงานโดยเรียกชื่อไฟล์นั้น

ตัวอย่าง มีไฟล์ชื่อ test.sh
ใช้คำสั่งดังนี้
เปลี่ยน Permision ให้สามารถรันได้ในระบบ UNIX
$chmod +x test.sh
แล้วสังให้โปรแกรทำงาน
$test


คำสั่งวนลูป for

ในเชลล์สคริปต์จะมีลักษณะการทำงานเหมือนกับภาษาสูงทั่วไป อย่างหนึ่งคือการทำงานเป็นลูป ซึ่งการทำงานจะมีลักษณะที่คล้ายกันกับภาษาทั่ว ๆ ไปแต่จะแตกต่างกันในเรื่องรูปแบบของการเขียนเท่านั้น

รูปแบบคำสั่ง for
for variable in lists
do
    statement
done

ตัวอย่าง

	for  i  in 1 2 3 4 5 6 7 8 9 10
	do
		echo $i
	done

	for  i  in A B C D E F G H
	do
		echo $i
	done

ในบางครั้งสามารถที่จะแสดงข้อมูลในไฟล์ข้อมูลที่เป็น Text file ได้ดังต่อย่างต่อไป

ในแฟ้มข้อมูล test.txt มีข้อมูลดังนี้

	Pen
	Table
	Book
	Rubble
	Dest
	Ink
	Chair
	Ruler

เราสามารถเขียนให้ Shell script ได้ดังนี้

	#!/bin/sh
	for t in $((cat test.txt))
	do
		echo $t
	done

คำสั่งวนลูป while

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

รูปแบบคำสั่ง while

while [ condition ]
do
    statement
done

คำสั่งวนลูป until

รูปแบบคำสั่ง until

until [ condition ]
do
    statement
done

คำสั่งวนลูป case

รูปแบบคำสั่ง case

case word   in
[ pattern,[ | pattern …] )
    statement;;
esac

  1. ยังไม่มีความเห็น
  1. No trackbacks yet.

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: