เชลล์สคริปต์เบื้องต้น ตอนที่ 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!