js

วันเสาร์ที่ 22 ตุลาคม พ.ศ. 2559

การใช้งานshell เบื่องต้น และ คำสั่ง linux




       
Page 1

Application

Shell

Kernel

Hardware

การใช้ Shell Script เบืองต้น

โครงสร้างพืนฐานการทํางานของระบบ UNIX มีอยู่ 4 ส่วนด้วยกัน คือ Hardware, Kernel,

Shell และ Application ดังรูป

Shell คือ โปรแกรมหนึงบนระบบ UNIX ทีทําหน้าทีเป็น interface ระหว่าง user กับ UNIX

(Kernel) user สามารถสังงาน UNIX ได้โดยผ่านทาง Shell เท่านัน โปรแกรม Shell ยังมีคุณสมบัติ

ของ Shell Programming Language ทําให้ user สามารถนําคําสังต่างๆของ Shell มาเขียนเป็น

โปรแกรมเก็บเป็นไฟล์ไว้ได้ เรียกว่า Shell Script



Page 2

Shell ทีนิยมใช้ในปัจจุบัน

• Bourne shell (/bin/sh) เป็น shell ในยุคแรกๆ ที มีใช้กันอย่างแพร่หลาย มีการกําหนด

โครงสร้างภาษาคล้ายๆ กับภาษาอัลกอ (Algo) สามารถเขียน shell script ได้ และยังเป็น

starndard shell ทีมีใน UNIX ทุกตัว และยังสามารถย้าย shell script ไปยัง UNIX ระบบอืน

โดยไม่ต้องแก้ไขอะไรได้อีกด้วย จะมี default prompt เป็นเครื องหมาย “ $ ”

• C shell (/bin/csh) เป็น shell ที พัฒนาขึนมาหลังจาก Bourne shell มีรูปแบบคําสังและ

ไวยากรณ์เหมือนกับภาษา C มี function การทํางานหลายที ดีและอย่างสะดวก อีกทังยัง

สามารถควบคุมการไหลของข้อมูล ได้ดีกว่า Bourne shell และยังมีความสามารถในการ

เรียกใช้คําสังทีใช้ไปแล้ว จะมี default prompt เป็นเครืองหมาย “ % ”

• Korn shell (/bin/ksh) เป็น shell ที พัฒนามาจาดต้นแบบของ Bourne shell และ C shell

สามารถทํางานใน function ของ Bourne shell ได้ทุกอย่าง การเขียน shell script ทําได้ง่าย

และรัดกุมขึน สามารถนําคําสังทีใช้ไปแล้วกลับมา execute ไปใหม่ได้ ถือได้ว่า Korn

shell เป็นการรวมเอาข้อดีของ Bourne shell และ C shell มาไว้ด้วยกัน แต่ไม่ได้มีใน

UNIX ทุกตัว จะมี default prompt เป็นเครื องหมาย “ $ ”

• Bourne again shell (/bin/bash หรือ /usr/local/bin/bash) เป็นการเอา Bourne shell

นํากลับมาพัฒนาใหม่ สามารถทํางานแบบ line editing ได้ และยังได้เพิมประสิทธิภาพใน

การทํางานอีกหลายอย่าง bash shell นีไม่ใช่ standard UNIX shell แต่เป็น default shell ของ

linux ในปัจจุบัน จะมี default prompt เป็นเครื องหมาย “ $ ”





Page 3

Hello World

Shell script เป็นไฟล์เท็กซ์ธรรมดาสามารถสร้างด้วย editor ชนิดไหนก็ได้ เช่น vi, nano,

gedit, emacs เป็นต้น

การเข้าใช้งาน vi ( ใน prompt )

Syntax $ vi filename

Example การเขียน shell script ใน vi ( ชื อไฟล์ hello.bash)

การทีจะรันสคริปต์ได้ต้องทําให้ไฟล์ทีสร้างขึนมาสามารถกระทําการได้ ถ้าดูไฟล์ด้วย

คําสัง “ ls –l hello.bash “ (สมมติให้ไฟล์ชื อว่า hello.bash) จะเห็นว่าสิทธิการใช้ไฟล์จะเป็น –rw-r-

xr-x ซึงหมายความว่า ไฟล์นันยังไม่สามารถกระทําการได้ การที จะทําให้ไฟล์นันสามารถกระทํา

การได้ ต้องใช้คําสัง chmod กําหนดสิทธิให้ไฟล์นันเสียก่อน

การเรียกดูสิทธิในการเข้าถึงไฟล์ และ การกําหนดสิทธิให้กับไฟล์ ( ใน prompt )

Syntax $ ls –l filename และ $ chmod [ u / g / o ] [ + / - ] [ r / w / x] filename

Example การใช้คําสั ง ls -l และ chmod



Page 4

ถ้าดูไฟล์ด้วยคําสัง “ ls –l hello.bash “ จะเห็นว่าสิทธิการใช้ไฟล์เปลี ยนเป็น -rwxr-xr-x.

ซึงหมายความว่า ไฟล์นันสามารถกระทําการได้แล้ว (x = ก็คือการexecutable นันเอง).

การรัน shell script ( ใน prompt )

Syntax $ . / filename

Example การรัน File hello.bash

การรัน shell script แบบอื น ( ใน prompt )

yntax

$ . hello.bash หรือ $ bash hello.bash

Example การรัน File hello.bash



Page 5

ตัวแปร ( variable )

เชลล์สคริปต์เหมือนกับโปรแกรมทัวๆไปลที มีตัวแปรไว้เก็บค่าต่างๆ สําหรับใช้งาน ตัว

แปรที ใช้ในเชลล์นันไม่จําเป็นต้องประกาศชนิดตัวแปรเหมือนกับภาษาซี สามารถตังค่าแล้ว

นําไปใช้ได้ทันที รูปแบบการตังค่าตัวแปร

รูปแบบการตังตัวแปร ( ใน vi )

Syntax variable = value

Example การสร้างตัวแปร

ข้อควรระวังคือในการใช้ตัวแปร คือในช่วงก่อนหน้าและหลังเครื องหมาย ”=” ห้ามมี

ช่องว่าง เพราะเชลล์ถือว่าช่องว่าคือตัวแบ่ง argument

การเรียกใช้ตัวแปร ( ใน vi )

Syntax $ variable

Example การเรียกใช้ตัวแปร

เวลาที จะต้องการแสดงค่าให้ใช้เครื อง”$”นําหน้าตัวแปร



Page 6

เครื องหมาย Quote ( ‘ ) และ Double quote ( “ ) ช่องว่างในเชลล์นันถือว่าเป็นตัวแบ่ง

อาร์กิวเมนต์ ถ้าต้องการตังค่าตัวแปรทีมีช่องว่าง ให้ใช้เครืองหมาย Quote ( ‘ ) หรือDouble quote

( “ ) คล่อมคําที ต้องการ

การตังค่าตัวแปรที มีช่องว่าง ( ใน vi )

Syntax variable=’value’ or variable=”value”

Example การตังค่าตัวแปร

การตังค่าตัวแปรพร้อมการเรียกใช้

Example File testvariable.bash



Page 7

ผลลัพธ์ที ได้

ความแตกต่างระหว่าง Quote ( ‘ ) และ Double quote ( “ ) คือสิงที พิมพ์ใน เครื องหมาย

Quote ( ‘ ) จะมีค่าตามสิงที พิมพ์ ส่วนในเครื องหมาย Double quote ( “ ) จะเป็นการอ้างอิงนํา

ผลลัพธ์ทีตัวแปรเก็บไว้หรือค่าทีตัวแปรเก็บไว้มาใช้



Page 8

ตัวแปรสภาพแวดล้อม ( environment variable )

ตัวแปรที ใช้ในเชลล์จะมีสองชนิดด้วยกัน คือ 1.ตัวแปรธรรมดา และ 2.ตัวแปร

สภาพแวดล้อม (environment variable) ตัวแปรสภาพแวดล้อมนันคล้ายกับตัวแปรธรรมดาแต่

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

สภาพแวดล้อมไปด้วย

เราสามารถสร้างตัวแปรธรรมดาให้เป็นตัวแปรสภาพแวดล้อมได้ โดยการใช้คําสัง export.

การตังตัวแปร ( ใน vi )

Syntax variable = value

Example การสร้างตัวแปรใน File testenvironment.bash



Page 9

การเปลี ยนตัวแปรธรรมดาให้เป็นตัวแปรสภาพแวดล้อม ( ใน prompt )

Syntax $ export variable

Example การเปลี ยนตัวแปร ENV ให้เป็นตัวแปรสภาพแวดล้อมใน prompt

จะเห็นได้ว่าผลลัพธ์นันต่างกัน เพราะ การรัน shell script แบบแรกจะเป็นการเรียก shell

(สร้างโปรเซสใหม่) และ shell ตัวใหม่จะเป็นตัวกระทําการ shell ตัวใหม่นีคือ #!/bin/bash ที เขียน

ใน file testenvironment.bash บรรทัดแรก shell (โปรแกรม) ที เกิดใหม่สืบทอดตัวแปร

สภาพแวดล้อม ENV มาด้วยทําให้แ สดงผลได้ แต่ไม่สามารถแสดงค่าของตัวแปร VAR ได้เพราะ

ตัวแปร VAR ไม่ใช่ตัวแปรสภาพแวดล้อมจึงไม่สามารถสืบทอดค่าที อยู่ในตัวแปรไปใช้ใน

โปรแกรมอื นได้

ส่วนการรัน แบบทีสองใช้การรันแบบ “.” (dot) เป็นการใช้shell ทีทํางานอยู่ในปัจจุบัน

อ่านไฟล์ testenvironment.bash จึงสามารถแสดงค่าของตัวแปรทังสองตัวได้

เราสามารถรู้ได้ว่ามีตัวแปรสภาพแวดล้อมอะไรบ้างที อยู่ในระบบ โดยการใช้คําสัง export ซึงเป็น

คําสังเดียวกันกับที ใช้ประกาศตัวแปรสภาพแวดล้อม



Page 10

การดูตัวแปรสภาพแวดล้อมที อยู่ในระบบ ( ใน prompt )

Syntax $ export

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

ถ้าต้องการเปลี ยนตัวแปรสภาพแวดล้อมเป็นตัวแปรธรรมดาสามารถทําได้โดยใช้ option –n

ต่อท้ายคําสัง export

การเปลี ยนตัวแปรสภาพแวดล้อมเป็นตัวแปรธรรมดา ( ใน prompt )

Syntax $ export –n variable

ตัวแปรพิเศษ( environment variable )

ตัวแปรพิเ ศษเหล่านีโดยปรกติเชลล์จะเตรียมตัวแปรเหล่านีไว้ให้อยู่แล้วไม่ต้องสร้างเอง

และมักจะเป็นตัวแปรทีไม่สามารถเปลียนค่าได้(read-only)

ตัวแปรพิเศษทีน ิยมใช้กันบ่อยๆ

$0 $1 $2 ....

ใช้สําหรับอ้างอิงชื อ shell script และ Argument ของ shell script เรียกว่า

position parameter

$#

ใช้บอกจํานวน Argument ทีอยู่ใน shell script นันๆ

$*

แทน Argument ของ script เรียงกัน ทังหมด

$@

คล้ายกับ $* แต่จะใช้ช่องว่างคัน ระหว่าง position parameter

$?

ใช้แสดงสถานการณ์จบการทํางานครังสุดท้าย ถ้าสั งได้ถูกต้องไม่มีerror จะ

แสดงค่า 0 ออกมา แต่ถ้าผิดพลาดจะแสดงค่าที ไม่ใช่ 0 ออกมา

ตัวแปรพิเศษทีน ิยมใช้กันบ่อยๆ

$!

ใช้แสดง process ID ของ shell ที ทํางานอยู่

$hostname ใช้แสดงชื อเครื องทีกําลังใช้งานอยู่

$pwd

ใช้แสดง directory ที ทํางานอยู่

$oldpwd

ใช้แสดง directory ก่อนหน้า directory ปัจจุบัน

$randow

ใช้ในการสุ่มตัวเลข ตังแต่ 0 ถึง 32767

$home

ใช้แสดงชื อ home directory



Page 11

หมายเหตุ ( comment )

เครื องหมาย “ # ” ใช้แสดงหมายเหตุ เขียนไว้ตรงไหนในเชลล์สคริปต์ก็ได้ (ยกเว้นบรรทัด

แรก) ใช้สําหรับการเขียนบันทึกใน script โดย shell จะถือว่าข้อความทีอยู่หลังเครืองหมาย “ # ”

เป็นหมายเหตุไม่มีผลต่อตัวโปรแกรม

การใช้เครื องหมาย “ # ” ในการ comment ( ใน vi )

Syntax # text

Example File testcomment.bash

ผลลัพธ์ที ได้

จะเห็นได้ว่าข้อความทีอยู่หลังเครืองหมาย “ # “ ไม่มีผลใดๆทังสินเมือรันโปรแกรม เมือรัน

โปรแกรม โปรแกรมจะไม่แสดงข้อความที comment นันออกมา



Page 12

ตัวแปรแถวลําดับ ( array variable )

ตัวแปร array นันจะมี index เป็นตัวเลขเริมตังแต่ 0 เหมือนกับตัวแปรในภาษา C หรือ

ภาษาอืนๆ แต่เวลาทีต้องการเรียกใช้ตัวแปรต้องใช้เครืองหมาย “{ }” ช่วยจับกลุ่มด้วย เพราะ

ไม่เช่นนันค่าที ออกมาจะออกมาเฉพาะค่าแรกเท่านัน ดูได้จากตัวอย่าง

รูปแบบการใช้ตัวแปร array ( ใน vi )

Syntax variable[index]=value

Example File testarray.bash

ผลลัพธ์ที ได้



Page 13

เราสามารถประกาศตัวแปรพร้อมกับการตังค่าไปในตัวได้ ดังตัวอย่างต่อไปนี

รูปแบบการใช้ตัวแปร array ( ใน vi )

Syntax variable=(value value value value)

Example File testarray2.bash

ผลลัพธ์ที ได้

จะเห็นได้ว่าสามารถใช้ได้เหมือนกันกับการใช้แบบ index



Page 14

test และ expression

ใน bash และ ksh จะมีคําสัง test และการเขียนเงื อนไขในการตรวจสอบ expression ต่างๆ

ในการเขียนประโยคเงื อนไข

การใช้คําสั ง test ( ใน vi )

Syntax test expression หรือ [ expression ]

Expression

คําสังเกียวกับจํานวนเต็ม

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



Page 15

คําสังเกียวกับ Logical อืนๆ

!expr

เป็นจริงเมือ exp เป็นเท็จ

exp1 –a exp2

เป็นจริงเมือ exp1 และ exp2 เป็นจริง

exp1 –o exp2

เป็นจริงเมือ exp1 หรือ exp2 เป็นจริง

การใช้เงื อนไข ( if )

คําสัง if เป็นคําสังที ใช้ในการเปรียบเทียบ

รูปแบบคําสั ง if ( ใน vi )

Syntax

if [ expression ]

then

commands

elif [ expression ]

then

commands

else

commands

fi

Example File testif.bash



Page 16

ผลลัพธ์ที ได้

ในตัวอย่างแสดงการเปรียบเทียบตัวอักษรของตัวแปร text1 กับ text2 ว่าเหมือนกันหรือไม่

ถ้าเหมือนกันให้แสดงข้อความว่า “ YES, it equal ” หรือถ้าต่างกันให้แสดงข้อความว่า “ No, it

not equal ” ทังนีเงื อนไข if จะมี หรือ ไม่มี elif กับ else ก็ได้

การใช้เงื อนไข ( case หรือ switch )

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

ต่างกัน

รูปแบบคําสั ง case ( ใน vi )

Syntax

case string in

str1)

commands;;

str2)

commands;;

str3)

commands;;

*)

commands;;

esac

Example File testcase.bash



Page 17

ผลลัพธ์ที ได้

ในตัวอย่างแสดงการเปรียบเทียบตัวอักษรของตัวแปร text ว่าตรงกับ string ทีเป็นเงือนไข

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



Page 18

การใช้ loop while

คําสัง while เป็นคําสังที ใช้ในการวนรอบการทํางานของโปรแกรม โปรแกรมจะวนรอบ

จนกว่าเงือนไขทีกําหนดไว้จะเป็นเท็จ

รูปแบบคําสั ง while ( ใน vi )

Syntax

while [ expression ]

do

commands

………….

Done

Example File testwhile.bash

ผลลัพธ์ที ได้



Page 19

ในตัวอย่างเป็นการแสดงข้อความ “ Hello World ” 10 บรรทัด โดยให้ต ัวแปร num มีค่า

เป็น 1 ต่อจากนันก็เข้าสู่ loop while โดยมีเงื อนไขว่า $num น้อยกว่าหรือเท่ากับ 10 loop while จะ

ทําการแสดงข้อความ “ Hello World ” โดยวนรอบการทํางานไปเรื อยๆ และจะทําการเพิมค่า num ที

ละ 1 ก่อนจะวนรอบใหม่ เมือโปรแกรมวน loop ครบตามเงือนไขแล้ว จะได้ผลลัพธ์เป็นการแสดง

ข้อความ “ Hello World ” 10 บรรทัด

การใช้ loop for

คําสัง for เป็นคําสังทีมีการทํางานคล้ายคลึงกับ คําสัง while แต่จะต่างกันตรงทีการเขียน

เงือนไขทีใช้ในการวน loop

รูปแบบคําสั ง for ( ใน vi )

Syntax

for var in list

do

commands

………….

Done

Example File testfor1.bash



Page 20

ผลลัพธ์ที ได้

ในตัวอย่างเป็นการแสดงข้อความ “Hello World ” ตามด้วยตัวเลข ในเงื อนไข for นัน “ i ”

จะรับค่าตัวแปรที อยู่หลัง “ in “ เข้ามาเก็บไว้ในตัวเอง ซึงตังไว้เป็น “ 1 2 3 4 5 “ มาทีละตัว ( จะใช้

ช่องว่างในการแบ่งว่ามีกีตัว หรือกี argumentในเงือนไข ) loop for จะทําการแสดงข้อความตาม

จํานวน argument ที อยู่หลัง “ in ” ซึงในโปรแกรมกําหนดเป็น “ 1 2 3 4 5 “ ซึงมีอยู่ห้าตัว โดยถูก

แบ่งด้วยช่องว่าง เมื อรันโปรแกรมแล้วจะเห็นได้ว่า ข้อความ “ Hello World ” ตามด้วยจํานวน

ตัวเลข ถูกแสดงออกมา 5 บรรทัด โดยทีตัวเลขนันมาจากตัวแปร “ $i ” ทีอยู่ในบรรทัด echo

“Hello World ” $i นันเอง Loop for สามารถเขียนได้อีกอย่างหนึงดังนี



Page 21

ผลลัพธ์ที ได้

จะเห็นไดว่าเงื อนไขนันสามารถเขียนได้เหมือนในภาษา C เพียงแต่ต้องใส่วงเล็บเพิมเข้าไป

อีกชันหนึง

บทความที่เกี่ยวข้อง
 Windows 7 ในโลกของ Linux

ไม่มีความคิดเห็น:

แสดงความคิดเห็น