เชลล์สคริปต์เบื้องต้น ตอนที่ 2
www.tanabutr.co.th/photobook
ต่อจากตอนที่ 1.
รันเชลล์สคริปต์
วิธีการรันเชลล์สคริปต์เหมือนเป็นเรื่องที่ไม่ต้องสอนกันแต่คนเริ่มต้นใหม่ๆอาจจะตกหลุมได้ง่ายๆ. ถ้าคุณมีเชลล์สคริปต์อยู่ในไดเรกทอรีที่ทำงานอยู่แล้วรันเชลล์สคริปต์เหมือนกับคำสั่งทั่วๆไปอาจจะเกิดข้อผิดพลาดได้.
$ hello.sh -bash: hello.sh: command not found $ ./hello.sh Hello world!
อันนี้เป็นเพราะไดเรกทอรีปัจจุบันซึ่งได้แก้เครื่องหมาย "." ไม่ได้อยู่ในตัวแปรสภาพแวดล้อม (environment variable) PATH.
$ echo $PATH /bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/3.3:/opt/Acro bat5:/usr/X11R6/bin:/opt/blackdown-jdk-1.4.1/bin:/opt/blackdown-jdk-1.4.1/jre/bin: /usr/qt/3/bin:/usr/kde/3.2/bin:/usr/kde/3.1/bin:/opt/vmware/bin:/home/poonlap/bin
ตัวแปรสภาพแวดล้อม PATH เป็นตัวแปรที่เก็บไดเรกทอรีต่างๆขั้นด้วยเครื่องหมาย : บอกให้เชลล์รู้ว่าโปรแกรมที่ใช้ได้อยู่ในระบบอยู่ในไดเรกทอรีเหล่านี้. กล่าวคือเชลล์จะใช้ตัวแปรสภาพแวดล้อม PATH ในการหาว่าคำสั่ง (โปรแกรม) อยู่ที่ไหน. ดังนั้นถ้ารันเชลล์สคริปต์โดยไม่ใส่เครื่องหมาย "./" จะหมายความว่า "hello.sh" เป็นโปรแกรมคำสั่งที่อยู่ในไดเรกทอรีที่กำหนดไว้ในตัวแปรสภาพแวดล้อม PATH ซึ่งจริงๆแล้ว "." (ไดเรกทอรีปัจจุบัน) ไม่ได้อยู่ใน PATH จึงต้องอ้างอิงสคริปต์โดยใช้ relative path คือ "./" บอกกับเชลล์ว่า hello.sh อยู่ที่นี่ (ไดเรกทอรีที่ทำงานอยู่).
อีกวิธีหนึ่งสำหรับการรันเชลล์สคริปต์ซึ่งไม่ค่อยทำกันได้แก่
$ sh hello.sh Hello world! $ . hello.sh Hello world!
อันนี้จะเป็นการเรียกใช้โปรแกรม sh ซึ่งก็คือ bash แปลคำสั่งที่อยู่ในไฟล์ hello.sh ก็คือการรันสคริปต์นั่นเอง. ส่วนแบบที่สองคือการใช้คำสั่ง "." อ่านเนื้อหาในไฟล์ hello.sh แล้วตีความ.
ตัวแปร
เชลล์สคริปต์เหมือนกับโปรแกรมทั่วไปที่มีตัวแปรไว้เก็บค่าต่างๆ. ตัวแปรที่ใช้ในเชลล์ไม่ต้องประกาศประเภทตัวแปรเหมือนภาษาซีและสามารถตั้งค่าใช้ได้ทันที. การตั้งค่าตัวแปรจะมีรูปแบบเป็น.
ชื่อตัวแปร=ค่าตัวแปร
ข้อควรระวังคือช่วงก่อนหน้าและหลังเครื่องหมายเท่ากับห้ามมีช่องว่าง เพราะเชลล์ถือว่าช่องว่าคือตัวแบ่งอาร์กิวเมนต์. ตัวอย่างการสร้างตัวแปรเช่น
var1=Hello var2=world!
เวลาต้องการแสดงค่าให้ใช้เครื่องหมายดอลล่าร์นำหน้าตัวแปร.
echo $var1 $var2
Quote และ Double quote
ช่องว่าง (space) มีความหมายพิเศษสำหรับเชลล์ไว้สำหรับแบ่งอาร์กิวเมนต์. ดังนั้นถ้าต้องการตั้งค่าตัวแปรที่มีช่องว่าอยู่เช่น "Hello world!" ตัวใช้เครื่องหมายคำพูด quote (') หรือ double quote (") คล่อมคำที่ต้องการ.
var3='Hello world!' var4="Hello world!"
ความแตกต่างระหว่าง quote และ double quote คือสิ่งที่พิมพ์ใน quote จะมีค่าตามสิ่งที่พิมพ์. ในเครื่องหมาย double quote สามารถอ้างอิงค่าตัวแปรหรือนำผลลัพธ์ของคำสั่งอื่นมาใส่ได้.
var5='$var1 $var2' var6="$var1 $var2"
ตัวอย่างเชลล์สคริปต์ต่อไปนี้สาธิตการสร้างตัวแปรและแสดงความแตกต่างระหว่าง quote กับ double qoute.
#!/bin/sh var1=Hello var2=world! var3='Hello world!' var4="Hello world!" var5='$var1 $var2' var6="$var1 $var2" echo $var1 $var2 echo $var3 echo $var4 echo $var5 echo $var6
รันได้ผลเป็นแบบนี้.
$ ./var.sh Hello world! Hello world! Hello world! $var1 $var2 Hello world!