Cú pháp ngôn ng Shell

Một phần của tài liệu Hướng dẫn quản trị mạng linux (Trang 117 - 135)

BÀI 11 L P TRÌNH SHELL TRÊN LINUX

V. Cú pháp ngôn ng Shell

Bài t p 11.1 (Sách bài t p)

H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 118/271

I. Gi i thi u v SHELL Và L p Trình SHELL

I.1. Gi i thi u v Shell

Shell là ch ng trình luôn đ c th c thi khi chúng ta đ ng nh p h th ng. Nó là ch ng trình cho phép chúng ta t ng tác v i h th ng. Hi n t i có nhi u shell có s n trong h th ng.

Shell cung c p cho ng i dùng m t t p l nh đ ng i dùng thao tác v i h th ng. Khi ng i dùng th c hi n l nh shell, shell s d ch chúng thành các l i g i h th ng và chuy n cho kernel x lý. Shell c ng là m t trong các ng d ng mà kernel qu n lý. Kernel ch u trách nhi m c p phát tài nguyên duy trì các ti n trình shell. Linux là h th ng đa ng i dùng, khi m i ng i dùng đ ng nh p h th ng, h s nh n đ c m t b n sao chép c a shell đ thao tác v i h th ng.

I.1.1 M t s đ c đi m c a shell

- X lý t ng tác ( Interative processing) : Ng i dùng t ng tác v i shell d i d ng đ i tho i tr c quan.

- Ch y n n : Các ch ng trình trên shell có th i gian th c thi lâu và chi m ít tài nguyên có th cho phép ch y n n bên d i trong khi đó ng i dùng có th th c hi n các công vi c khác.

i u này t ng hi u qu s d ng h th ng.

- Chuy n h ng (Redirection): Có th linh ho t chuy n đ i các d li u ra vào chu n và l i.

- ng d n (pipe): Cho phép th c hi n nhi u l nh liên ti p trong đó d li u ra c a l nh này đ c s d ng nh d li u vào c a l nh kia.

- T p tin l nh (shell script): T o các t p tin ch a các l nh làm vi c theo trình t . C p quy n và th c thi t p tin này.

- Bi n shell: shell h tr s d ng các bi n l u tr các thông tin đ đi u khi n ho t đ ng.

- S d ng l i các l nh đã th c hi n ( history command). ây là tính n ng r t có ích cho ng i dùng. th c hi n l i các l nh mình đã th c hi n tr c đó thay vì ph i gõ l i.

- C u trúc l nh nh ngôn ng l p trình: Shell cho phép s d ng l nh nh ngôn ng l p trình, b i nó có th k t h p x lý các tác v ph c t p.

- T đ ng hoàn t t tên t p tin, ho c l nh : Chúng ta có th gõ ph n đ u c a l nh ho c t p tin sau đó dùng <Tab> đ hoàn t t ph n còn l i.

- Bí danh cho l nh (command alias). B n có th dùng m t tên m i cho m t l nh. Sau đó s d ng tên này thay th l nh : $alias dir=’ls –l’. Lúc này ta s d ng l nh dir dùng nh ls –l I.1.2 Các shell trong Linux.

Tên shell L ch s ra đ i

sh ( Bourne) Shell nguyên th y trong Unix Csh, tcsh và zsh Shell s d ng c u trúc l nh c a ngôn ng C

làm ngôn ng script. Shell này đ c t o b i Bill Joy, đây là shell thông d ng th 2 sau

bash

Bash Bash(bourne Again shell)là shell s d ng chính trong Linux, ra đ i t d án GNU. Bash có u đi m là mã ngu n m , có th download

H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 119/271 t đa ch http://www.gnu.org

Rc Là shell m r ng c a c shell v i nhi u t ng thích v i ngôn ng C, ra đ i t d án GNU

Shell bash là shell m c đnh trên Linux, ta có th dùng l nh #echo đ xem tên shell s d ng hi n t i c a h th ng.

#echo $SHELL

I.2. L p c u hình môi tr ng đ ng nh p

Khi ng i dùng đ ng nh p vào h th ng, h s làm vi c trong môi tr ng do Linux đnh ngh a s n. Môi tr ng Linux ch a các thi t l p và d li u có tính n ng ki m tra phiên làm vi c c a b n trong su t th i gian đ ng nh p. Tuy nhiên, b n c ng có th thay đ i nh ng thi t l p này theo ý riêng c a mình. Môi tr ng phiên làm vi c g m hai thành ph n:

- Thành ph n th nh t g i là môi tr ng terminal đ đi u khi n terminal (chính là màn hình và bàn phím) c a b n.

- Thành ph n th hai g i là môi tr ng shell đ đi u khi n nhi u khía c nh khác nhau c a shell, cùng v i m i ch ng trình b n th c hi n.

I.2.1 Thi t l p môi tr ng terminal

Th c ra phiên đ ng nh p c a b n bao g m hai ch ng trình riêng bi t nh ng ch y cùng lúc v i nhau, t o cho b n c m giác r ng máy đang ph c v cho riêng mình. M c dù shell là ch ng trình nh n l nh và thi hành, song tr c khi shell nh n đ c l nh, t t c nh ng gì mà b n gõ vào đ u ph i đi qua m t trình đi u khi n thi t b g i là device driver. Driver ki m soát terminal, nh n nh ng kí t b n gõ vào r i sau đó quy t đnh xem x lý nh th nào tr c khi giao cho shell thông d ch.

T ng t nh th , m i kí t phát sinh t shell ph i đi ngang driver thi t b tr c khi đ n terminal.

Khi làm vi c trên h th ng Linux, ch ng trình xem t t c các thi t b n i k t v i h th ng đ u nh nhau, m t s phím quan tr ng:

Phím Mô t

Interrupt ình ch th c hi n m t ch ng trình. Linux dùng t h p phím

<Ctrl+C>.

Erase Xóa kí t cu i cùng trong vùng đ m. ó là phím <Backspace>

Kill Xóa toàn b nh ng gì trong vùng đ m tr c khi chuy n sang shell ho c ch ng trình ng d ng. Thông th ng đó là phím <@>. Không gi ng

nh tr ng h p b m phím d ng, b n s không th y hi n ra d u nh c shell khi b m phím kill, b i vì driver ch b n gõ ti p vào.

End-of-line Báo cho driver bi t b n đã gõ xong các kí t , và mu n chúng đ c thông d ch và chuy n sang shell ho c ch ng trình. Linux s d ng

phím <Enter>

End-of-file Báo cho shell thoát ra và hi n th d u nh c đ ng nh p. Kí t cu i t p tin là <Ctrl+d>.

H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 120/271 I.2.2 Thi t l p môi tr ng Shell

Khi đ ng nh p vào h th ng, ng i dùng s làm vi c trong môi tr ng shell c a mình do Linux đnh ngh a tr c. Trong môi tr ng shell g m nhi u bi n. Khai báo m i bi n có d ng <BI N=giá- tr >, ý ngh a c a m t bi n nh th nào là tùy b n ch đnh. Tuy nhiên, có m t s bi n đã đ c đnh ngh a s n. Ví d nh bi n: TERM, PATH. B ng sau đây li t kê nh ng bi n môi tr ng ph bi n trong shell Bourne:

Bi n Mô t

HOME=/home/đ ng- nh p

HOME l p home directory c a b n.

ng-nh p là ID đ ng nh p. Ví d , n u ID đ ng nh p c a b n là jack,

thì HOME s là /home/jack LOGNAME=đ ng-

nh p

Máy s t đ ng l p LOGNAME b ng ID đ ng nh p c a b n PATH=đ ng-d n Tùy ch n đ ng-d n tr đ n danh

sách các th m c mà shell s duy t qua đ tìm l nh. Ví d , b n có th

l p đ ng d n nh sau:

PATH=/usr:/bin:/usr/local/bin PS1=d u-nh c PS1 là d u nh c shell đ u tiên đ

yêu c u b n xác đnh hình dáng c a d u nh c riêng theo ý c a mình. N u

b n không có thay đ i gì d u nh c m c đnh s là d u $( cho ng i dùng không ph i là root). B n có th

thay đ i, ch ng h n nh : PS1=Enter Command >

PWD=th -m c Xác đnh v trí c a b n trong h th ng t p tin

SHELL=shell SHELL xác đnh shell mà b n đang s d ng.

TERM=lo i-terminal Ki u terminal b n dùng

L u ý: n u mu n xác l p nh ng bi n môi tr ng, b n hãy xác đnh trong t p tin .bash_profile (n u ch y shell bash), trong t p tin .login (n u ch y shell C) và trong t p tin .profile (n u ch y shell Bourne).

I.2.3 S d ng các bi n Shell đ c bi t

Bi n HOME: luôn xác đnh home directory c a b n. Khi v a đ ng nh p thành công, b n ngay trong home directory.

- Mu n tr v home directory c a mình, b n ch c n gõ l nh cd.

- B n có th dùng bi n HOME khi biên so n shell script đ xác đnh nh ng t p tin trong home directory.

- $HOME luôn đ i di n cho home directory c a b t k ai s d ng l nh. N u b n gõ l nh b ng

$HOME thì nh ng ng i khác c ng có th dùng chung l nh.

H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 121/271 Bi n PATH: Li t kê các th m c mà shell s đ n tìm nh ng câu l nh. Shell tìm các th m c theo th t đã li t kê.

Ví d : N u PATH=/bin:/usr/bin: M i khi thông d ch m t câu l nh, shell s tìm tr c tiên trong th m c /bin. N u ch a phát hi n ra l nh c n tìm, shell ti p t c duy t sang th m c /usr/bin. N u v n ch a có k t qu , shell l i dò sang th m c (th m c hi n hành). Chúng ta nên x p t t c các shell script c a mình vào m t th m c và ghi vào bi n PATH. Nh th , sau này cho dù b n đang

th m c nào thì c ng th c thi đ c nh ng shell script đó.

Bi n MAIL: Ch a tên t p tin l u tr email c a b n. M i khi nh n email, h th ng s đ a vào t p tin do bi n MAIL xác đnh. N u b n có ch ng trình thông báo m i khi có mail đ n, ch ng trình này s liên h v i t p tin k t h p v i bi n MAIL. Bi n PS1: ch a nh ng chu i kí t mà b n nhìn th y t i d u nh c s kh i.

Bi n TERM: Dùng đ nh n d ng lo i terminal. Nh ng ch ng trình nào ch y ch đ toàn màn hình, ví d nh vi, s tham kh o bi n TERM

Bi n LOGNAME: Ch a chu i kí t mà h th ng dùng đ nh n d ng ra user đ ng nh p. Bi n này còn giúp h th ng bi t b n là ch s h u các t p tin và th m c, là ng i ra l nh ch y m t s ch ng trình, và là tác gi c a email g i b ng l nh write.

II. M c đ ích và ý ngh a c a vi c l p trình Shell

Shell là l p v bên ngoài h t nhân, là ph n trung gian cho ng i dùng thao tác v i h t nhân. B n đã r t quen thu c v i các shell trong DOS nh command.com s d ch các l nh nh del, copy, … thành nh ng ng t c p th p c a h đi u hành DOS đ th c hi n. Ngoài ra DOS còn cho chúng ta t o các t p tin .bat g m nhi u l nh th c hi n trình t . Shell trong DOS nói chung còn r t đ n gi n và không s d ng nhi u các tác v h th ng. Linux cung c p các shell phong phú, uy n chuy n h n. Nó cho phép b n t o nh ng t p tin d ng bat v i c u trúc l p nh C, hay có th s d ng ph i h p nhi u l nh shell v i nhau.

Ví d : b n có th k t h p l nh ls và more đ xem danh sách các t p tin th m c theo t ng trang.

ls –l | more

Linux cho phép k t h p d li u vào ra gi a các l nh v i nhau thông qua c ch chuy n ti p (redirect) và ng d n (pipe). Ngoài ra, Linux cho phép s d ng các l nh có c u trúc gi ng C nh if, case, for … ây là đi m m nh c a shell trong Linux. V i các c u trúc đi u khi n nh v y chúng ta x lý đ c nhi u tr ng h p b ng cách k t h p các l nh shell v i các đi u ki n x lý.

Ngoài ra shell còn h tr ch đ ra vào d li u, t ng tác các bi n môi tr ng.

Nh ng ch ng trình shell s giúp ng i dùng s d ng và qu n lý h th ng và d ch v trên Linux.

Ví d nh kh i đ ng hay ng ng m t ng d ng, b n có th vi t m t đo n ch ng trình shell th c hi n tác v này. Chính s đa d ng trong shell cho phép ng i dùng t o ra ch ng trình shell qu n lý d ch v h th ng m t cách hi u qu .

III. i u khi n Shell t dòng l nh

Ng i dùng có th s d ng các l nh shell t dòng l nh. Khi ng i dùng ch a hoàn t t l nh thì shell hi n th d u > đ chúng ta thêm vào.

Ví d :

H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 122/271

$ if [ $file –d ] ;

> echo ls $file

> else echo “$file is not file”

> fi

Chúng ta s d ng nhi u l nh trên m t dòng cách nhau b ng d u ch m ph y (;) Ví d :

cd /etc ; ls –l

B n ch c n gõ Enter thì s th c hi n các l nh trên dòng đó. i u b t ti n nh t khi s d ng trên dòng l nh là kh n ng s a ch a l i khi chúng ta nh m l n. Do v y ng i ta th ng ghi các l nh vào trong t p tin, r i cho nó th c hi n tu n t . T p tin ch a các l nh này đ c g i là t p tin l nh hay các shell script.

IV. i u khi n t p tin l nh

T p tin l nh có th đ c th c thi theo 2 cách.

Cách 1: B n g i shell và dùng t p tin là tham s :

$ /bin/sh tên-t p-tin.

Ví d : $/bin/sh hello.

Cách 2: B n s g i t p tin l nh t d u nh c c a shell nh th c hi n các l nh thông th ng. Theo cách này, tr c h t b n ph i c p quy n th c thi (excute) trên t p tin này. Tùy theo nhu c u s d ng t p tin l nh b n có th c p quy n cho ng i s h u, cho nhóm s h u hay cho m i ng i.

L nh c p quy n nh chúng ta đã h c là chmod. L nh c p cho m i ng i có quy n th c thi : chmod +x <tên-t p-tin>

Ch cho ng i s h u th c thi : chmod o+x tên-t p-tin

Ch y t p tin l nh: B n gõ l nh trong console ./đ ng-d n/tên-t p-tin ho c xác đnh bi n môi tr ng PATH s d ng th m c ch a t p tin và gõ tên-t p-tin trong c a s console. N u b n đang làm vi c t i th m c ch a t p tin, b n có th ch y b ng l nh:

./tên-t p-tin

Ví d : C p quy n và th c thi ch ng trình hello :

$cd /home/hv/baitap

$chmod +x hello

$./ hello

H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 123/271 B n mu n t p tin này có th th c thi đ c t b t c n i đâu ch mà ch c n gõ hello thì b n s đ t l i bi n môi tr ng PATH trong t p tin .bash_profile trong th m c home:

PATH=$PATH:/home/hv/baitap. N u b n mu n t p tin này cho nh ng ng i dùng khác s d ng thì b n chép nó vào th m c /usr/local/bin. B n nên nh c p quy n l i cho t p tin này n u b n không mu n nó b xóa hay b s a ch a . o n l nh sau có ý ngh a : Chép t p tin hello vào th m c /usr/local/bin và chuy n quy n s h u t p tin cho root, c p cho root toàn quy n trên t p tin này, nh ng ng i khác ch có quy n đ c và th c thi.

$cp hello /usr/local/bin

$chown root /usr/local/bin/hello

$chgrp root /usr/local/bin/hello

$chmod u=rwx go=rx /usr/local/bin/hello

V. Cú pháp ngôn ng Shell

Ngôn ng Shell là d ng ngôn ng script, không có đ uy n chuy n hay ph c t p nh các ngôn ng l p trình chuyên nghi p C, Pascal hay Java… Ch ng trình Shell đ c so n th o d i d ng v n b n (text) và không đ c biên d ch thành t p tin binary nh các ngôn ng khác. Khi ch y ch ng trình shell, shell s biên d ch và th c thi. Trong Linux chúng ta g p r t nhi u các ch ng trình shell x lý nh ng công vi c r t h u hi u. Là nhà qu n tr b n c n ph i n m v ng cú pháp ngôn ng shell đ không ch vi t nh ng đo n ch ng trình mà ít ra c ng hi u đ c các script có s n đi u khi n h th ng c a mình. Các thành ph n trong ngôn ng shell:

- Bi n: ki u chu i, tham s và bi n môi tr ng.

- i u ki n: ki m tra lu n lý.

- Các l nh đi u khi n: if, for, while, until, case.

- Hàm.

- Các l nh n i trú c a shell.

V.1. Ghi chú, đ nh shell th c thi, thoát ch ng trình

Dòng chú thích s d ng trong các source ch ng trình dùng đ gi i thích ý ngh a các l nh ho c ch c n ng c a m t bi n hay m t đo n ch ng trình. Nh ng dòng này không đ c biên d ch đ i v i các ngôn ng l p trình, và nó không đ c th c thi đ i v i ch ng trình shell. B t đ u m t dòng chú thích là d u # .

Ví d : m t đo n ch ng trình s d ng dòng ghi chú.

# Ki m tra có t n t i tham s đ u tiên if test $1 –z ; then

echo “Khong co tham so“

fi # k t thúc if

H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 124/271 Tr ng h p đ c bi t sau d u # là d u ch th ! (#!) dùng đ gi i thích đây chính là dòng l nh g i shell đ thông d ch các l nh trong t p tin này. B n th ng th y dòng đ u tiên trong các ch ng trình shell là #! /bin/bash. i u này có ngh a là b n s dùng shell bash đ thông d ch l nh. Shell chúng ta ch y có th xem là shell ph và chúng có th th c thi các l nh mà không làm bi n đ i các bi n môi tr ng c a shell chính. Cú pháp chung c a ch th này là :

#!shell-th c-thi

N u chúng ta không khai báo thì shell m c nhiên trong Linux là bash. Các h Unix khác thì shell m c nhiên là sh. Ch th #! Còn dùng đ ch y các ch ng trình khác tr c khi th c thi các l nh ti p theo.

V.2. S d ng bi n

Bi n dùng trong ch ng trình shell không c n ph i khai báo tr c nh các ngôn ng C, Pascal, ... Nó s t đ ng khai báo khi ng i dùng s d ng l n đ u tiên. Bi n ch có th l u tr d li u d i d ng chu i dù nó có th ch a s . Trong tr ng h p mu n s d ng giá tr bi n nh là s thì ph i có các phép bi n đ i mà b n s tìm hi u trong ph n sau. M t v n đ mà b n ph i l u ý là shell phân bi t ch hoa và ch th ng. Ví d hai bi n tongTong là khác nhau.

V.2.1 Phép gán giá tr cho bi n

đ t giá tr m i cho bi n chúng ta s d ng phép gán.

Cú pháp:

Ten-bien=giatri Ví d :

Ten=Hung So=200

Giá tr đ c gán có th là h ng, bi n ho c bi u th c.

L u ý: Là b n không đ c dùng d u kho ng tr ng gi a tên-bi n=giá-tr Ví d : ten =Hung là không h p l

V.2.2 L y giá tr c a bi n

Mu n l y giá tr c a bi n chúng ta thêm d u $ vào phía tr c tên bi n:

$tên-bi n Ví d : tp=HaNoi echo $tp

$tp s mang giá tr “HaNoi.”

V.2.3 Hi n th giá tr c a bi n ra màn hình

L nh echo dùng đ hi n th bi n ra màn hình. Ta có th dùng m t trong 3:

echo “Dòng hi n th ”

H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 125/271 echo “dòng hi n th ”

echo ‘dòng hi n th ’

Nh ng kí t n m trong d u ‘ ‘ đ c xem nh là h ng chu i. T t c các kí t s hi n th h t ra màn hình, k c các kí t đ c bi t.

Ví d :

echo ‘ Gia tri cua bien la $bien ‘

K t qu hi n th : Gia tri cua bien la $bien

Khác v i ý ngh a c a d u ‘’, d u “ ” dùng đ xác đnh chu i bao g m c các ký t hi n th và các giá tr bi n. Mu n hi n th các ký t đ c bi t chúng ta ph i thêm d u \ vào tr c ví d :

echo ten=Dung

echo “Su dung dau nhay kep”

echo “Gia tri bien la $ten ” echo “Ky hieu tien la \$”

K t qu hi n th : Su dung dau nhay kep Gia tri bien la Dung Ky hieu tien la $

V.2.4 Nh p giá tr cho bi n t bàn phím Cú pháp: read <tên-bi n>

G p l nh này ch ng trình s đ i ng i dùng nh p giá tr vào, khi d li u đã xong thì n Enter.

Giá tr s đ c gán vào bi n tên-bi n.

Ví d :

echo “Nhap vao ten cua ban “ read ten

echo “Ten vua nhap la $ten”

Trong ví d trên khi xu t hi n dòng thông báo “Nhap vao ten cua ban “, ng i dùng nh p vào tên

“ Nguyen Hung Dung” thi k t qu hi n th là “Ten vua nhap la Nguyen Hung Dung “ V.2.5 Bi n môi tr ng

Bi n môi tr ng là bi n đ c đnh ngh a tr c và mang giá tr m c đnh khi shell kh i đ ng. Nó giúp các ch ng trình c ng nh h th ng trong vi c x lý các công vi c. Tên c a bi n môi tr ng th ng là ch hoa đ phân bi t v i các tên bi n do ng i dùng đ t trong ch ng trình.

M t s bi n môi tr ng thông d ng:

Bi n môi tr ng

Ý ngh a

H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 126/271 HOME Ch a th m c home c a ng i

dùng, là th m c s d ng sau khi đ ng nh p h th ng

PATH Danh sách các th m c tìm ki m khi th c hi n các l nh

PS1 D u nh c hi n th l nh, d u # đ i v i ng i dùng root, d u $ đ i v i ng i dùng th ng.

PS2 D u nh c th c p th ng là >

IFS D u phân cách các tr ng trong danh sách chu i. Th ng s d ng d u kho ng tr ng, tab và xu ng hàng

PPID S ID c a ti n trình cha trong SHELL

RANDOM S ng u nhiên

SECONDS Th i gian làm vi c tính theo giây

V.2.6 Bi n tham s

Khi g i các l nh chúng ta th ng thêm vào sau l nh các tham s , các tham s đó s là giá tr c a các bi n tham s c a ch ng trình.

Ví d cp sourc.txt dest.txt

Trong ví d sourc.txt và dest.txt là hai tham s c a ch ng trình cp. Thao tác v i các bi n tham s t trong ch ng trình chúng ta s d ng các ký hi u sau

Ký hi u bi n Ý ngh a

$1, $2, $3 Giá tr các bi n tham s th nh t, th 2.. t ng ng v i các tham s t trái sang ph i trong dòng tham s .

$0 Tên t p tin l nh g i

$* Danh sách tham s đ y đ

$# T ng s tham s .

$$ S ti n trình mà ch ng trình đang ho t đ ng

V.3. L nh ki m tra

L nh test ho c d u [ ] dùng đ ki m tra giá tr đúng sai c a bi u th c. L nh test cho phép ki m tra 3 ki u d i đây.

Một phần của tài liệu Hướng dẫn quản trị mạng linux (Trang 117 - 135)

Tải bản đầy đủ (PDF)

(271 trang)