shell script

23
SHELL SCRIPT 357362 – Special Problems in Electronics Asst. Prof. Dr. Choopan Rattanapoka

Upload: liluye

Post on 15-Jan-2016

80 views

Category:

Documents


0 download

DESCRIPTION

Shell SCRIPT. 357362 – Special Problems in Electronics Asst. Prof. Dr. Choopan Rattanapoka. Introduction to Shell Script. คำสั่งต่างๆ ที่พิมพ์บน Shell ใน Linux นั้นสามารถจะนำหลายๆคำสั่งมาทำงานต่อเนื่องกันได้ โดยการเขียนโปรแกรมที่เรียกว่า “Shell Script” - PowerPoint PPT Presentation

TRANSCRIPT

SHELL SCRIPT357362 – Special Problems in Electronics

Asst. Prof. Dr. Choopan Rattanapoka

Introduction to Shell Script

คำ��สั่��งต่�งๆ ที่��พิ�มพิ�บน Shell ใน Linux น��นสั่�ม�รถจะน��หล�ยๆคำ�� “สั่��งม�ที่��ง�นต่อเน��องกั�นได้" โด้ยกั�รเขี�ยนโปรแกัรมที่��เร�ยกัว่� Shell

Script” ซึ่)�งกั�รที่��ง�นบ�งอย�งอ�จจะม�กั�รเร�ยกัใช้"ง�นหล�ยคำ��สั่��ง shell

script จะช้ว่ยลด้เว่ล�เหล�น��นด้"ว่ยกั�รรว่มคำ��สั่��งและเร�ยกัใช้"ง�นเพิ�ยงคำ��สั่��งเด้�ยว่

Shell script เหม�อนกั�บกั�รเขี�ยนโปรแกัรมที่��ว่ไป คำ�อ ม�กั�รร�บคำ�ได้" และในต่�ว่คำ��สั่��งจะม�กั�รที่��เง��อนไขี และกั�รที่��ซึ่���

สั่��หร�บ BASH ถ"�จะที่�� shell script บรรที่�ด้แรกัจะต่"องช้��ต่��แหนง ที่��อย+ขีอง bash “ถ"�ที่��อย+ได้"ด้"ว่ยคำ��สั่��ง which bash”

ถ"� bash อย+ที่�� /bin/bash บรรที่�ด้แรกัขีอง shell script จะใสั่ #!/bin/bash

เร��มต่"นเขี�ยน shell script

คำ��สั่��ง date ใช้"สั่��หร�บด้+ว่�นเว่ล� คำ��สั่��ง whoami ใช้"สั่��หร�บด้+ช้��อผู้+"ใช้"ที่��กั��ล�งใช้"ง�น คำ��สั่��ง du –s ช้��อdirectory ด้+เน��อที่��กั�รใช้"ง�นรว่มขีอง

directory ต่"องกั�รสั่ร"�ง shell script ช้��อ report เพิ��อร�ยง�นขี"อม+ลด้�งน��

Current date time : ว่�นเว่ล�ที่��ได้"จ�กัคำ�� สั่��ง date

User logged in : username ที่��ได้"จ�กัwhoamiHarddisk usage : คำ�ที่��ได้"จ�กั du -s

ต่�ว่แปรใน shell

ใน shell จะสั่�ม�รถประกั�ศต่�ว่แปรได้"เหม�อนกั�บภ�ษ�โปรแกัรมที่��ว่ไป

ต่�ว่แปรใน shell ไมม�ประเภที่ขีองขี"อม+ล กั�รใสั่คำ�ให"กั�บต่�ว่แปร

ช้��อต่�ว่แปร=คำ� testvar=“Hello World”

กั�รใช้"คำ�ที่��เกั0บในต่�ว่แปร $ช้��อต่�ว่แปร echo $testvar

สั่ร"�งต่�ว่แปร 3 ต่�ว่เพิ��อเกั0บคำ�ขีองคำ��สั่��ง ในต่�ว่อย�งเร�ต่"องกั�รน��ผู้ลล�พิธ์�ขีอง date,

whoami, และ du ม�เกั0บไว่"ต่�ว่แปรกัอน datevar=“date” ( ผู้�ด้ ต่�ว่แปรจะเกั0บคำ��ว่� date

แที่น) ถ"�ต่"องกั�รให"ต่�ว่แปรเกั0บผู้ลล�พิธ์�ที่��เกั�ด้จ�กักั�รเร�ยกัใช้"คำ��

สั่��ง จะต่"องใช้"เคำร��องหม�ย ` (backquote) คำรอบคำ��สั่��ง datevar= `date`

อ�กั 2 ต่�ว่แปรที่��เหล�อ (ลองที่��) whoamivar=? duvar=?

กั�รแสั่ด้งผู้ลล�พิธ์�ออกัที่�งstandard output คำ��สั่��ง echo ใช้"สั่��หร�บแสั่ด้งผู้ลล�พิธ์�ออกัที่�ง

standard output เร�ต่"องกั�ร output ซึ่)�งอย+ในร+ปแบบน��

echo “Current date time: $datevar” echo “User logged in : $whoamivar” echo “Harddisk Usage : $duvar KB”

เม��อเขี�ยน shell script เสั่ร0จแล"ว่จะย�งไมสั่�ม�รถ เร�ยกัใช้"ง�นได้" จ��เป2นจะเป2นเพิ��มสั่�ที่ธ์�ขีองแฟ้4มขี"อม+ลให"

สั่�ม�รถเร�ยกัใช้"ง�นได้" โด้ยใช้"คำ��สั่��ง chmod u+x report

คำณิ�ต่ศ�สั่ต่ร�ใน Shell

ปกัต่�แล"ว่ต่�ว่แปรใน shell จะเกั0บอย+ในร+ปขีอง ขี"อคำว่�ม ที่��ให"ไมสั่�ม�รถที่��ต่�ว่ด้��เน�นกั�รที่�งคำณิ�ต่ศ�สั่ต่ร�ได้"

จ��เป2นต่"องใช้"คำ��สั่��งเพิ��มคำ�อ expr expr 1 + 2 expr 2 – 1 expr 10 / 2 expr 20 % 3 expr 10 \* 3

กั�รอ�นคำ�จ�กั keyboard

คำ��สั่��ง read ใช้"สั่��หร�บอ�นคำ�จ�กั keyboard น��ม�เกั0บไว่"ในต่�ว่แปร

read ชื่��อตั�วแปร ต่�ว่อย�ง shell script

#!/bin/bashecho “Enter your name : “read myvarecho “Your name is $myvar”

กั�รร�บ argument เขี"� shell script สั่มม6ต่�ม� shell script ช้��อ myshell ม�กั�รเร�ยกัใช้"ง�นด้�งน��

myshell foo bar ขี"�งใน shell จะสั่�ม�รถอ"�งอ�งคำ�ที่��เร�ยกัใช้"ง�นคำ��สั่��งคำ�อ

myshell -> $0 foo -> $1 bar -> $2

$# เกั0บจ��นว่นขีอง arguments ในที่��น��คำ�อ 2 $* หร�อ $@ เกั0บ list ขีอง argument ที่��ป4อนม�

ที่��งหมด้

กั�รคำ�นสั่ถ�นะขีองคำ��สั่��ง ปกัต่�เม��อม�กั�รใช้"คำ��สั่��งใน Linux เม��อโปรแกัรมที่��ง�น

สั่��เร0จ คำ��สั่��งน��นจะคำ�นคำ� 0 สั่�ม�รถต่รว่จสั่อบคำ�ขีองสั่ถ�นะที่��คำ��สั่��งคำ�นได้"ด้"ว่ยกั�ร

ด้"ว่ยคำ�ในต่�ว่แปร $? ต่�ว่อย�ง

ls echo $? cat foobar echo $?

กั�รเปร�ยบเที่�ยบเง��อนไขีใน shell

คำ��สั่� �งที่��ใช้"เปร�ยบเที่�ยบเง��อนไขีใน shell คำ�อif เง��อนไขี

then ช้6ด้คำ��สั่� �งเม��อเง��อนไขีเป2นจร�ง fi ใน shell เง��อนไขีที่��เป2นจร�งจะม�คำ�เป2น 0 ต่�ว่เลขีนอกัเหน�อจ�กัน��คำ�อเที่0จ

( กัล�บกั�บ C) ต่�ว่อย�ง script

#!/bin/bash if cat $1 then echo “$1 : found” fi

คำ��สั่��ง test หร�อ [ expr ]

คำ��สั่��ง test ใช้"สั่��หร�บเปร�ยบเที่�ยบน�พิจน� ซึ่)�งจะคำ�นคำ� จร�ง (0) ถ"�กั�รเปร�ยบเที่�ยบเป2นจร�ง

กั�รเปร�ยบเที่�ยบต่�ว่เลขีตั�วเปร�ยบเที�ยบ

ความหมาย การใชื่�งาน test การใชื่�งาน [ expr ]

-eq เที่�กั�บ if test 5 –eq 6 if [ 5 –eq 6 ]

-ne ไมเที่�กั�บ if test 5 –ne 6 if [ 5 –ne 6 ]

-lt น"อยกัว่� if test 5 –lt 6 if [ 5 –lt 6 ]

-le น"อยกัว่�เที่�กั�บ

if test 5 –le 6 if [ 5 –le 6 ]

-gt ม�กักัว่� if test 5 –gt 6 if [ 5 –gt 6 ]

-ge ม�กักัว่�เที่�กั�บ

if test 5 –ge 6 if [ 5 –ge 6 ]

คำ��สั่��ง test หร�อ [ expr ] (ต่อ) กั�รเปร�ยบเที่�ยบขี"อคำว่�ม

กั�รเปร�ยบเที่�ยบแฟ้4มขี"อม+ล

ตั�วเปร�ยบเที�ยบ ความหมายString1 = String2 String1 เที่�กั�บ String2

String1 != String2 String1 ไมเที่�กั�บ String2

String1 String1 ไมเป2น NULL หร�อไมได้"กั��หนด้-n String1 String1 ไมเป2น NULL แต่ต่"องม�อย+-z String1 String1 เป2น NULL และม�อย+

ตั�วเปร�ยบเที�ยบ ความหมาย-s ช้��อfile แฟ้4มขี"อม+ลไมว่�งเปล�

-f ช้��อfile ม�แฟ้4มขี"อม+ลอย+ในระบบ

-d ช้��อdirectory ม�ได้เรกัที่อร�อย+ในระบบ

-w ช้��อfile สั่�ที่รถเขี�ยนแฟ้4มขี"อม+ลน��ได้"

-r ช้��อfile สั่�ม�รถอ�นแฟ้4มขี"อม+ลน��ได้"

-x ช้��อfile สั่�ม�รถเร�ยกัแฟ้4มขี"อม+ลน��ใช้"ง�นได้"

กั�รเช้��อม expression, if-else, if-elif-else

กั�รเช้��อม expression ในกั�รเปร�ยบเที่�ยบ

ร+ปแบบขีอง if-else

ตั�วเชื่��อม ความหมาย! expr NOT

expr1 -a expr2 AND

expr1 -o expr2 OR

if เง��อนไขีthen ช้6ด้คำ��สั่��งเม��อเง��อนไขีเป2นจร�งelse ช้6ด้คำ��สั่��งเม��อเง��อนไขีเป2นเที่0จfi

if เง��อนไขี1then ช้6ด้คำ��สั่��งเม��อเง��อนไขี1 เป2นจร�งelif เง��อนไขี2then ช้6ด้คำ��สั่��งเม��อเง��อนไขี2 เป2นจร�งelse ช้6ด้คำ��สั่��งเม��อที่6กัเง��อนไขีเป2นเที่0จfi

ร+ปแบบขีอง if-elif-else

ต่�ว่อย�ง shell script (1)

เปร�ยบเที่�ยบ argument 2 ต่�ว่#!/bin/bashif [ $1 –eq $2 ]then echo “$1 = $2”elif [ $1 –gt $2 ]then echo “$1 > $2”else echo “$1 < $2”fi

คำ��สั่��งที่��ซึ่��� (loop)

ใน shell ม�คำ��สั่��ง loop อย+ 2 ช้น�ด้คำ�อ while for

คำ��สั่��ง for ม� 2 ประเภที่for ช้��อต่�ว่แปร in ร�ยกั�รคำ�ที่��จะใสั่ในต่�ว่แปรdo

ช้6ด้คำ��สั่��งที่��ต่"องกั�รที่��ในloopdone

for (( expr1; expr2; expr3 ))do

ช้6ด้คำ��สั่��งที่��ต่"องกั�รที่��ในloopdone

(1) (2)

ต่�ว่อย�ง คำ��สั่��ง for#!/bin/bashfor x in 1 2 3 4 5do

echo “x = $x”done

#!/bin/bashfor (( x = 1; x <= 5; x++ ))do

echo “x = $x”done

#!/bin/bashnumfile=0for fname in `ls`do

echo “filename => $fname” numfile=`expr $numfile + 1`;doneecho “there are $numfile files”

คำ��สั่��ง while

while เง��อนไขีdo

ช้6ด้คำ��สั่��งที่��ต่"องกั�รที่��ในloopdone

#!/bin/bashx=0while [ x –le 5 ]do

echo “x = $x” x=`expr $x + 1`done

คำ��สั่��ง case

case ต่�ว่แปร in pattern1) คำ��สั่��ง1 คำ��สั่��ง2 ;; pattern2) คำ��สั่��ง ;; *) คำ��สั่��ง ;;esac

#!/bin/bashecho “Enter vehicle : “read vehiclecase $vehicle in “car”) echo “Car is good”;; “bike”) echo “Bike is slow”;; “plane”) echo “Plane is super fast”;; *) echo “huh”esac

ว่�ธ์� debug shell script

สั่�ม�รถ debug ด้+ขี� �นต่อนกั�รที่��ง�นขีอง shell script ได้"ด้"ว่ยกั�นใช้" option “-x” สั่�ม�รถที่��ได้" 2 ว่�ธ์� เว่ล�เร�ยกัใช้"ง�น

sh -x ช้��อ shell script แที่รกัลงใน shell script บรรที่�ด้ต่อจ�กั #!/bin/bash

set -x

แบบฝึ8กัห�ด้ (1)

เขี�ยน shell script เพิ��อร�บ argument 1 ต่�ว่ เป2น ต่�ว่เลขี 0 – 100

ถ"�ผู้+"ใช้"ป4อน argument ม�กั หร�อ น"อยกัว่� 1 ต่�ว่ให"เต่�อน“error args”

ถ"�ผู้+"ใช้"ป4อนต่�ว่เลขีที่��ไมได้"อย+ในช้ว่ง 0 – 100 ให"เต่�อน“error enter 0-100”

ถ"�คำ�ที่��ป4อนอย+ในช้ว่ง 0 - 50 “ให"แสั่ด้ง F” 51 – 60 “ให"แสั่ด้ง D” 61 – 70 “ให"แสั่ด้ง C” 71 – 80 “ให"แสั่ด้ง B” 81 – 100 “ให"แสั่ด้ง A”

แบบฝึ8กัห�ด้ (2)

เขี�ยน shell script เพิ��อร�บ argument 1 ต่�ว่ ถ"�ผู้+"ใช้"ป4อน argument ม�กั หร�อ น"อยกัว่� 1 ต่�ว่ให"เต่�อน

“error” ถ"�ผู้+"ใช้"ป4อนต่�ว่เลขี น"อยกัว่�หร�อเที่�กั�บ 0 “ให"เต่�อน error

need positive number” ให" shell ห�คำ� summation ขีองต่�ว่เลขีที่��ป4อนเขี"�ม�

เป2น argument ต่�ว่อย�ง ./summation 10 คำ�อ ห�คำ�ขีอง 1+2+3+4+5+6+7+8+9+10 แสั่ด้งผู้ลล�พิธ์�ออกัที่�งหน"�จอ

แบบฝึ8กัห�ด้ (3)

เขี�ยน shell script ช้��อ mydb.sh ซึ่)�งม� option กั0ที่��ง�นคำ�อ add, list ถ"�ผู้+"ใช้"สั่� �ง ./mydb.sh add choopan 1979

Shell script จะน�� ช้��อ และ ป9 คำศ ที่��เกั�ด้ไปเกั0บในแฟ้4มช้��อ db ในร+ปแบบ ช้��อ:ป9เกั�ด้ ถ"�ผู้+"ใช้"สั่� �ง ./mydb.sh list

Shell script จะแสั่ด้งช้��อ และอ�ย6ขีองที่6กัคำนออกัม�ที่�งหน"�จอ ถ"� option เป2นอย�งอ��นที่��ไมใช้ add หร�อ list “ให"เต่�อน error”