Co ban velinuxshellscript

  • 15 trang
  • file .pdf
C¬ b¶n vÒ Shell
A. Giíi thiÖu chung
1. Giíi thiÖu vÒ shell
Khi chóng ta muèn thùc hiÖn mét lÖnh nµo ®ã trong hÖ ®iÒu hµnh Unix chóng ta cÇn ph¶i ra
lÖnh ®Ó Unix hiÓu ®−îc chóng ta muèn lµm g×. ViÖc ra lÖnh nµy ®−îc thùc hiÖn qua shell. Nh−
vËy chóng ta cã thÓ hiÓu mét c¸ch ®¬n gi¶n shell lµ giao diÖn ®Ó giao tiÕp gi÷a ng−êi sö dông
vµ Unix. Shell nhËn lÖnh tõ ng−êi sö dông sau ®ã dÞch vµ chuyÓn ®Õn hÖ thèng nh÷ng ho¹t
®éng cÇn thùc hiÖn ®Ó ®¸p øng yªu cÇu.
HiÖn nay cã mét sè lo¹i shell trong c¸c hÖ thèng Unix, trong mét sè tr−êng hîp trong mét
hÖ thèng nµo ®ã cã thÓ cã mét hoÆc nhiÒu shell cïng tån t¹i. Mét sè lo¹i phæ biÕn ®ang tån t¹i
nh−: Bourne shell, Korn shell, C shell, ... Mçi lo¹i cã sù kh¸c nhau nh−ng tÊt c¶ ®Òu cung cÊp
®Çy ®ñ c«ng cô ®Ó thiÕt lËp m«i tr−êng giao tiÕp gi÷a ng−êi sö dông vµ Unix.
2. Môc ®Ých cña shell
Shell cã 3 môc ®Ých chÝnh nh− sau:
- T−¬ng t¸c (interactive use)
- §Æt biÕn m«i tr−êng ®èi víi mçi ng−êi sö dông
- LËp tr×nh
T−¬ng t¸c
Tr−êng hîp ®−îc coi lµ ®¬n gi¶n khi sö dông shell, shell ®îi ng−êi sö dông gâ c¸c lÖnh t¹i
dÊu nh¾c, sau ®ã göi tíi hÖ thèng yªu cÇu tõ lÖnh nhËn ®−îc.
§Æt biÕn m«i tr−êng ®èi víi mçi ng−êi sö dông
Unix shell x¸c ®Þnh c¸c biÕn ®Ó ®iÒu khiÓn m«i tr−êng cña ng−êi sö dông ®èi víi mçi
phiªn sö dông. ViÖc ®Æt c¸c biÕn nµy sÏ x¸c ®Þnh víi hÖ thèng nh÷ng tham sè nh− th− môc
nµo sÏ ®−îc sö dông lµm th− môc chÝnh, n¬i ®Æt mail, nh÷ng th− môc nµo ®−îc sö dông mÆc
®Þnh khi b¹n gäi ®Õn c¸c lÖnh Unix, ... Mét sè biÕn hÖ thèng cã thÓ ®−îc ®Æt trong tÖp khëi
®éng (start-up file) vµ ®−îc ®äc khi b¹n login (®¨ng nhËp). Trong tÖp khëi ®éng b¹n cã thÓ ®Æt
c¸c lÖnh cña Unix, nh−ng chó ý lµ nh÷ng lÖnh nµy sÏ ®−îc thùc hiÖn mçi khi b¹n login.
LËp tr×nh
Shell cung cÊp tËp hîp c¸c lÖnh ®Æc biÖt mµ tõ ®ã cã thÓ t¹o nªn nh÷ng ch−¬ng tr×nh, khi
®ã ®−îc gäi lµ shell script. Trong thùc tÕ hÇu hÕt c¸c lÖnh nµy cã thÓ sö dông trong cña sæ
lÖnh cña Unix vµ ng−îc l¹i, c¸c lÖnh cña Unix ®Òu cã thÓ viÕt trong shell script. Shell script
rÊt tiÖn lîi trong viÖc gép nhiÒu lÖnh ®éc lËp vµo mét vµ thùc hiÖn nhiÒu lÇn.
Ngoµi nh÷ng lÖnh ®¬n gi¶n cña hÖ thèng Unix, shell cßn ®−îc bæ sung thªm c¸c cÊu tróc
phøc t¹p nh− ®iÒu khiÓn rÏ nh¸nh (if/case), vßng lÆp (for/while).
VietHung soft group - [email protected]
Mét tÖp ch−¬ng tr×nh cña shell kh«ng quan träng ®Õn tªn vµ ®u«i, kh«ng cÇn dÞch còng nh−
kh«ng cã m«i tr−êng ph¸t triÓn. ViÖc so¹n th¶o mét tÖp shell cã thÓ sö dông bÊt kú mét c«ng
cô so¹n th¶o nµo, chØ cÇn ghi tÖp ®ã víi d¹ng text, sau ®ã ®æi thµnh d¹ng tÖp cã thÓ ch¹y
®−îc. Xem vÝ dô 1 trong phÇn sau ®Ó hiÓu thªm chi tiÕt.
Shell lu«n g¾n liÒn víi hÖ ®iÒu hµnh Unix, nh−ng ®Ó hiÓu vµ häc shell kh«ng nhÊt thiÕt b¹n
cÇn hiÓu s©u vÒ hÖ thèng còng nh− c¸c lÖnh cña Unix. Tuy nhiªn th«ng qua nh÷ng vÝ dô
chóng t«i nªu ë ®©y c¸c b¹n cã thÓ hiÓu thªm c¸ch sö dông lÖnh vµ biÕn hÖ thèng.
Chó ý: Chóng t«i chØ nh¾c ®Õn hÖ ®iÒu hµnh Unix khi giíi thiÖu còng nh− h−íng dÉn sö dông,
nh−ng thùc tÕ hiÖn nay Linux lµ mét hÖ ®iÒu hµnh kÕ thõa cña Unix. Linux còng cã nh÷ng
shell t−¬ng tù vµ b¹n cã thÓ sö dông nh÷ng giíi thiÖu vÒ shell ë ®©y víi c¸c hÖ thèng Linux.
3. Nh÷ng lo¹i shell hiÖn thêi
HiÖn nay cã kh¸ nhiÒu lo¹i shell ®−îc sö dông trong c¸c hÖ thèng Unix, nh−ng ë ®©y chóng
t«i chØ ®Ò cËp ®Õn 3 lo¹i c¬ b¶n vµ phæ biÕn, ®ã lµ:
- Bourne shell, ®−îc coi lµ shell chuÈn, c« ®äng vµ lµ lo¹i ®¬n gi¶n nhÊt.
- Korn shell, cao cÊp h¬n Bourne shell vµ cho phÐp so¹n dßng lÖnh.
- C shell, sö dông có ph¸p cña ng«n ng÷ lËp tr×nh C vµ cã thªm nhiÒu chøc n¨ng tiÖn lîi.
Th«ng th−êng c¸c hÖ thèng cã Ýt nhÊt lµ mét lo¹i shell vµ th«ng th−êng Bourne shell ®−îc sö
dông ®Ó viÕt shell script, cßn sö dông mét lo¹i kh¸c cho viÖc t−¬ng t¸c.
TÖp /etc/passwd sÏ x¸c ®Þnh lo¹i shell nµo sÏ ®−îc sö dông mÆc ®Þnh trong hÖ thèng cho
mçi phiªn lµm viÖc cña b¹n. Trong phÇn cuèi cña dßng chøa tªn b¹n, b¹n cã thÓ t×m thÊy
th«ng tin vÒ lo¹i shell nµo ®−îc sö dông. Mçi khi b¹n login, hÖ thèng sÏ ®äc tÖp nµy ®Ó lÊy
th«ng tin khëi t¹o cho shell.
Th«ng tin cã thÓ gåm mét trong nh÷ng d¹ng sau:
/bin/sh Bourne shell
/bin/jsh Bourne shell, cã thªm phÇn ®iÒu khiÓn t¸c vô (job control)
/bin/ksh Korn shell
/bin/csh C shell
B¹n cã thÓ thay ®æi shell mÆc ®Þnh sang mét lo¹i kh¸c b»ng c¸ch sö dông lÖnh:
VÝ dô chuyÓn tõ Bourne shell sang C shell:
exec csh
hoÆc cã thÓ ®æi shell míi b»ng lÖnh:
chsh []
CÊu tróc lÖnh chsh nh− sau:
chsh [-s ] [ -l ] []
chsh -l liÖt kª c¸c lo¹i shell hiÖn cã (th«ng tin chøa trong tÖp /ect/shells).
Trong phÇn tiÕp theo, chóng t«i sÏ giíi thiÖu vÒ Bourne shell, lo¹i tiªu chuÈn, ®¬n gi¶n vµ
phæ dông nhÊt hiÖn nay trong c¸c hÖ thèng Unix.
VietHung soft group - [email protected]
B. Bourne shell
1. In mét dßng ch÷ ra mµn h×nh
VÝ dô 1: B¹n t¹o ra mét tÖp víi tªn vidu1, sau ®ã gâ vµo nh÷ng dßng sau:
#!/bin/sh
#vi du dau tien
echo “Vi du dau tien voi shell.”
B¹n cã thÓ sö dông vi, emacs, .. ®Ó so¹n th¶o tÖp trªn. Sau ®ã dïng lÖnh chmod ®Ó chuyÓn tÖp
vidu1 thµnh tÖp cã thÓ ch¹y ®−îc, lÖnh ®ã nh− sau:
chmod +x thidu1
§Ó ch¹y thö b¹n chØ viÖc gâ: vidu1
ViÖc t¹o vµ dïng chmod ®Òu cÇn thùc hiÖn ®èi víi mçi tÖp sau khi t¹o ra vµ cÇn chuyÓn thµnh
tÖp ch¹y ®−îc, chóng t«i sÏ kh«ng nh¾c l¹i vÒ sau n÷a. Nh−ng ®èi tÖp ®∙ ®−îc chuyÓn mod
mét lÇn th× kh«ng cÇn lµm l¹i khi thay ®æi néi dung hay ®æi tªn.
Gi¶i thÝch:
- Dßng ®Çu tiªn lµ dßng ®Æc biÖt, dïng ®Ó x¸c ®Þnh lo¹i shell ®−îc sö dông vµ gäi ch−¬ng
tr×nh th«ng dÞch shell t−¬ng øng.
- Dßng thø hai b¾t ®Çu b»ng dÊu # ®Ó chØ mét dßng chó thÝch.
- LÖnh echo dïng ®Ó in ra mµn h×nh x©u ký tù hay c¸c biÕn, echo cã cÊu tróc nh− sau:
echo [-n] [x©u ký tù]
NÕu cã chøc n¨ng -n, con trá kh«ng bÞ ng¾t xuèng dßng sau khi in x©u ký tù.
Ngoµi ra, bªn trong x©u x©u ký tù c¸c b¹n cßn cã thÓ sö dông mét sè chøc n¨ng kh¸c nh−:
\b lïi l¹i mét ký tù (backspace).
\c kh«ng xu«ng dßng (nh− -n).
\n xuèng dßng.
\t in ra ký tù tab.
\\ in ra ký tù \.
\0n in ra ký tù cã sè n (sè thËp ph©n) trong b¶ng m∙ ASCII.
C¸c b¹n cã thÓ in ra nh÷ng ký tù ®Æc biÖt b»ng c¸ch ®Æt sau ký tù \, vÝ dô: \” ®Ó in ký tù
nh¸y kÐp (”) ra mµn h×nh.
VÝ dô:
echo “\”Thong bao co loi! \”, \c \007”
2. Thùc hiÖn c¸c lÖnh hÖ thèng
VÝ dô 2: VÝ dô thùc hiÖn mét lÖnh cña hÖ thèng.
#!/bin/sh
#vi du 2
echo
VietHung soft group - [email protected]
echo “Danh sach cac thu muc va tep:”
ls –l
echo
echo “Vi tri hien thoi: ”`pwd`
Trong ®ã lÖnh ls -l lµ mét lÖnh cña hÖ thèng ®−îc thùc hiÖn mµ kh«ng cÇn gâ tõ dÊu nh¾c.
Ngoµi ra tÊt c¶ c¸c lÖnh vµ tham sè kh¸c cña hÖ thèng ®Òu cã thÓ ®−îc thùc hiÖn mét c¸ch
t−¬ng tù, vÝ dô nh−: cd, cp, mkdir, chmod, cat, ...
3. BiÕn vµ tham sè hÖ thèng
Còng nh− c¸c ng«n ng÷ lËp tr×nh, shell cã thÓ sö dông biÕn nh−ng kh«ng cÇn khai b¸o vµ
®Þnh nghÜa kiÓu. C¸c tham sè cña m«i tr−êng vµ hÖ thèng cã thÓ sö dông trùc tiÕp b»ng tªn.
Tªn cña c¸c tham sè th−êng lµ mét c¸i tªn, mét ký tù, sè hay mét trong c¸c ký hiÖu *, @, #,
?, -, $, !\^.
VÝ dô 3: VÝ dô vÒ dö sông tham sè hÖ thèng.
#!/bin/sh
#Vi du 3
echo "Ten tep [$0]"
echo "Bien vao thu nhat [$1]"
echo "Bien vao thu hai [$2]"
echo "Chi so cua process [$$]"
echo "So bien dau vao [$#]"
echo "Tat ca cac bien dau vao [$@]"
echo "Co cua process [$-]"
C¸c b¹n cã thÓ hiÓu thªm khi thùc hiÖn lÖnh: vidu3 vi du 3
Gi¶i thÝch:
- Trong ®ã, $0 lµ biÕn chøa tªn cña tÖp võa ch¹y.
- $n, n=1,..9 lµ c¸c tham sè dßng lÖnh ®−îc ®−a vµ khi ch¹y.
- $$ lµ chØ sè cña tÖp võa ch¹y (ID process).
- $# lµ sè tham sè dßng lÖnh ®∙ ®−¬c ®−a vµo.
- $@ liÖt kª tÊt c¶ c¸c tham sè dßng lÖnh.
- @- cê cña process.
T−¬ng tù nh− c¸c ng«n ng÷ lËp tr×nh kh¸c, shell script cung cÊp c¸c phÐp “g¸n” vµ “lÊy”
gi¸ trÞ cña biÕn. VÝ dô cã biÕn víi tªn var, viÖc g¸n vµ lÊy gi¸ trÞ ®−îc hiÓu nh− sau:
var = gi¸ trÞ ë ®©y cã thÓ lµ mét sè, mét x©u ký tù hay tõ mét biÕn kh¸c.
$var dïng ®Ó lÊy gi¸ cña biÕn var.
VietHung soft group - [email protected]
4. LÖnh vµo ra
LÖnh in ra echo nh− ®∙ ®−îc giíi thiÖu trong c¸c vÝ dô tr−íc, lÖnh read ®−îc dïng ®Ó ®äc
vµo tõ bµn phÝm.
VÝ dô 4: VÝ dô vÒ lÖnh ®äc vµo vµ in ra d÷ liÖu.
#!/bin/sh
#Vi du 4
echo “Ban ten gi: “
read ten
echo “Chao ban $ten”
Gi¶i thÝch:
- read dïng ®Ó nhËn gi¸ trÞ tõ bµn phÝm sau ®ã g¸n vµo biÕn ten.
- $ten tr¶ ra gi¸ trÞ mµ nã l−u tr÷.
LÖnh read cßn cã thÓ nhËn nhiÒu biÕn cïng mét lóc vµ cã cÊu tróc nh− sau:
read [biÕn 2] [biÕn 3] ...
VÝ dô:
read ten dienthoai diachi
Khi b¹n gâ vµo: Hung 0123456 334 Nguyen Trai
B¹n dïng c¸c lÖnh sau ®Ó in thö c¸c biÕn ra mµn h×nh:
echo “Ten : $ten”
echo “Dien thoai : “ $dienthoai”
echo “Dia chi : $diachi”
Trªn mµn h×nh sÏ in ra:
Ten : Hung
Dien thoai: 0123456
Dia chi: 334 Nguyen Trai
Nh− vËy cã thÓ hiÓu nh− sau: C¸c biÕn ®−îc nhËn gi¸ trÞ lÇn l−ît cho ®Õn dÊu c¸ch, biÕn cuèi
cïng sÏ ®−îc nhËn toµn bé phÇn cßn l¹i. §èi víi biÕn cuèi cïng, nÕu kh«ng cßn d÷ liÖu th× sÏ
nhËn gi¸ trÞ rçng (null).
5. Ph©n biÖt dÊu huyÒn ( ` ), nh¸y ®¬n ( ' ) vµ nh¸y kÐp ( " )
Trong shell cã ba dÊu `, “, ‘ ®−îc dïng trong c¸c lÖnh in ra mµn h×nh hay lÖnh g¸n, nh−ng ý
nghÜa vµ ph−¬ng thøc thùc hiÖn ®èi víi nh÷ng dÊu nµy lµ kh¸c nhau.
5.1 DÊu ( ` )
VÝ dô trong mét tÖp shell cã nh÷ng lÖnh sau:
currentdir = `pwd`
VietHung soft group - [email protected]
linecount = `wc –l $filename`
LÖnh thø nhÊt sÏ ®−îc thùc hiÖn vµ g¸n ®−êng dÉn hiÖn thêi vµo biÕn currentdir, lÖnh thø hai
®−îc thùc hiÖn vµ ®Õm sè dßng trong tÖp cã tªn trong $filename råi g¸n vµo biÕn linecount.
Nh− vËy b¹n cã thÓ hiÓu mét c¸ch ®¬n gi¶n lµ nh÷ng g× viÕt trong gi÷a hai dÊu ` ` sÏ ®−îc coi
lµ lÖnh cña hÖ thèng vµ ®−îc thùc hiÖn, nh÷ng tham sè sau c¸c lÖnh hÖ thèng còng ®−îc tù
®éng g¸n trong phÇn nµy.
5.2 DÊu ( ' ) vµ ( " )
Kh¸c víi dÊu huyÒn ( ` ), nh÷ng th«ng tin gi÷a hai dÊu nh¸y (nh¸y ®¬n hoÆc nh¸y kÐp) ®−îc
coi lµ th«ng tin ®−îc sö dông trong lÖnh echo vµ sÏ ®−îc in ra mµn h×nh hay ®−îc g¸n vµo
biÕn d¹ng x©u. Nh− vËy, kh«ng thÓ viÕt c¸c lÖnh hÖ thèng gi÷a hai dÊu nh¸y mµ chØ c¸c ®Ó c¸c
x©u ký tù hay c¸c biÕn. Chóng ta xem xÐt nh÷ng dßng vÝ dô sau:
myname = "Viet Hung" # g¸n gi¸ trÞ cho mét biÕn
echo "$myname" # kÕt qu¶ ra mµn h×nh: Viet Hung
echo '$myname' # kÕt qu¶ ra mµn h×nh: $myname
B¹n cã thÓ dÔ thÊy sù kh¸c biÖt cña hai dÊu nh¸y ®¬n vµ nh¸y kÐp qua nh÷ng dßng lÖnh trªn,
®èi víi nh¸y kÐp (“), khi in ra sÏ ®−îc thùc hiÖn víi gi¸ trÞ cña biÕn sau dÊu $. §èi víi dÊu
nh¸y ®¬n (‘) th× sÏ in ra y nguyªn nh− trong dßng v¨n b¶n. Th«ng th−êng dÊu nh¸y ®¬n Ýt
®−îc sö dông nh−ng l¹i rÊt tiÖn lîi khi muèn in y nguyªn mét dßng v¨n b¶n, ®Æc biÖt lµ khi cã
c¸c ký tù ®Æc biÖt nh− $, \.
6. C¸c cÊu tróc phøc t¹p
Nh− ®∙ giíi thiÖu, ngoµi nh÷ng lÖnh ®¬n gi¶n nh− ®äc, in ra mµn h×nh vµ thùc hiÖn c¸c lÖnh
hÖ thèng, shell cßn hç trî viÖc sö dông c¸c lÖnh phøc t¹p h¬n nh− if-then-else, for/while.
PhÇn d−íi ®©y chóng t«i sÏ giíi thiÖu ®Õn nh÷ng cÊu tróc nµy.
6.1 CÊu tróc vßng lÆp: for
CÊu tróc vßng lÆp for ®−îc x©y dùng nh− sau:
for in
do

done
Qua vÝ dô d−íi ®©y b¹n cã thÓ hiÓu râ h¬n cÊu tróc vßng lÆp for.
VÝ dô 5: VÝ dô vÒ vßng lÆp for.
#!/bin/sh
#Vi du 5
VietHung soft group - [email protected]
word= "abcde" # khëi t¹o mét x©u
dem = 0 # khëi t¹o biÕn count
for letter in $word # vßng lÆp víi biÕn letter
do # lÖnh b¾t ®Çu vßng lÆp
count=`expr $count + 1` # t¨ng biÕn count lªn 1
echo "Letter $count is [$letter]" # in ra biÕn letter
done # lÖnh kÕt thóc vßng lÆp
Cã thÓ gi¶i thÝch nh− sau: víi mçi letter trong word th× thùc hiÖn nh÷ng lÖnh n»m trong do-
done, trong vÝ dô trªn bao gåm t¨ng biÕn count vµ in biÕn letter ra mµn h×nh.
Chó ý: Trong vÝ dô trªn cã dïng lÖnh expr ®Ó gäi lÖnh thùc hiÖn tÝnh to¸n cña hÖ thèng tÝnh
phÐp céng tr−íc khi g¸n vµo biÕn count.
6.2 CÊu tróc vßng lÆp: while
CÊu tróc cña vßng lÆp while ®−îc thÓ hiÖn nh− sau:
while [ <®iÒu kiÖn> ]
do

done
VÝ dô 6: VÝ dô vÒ vßng lÆp while.
#!/bin/sh
#Vi du 6
word= "abcde" # khëi t¹o mét x©u
dem = 0 # khëi t¹o biÕn count
while [ $count –lt 5 ] # vßng lÆp víi biÕn letter
do # lÖnh b¾t ®Çu vßng lÆp
count=`expr $count + 1` # t¨ng biÕn count lªn 1
echo "Letter $count is [$letter]" # in ra biÕn letter
done # lÖnh kÕt thóc vßng lÆp
C¸c b¹n cã thÓ thÊy ngay cÊu tróc hai vßng lÆp trªn gÇn hoµn toµn gièng nhau, chØ kh¸c
dßng for/while. Trong vÝ dô trªn, $count -lt 5 ®−îc coi lµ ®iÒu kiÖn cña vßng lÆp. PhÐp so
s¸nh “-lt” lµ phÐp so s¸nh “nhá h¬n hoÆc b»ng” (less-than) trong lÖnh test cña Unix/Linux.
LÖnh kiÓm tra ®iÒu kiÖn trªn sÏ tr¶ ra gi¸ ®óng (1) trÞ hoÆc sai (0) ®Ó thùc hiÖn tiÕp hay tho¸t
khái vßng lÆp.
Ngoµi phÐp so s¸nh “-lt" cßn cã -gt-lín h¬n, -eq-b»ng, -ne-kh«ng b»ng. Trong phÇn phô
lôc chóng t«i cã liÖt kª l¹i c¸c lÖnh, tham sè vµ phÐp to¸n cña shell, c¸c b¹n cã thÓ ®äc ®Ó biÕt
thªm c¸c phÐp to¸n kh¸c.
VietHung soft group - [email protected]
Chó ý: Trong phÇn ®iÒu kiÖn cña vßng lÆp while còng nh− trong nh÷ng ®iÒu kiÖn kh¸c, sau
dÊu “[“ vµ tr−íc dÊu “]” b¾t buéc ph¶i cã dÊu tr¾ng (dÊu c¸ch).
6.3 CÊu tróc vßng lÆp: until
Chóng ta cã thÓ hiÓu vßng lÆp until t−¬ng tù nh− while. CÊu tróc cña vong lÆp until nh− sau:
until [ <®iÒu kiÖn> ]
do

done
6.4 CÊu tróc rÏ nh¸nh: if - else
CÊu tróc rÏ nh¸nh cã thÓ ®−îc hiÓu qua c¸c tõ khãa cã cÊu tróc nh− sau:
if [ <®iÒu kiÖn> ]
then

[ elif then ] ...
[ else ]
fi
§èi víi cÊu tróc nµy cã hai d¹ng, ®¬n gi¶n vµ phøc t¹p. Sau ®©y chóng t«i sÏ giíi thiÖu hai
vÝ dô ®Ó c¸c b¹n hiÓu c¸ch sö dông.
VÝ dô 7: CÊu tróc if ®¬n gi¶n.
#!/bin/sh
#Vi du 7a
echo “Nhap so a: ”
read a
echo “Nhap so b: ”
read b
if [ $a –lt $b ] #kiÓm tra a nhá h¬n b kh«ng
then
echo “so a nho hon so b.”
elif [ $a –eq $b ] #kiÓm tra nÕu a b»ng b
then
echo “so a bang so b.”
else #tr−êng hîp cßn l¹i
echo “so a lon hon so b.”
fi #kÕt thóc
VÝ dô trªn thùc hiÖn ®èi víi c¸c sè, d−íi ®©y lµ vÝ dô ®èi víi ®−êng dÉn vµ tÖp trªn ®Üa.
VietHung soft group - [email protected]
#!/bin/sh
#Vi du 7b
if [ -f $dirname/$filename ]
then
echo "Tep [$filename] da ton tai."
elif [ -d $dirname ]
then
echo "Duong dan [$dirname] da ton tai."
else
echo "Ca duong dan [$dirname] va tep [$filename] khong ton
tai."
fi
Trong vÝ dô trªn, f lµ cê kiÓm tra sù tån t¹i cña mét tÖp, d lµ cê ®Ó kiÓm tra sù tån t¹i mét th−
môc.
VÝ dô 8: CÊu tróc if phøc t¹p. Trong vÝ dô nµy b¹n sÏ hiÓu c¸ch sö dông ®iÒu kiÖn kÐp; &&
(vµ), || (hoÆc).
#!/bin/sh
#Vi du 8a
echo “Nhap so a: ”
read a
echo “Nhap so b: ”
read b
echo “Nhap so c: ”
read c
if [ $a –lt $c ] && [ $b –lt $c ] #xem c cã lín nhÊt kh«ng
then
echo “so c lµ so lon nhat.”
fi
Trong vÝ dô trªn, && (vµ) lµ dÊu kiÓm tra kÐp ®Ó kÕt hîp hai ®iÒu kiÖn. Ta cã thÓ hiÓu ®iÒu
kiÖn sau if nh− sau: “NÕu a nhá h¬n c vµ b nhá h¬n c th× ...” Ngoµi ra cßn cã || (... hoÆc ...).
#!/bin/sh
#Vi du 8b
if [ -f $dir/$file ] || [ -f $dir/$newfile ]
then
echo "Hoac tep [$file] "
echo "hoac tep moi [$newfile] da ton tai"
VietHung soft group - [email protected]
elif [ -d $dir ]
then
echo "Duong dan [$dir] da ton tai"
else
echo "Ca duong dan [$dir], tep [$file va tep moi $newfile]
deu khong ton tai"
fi
6.5 CÊu tróc rÏ nh¸nh nhiÒu tr−êng hîp: case
CÊu tróc case cã thÓ ®−îc hiÓu qua tËp c¸c tõ khãa sau:
case
in
biÕn-1)

biÕn-2)

biÕn-3)

...
*) #cßn l¹i
exit
esac
VÝ dô 9: VÝ dô vÒ case ®èi víi tham sè ®Çu vµo cña mét tÖp ch−¬ng tr×nh.
#!/bin/sh
#Vi du 9
size=0
page=200
option = “”
while [ "$1" != "" ]
do
case $1
in
-?) echo “Su dung cac tham so –l,-p,-s.”
exit;;
-l) line = 50
page = 500
option = “$option page[$page] line[$line] “
shift;;
-p) line = 40
VietHung soft group - [email protected]
option = “$option page[$page] line[$line] “
shift;;
-s) size = 10;
shift 2;;
*) echo "Tham so vao khong co trong [p, l, s]";
exit;;
esac
if [ $size = 0 ]
then
size=`echo "$page / $lines" | bc`
else
lines=`echo "$page / $size" | bc`
fi
done
echo “$option $lines $size”
Trong vÝ dô trªn ®∙ ®−a ra c¸ch sö dông cÊu tróc case, ®ång thêi giíi thiÖu c¸ch nhËn vµ xö
lý tham sè ®Çu vµo khi ch¹y mét tÖp shell script. LÖnh shift lµ lÖnh dÞch tham sè ®Çu vµo sang
tr¸i 1 ®Ó thùc hiÖn c¸c tham sè tiÕp theo. §Æc biÖt trong ®ã cßn chØ c¸ch gäi m¸y tÝnh sè víi
sè cÇn tÝnh ®−îc ®−a vµo tr−íc.
6.6 Hµm
Shell hç trî khai b¸o vµ sö dông hµm con, ®©y lµ mét hç trî rÊt h÷u Ých nh−ng cÇn ph¶i khai
b¸o trong phÇn khëi ®éng cña ng−êi sö dông, cô thÓ lµ trong tÖp .profile.
Mét vÝ dô ®¬n gi¶n:
uppercase()
{
echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' \
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
}
Hµm trªn dïng ®Ó sö dông lÖnh tr cña hÖ thèng nh»m chuyÓn c¸c ch÷ th−êng thµnh ch÷ hoa.
ViÖc gäi hµm trªn chØ cÇn viÕt:
uppercase “thu chuyen doi”
hoÆc
smallword = “thu chuyen doi”
uppercase “$smallword”
Nh−ng nh− ®∙ nãi vÒ sù kh¸c biÖt cña kÕt qu¶ trong dÊu nh¸y kÐp, kÕt qu¶ cña hai dßng lÖnh
sau:
largeword = `uppercase “$smallword”`
VietHung soft group - [email protected]