SlideShare a Scribd company logo
1 of 15
Download to read offline
VietHung soft group - viethung_group@email.com
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 - viethung_group@email.com
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 [<tªn shell>]
CÊu tróc lÖnh chsh nh− sau:
chsh [-s <tªn shell>] [ -l ] [<tªn ng−êi>]
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 - viethung_group@email.com
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 <enter>
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 - viethung_group@email.com
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Þ> 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 - viethung_group@email.com
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 1> [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 - viethung_group@email.com
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 <biÕn ký tù> in <x©u>
do
<c¸c lÖnh cÇn thùc hiÖn>
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 - viethung_group@email.com
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
<c¸c lÖnh>
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 - viethung_group@email.com
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
<c¸c lÖnh>
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
<lÖnh>
[ elif <lÖnh> then <lÖnh> ] ...
[ else <lÖnh> ]
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 - viethung_group@email.com
#!/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 - viethung_group@email.com
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 <biÕn>
in
biÕn-1)
<lÖnh>
biÕn-2)
<lÖnh>
biÕn-3)
<lÖnh>
...
*) #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 - viethung_group@email.com
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 - viethung_group@email.com
largeword = `uppercase $smallword`
lµ kh¸c nhau. Dßng thø nhÊt tr¶ ra: “THU CHUYEN DOI”, cßn dong thø hai se tra ra:
“THU”.
7. Lµm viÖc víi c¸c tÖp
Trong vÝ dô 7b chóng t«i ®∙ giíi thiÖu c¸ch kiÓm tra sù tån t¹i cña mét tÖp hay m«t ®−êng dÉn
nªn trong phÇn nµy sÏ kh«ng ®Ò cËp ®Õn n÷a mµ chØ ®−a ra c¸ch ®äc vµ ghi mét tÖp.
#!/bin/sh
#Vi du dem so tep trong thu muc
count=1
for file in `ls -1 *`
do
echo "$count: $file" >> $mnu0
count=`expr $count + 1`
done
#Vi du doc va ghi tu tep inputfile sang tep outputfile
filelength=`wc -l $inputfile | cut -c1-8`
filelength=`expr $filelength + 0`
while $filelength
do
line=`tail -$filelength $inputfile | head -1`
words=`s_count_args $line`
echo "$line = $words words" >> $outputfile
file_length=`expr $filelength - 1`
done
Trong vÝ dô trªn cã sö dông mét vµi kü thuËt nh− ®äc phÇn cuèi cña tÖp ®Çu vµo (víi lÖnh
tail)sau ®ã l¹i lÊy dßng ®Çu cña ®o¹n ®ã (víi lÖnh head -1) ®Ó lÊy ra ®−îc tõng dßng tõ trªn
xuèng cña tÖp ®Çu vµo. Hai tham sè -c1-8 cña lÖnh wc dïng ®Ó bá phÇn tªn tÖp trong kÕt qu¶
liÖt kª sè dßng trong tÖp ®ã. Ngoµi ra, c¸c b¹n cã thÓ dïng lÖnh:
Cat >> <tªn tÖp> <<-EOA
®Ó t¹o ra mét tÖp tr−íc víi tªn trong <tªn tÖp>.
8.T×m hiÓu lÖnh test
test lµ lÇ lÖnh kiÓm tra sù tån t¹i cña c¸c tÖp, th− môc vµ so s¸nh biÕn sè. CÊu tróc cña lÖnh
test nh− sau:
test <®iÒu kiÖn>
hoÆc [<®iÒu kiÖn>]
VietHung soft group - viethung_group@email.com
Cã c¸c tham sè nh− sau:
§iÒu kiÖn víi c¸c tÖp, th− môc:
-f <tªn> sù tån t¹i cña tÖp th«ng th−êng.
-d <tªn> sù tån t¹i cña th− môc.
-c <tªn> sù tån t¹i tÖp d¹ng ký tù.
-r <tªn> sù tån t¹i vµ cã thÓ ®äc ®−îc.
-s <tªn> sù tån t¹i vµ cã kÝch th−íc lín h¬n 0.
-w <tªn> sù tån t¹i vµ cã thÓ ghi ®−îc.
-x <tªn> sù tån t¹i vµ cã thÓ ch¹y ®−îc.
§iÒu kiÖn víi c¸c x©u ký tù:
-n s1 x©u s1 cã ®é dµi lín h¬n 0.
-z s1 x©u s1 cã ®é dµi b»ng 0.
s1 = s2 hai x©u s1 vµ s2 gièng nhau.
s1 != s2 hai x©u s1 vµ s2 kh«ng gièng nhau.
s1 < s2 x©u s1 ®øng tr−íc x©u s2 theo thø tù cña b¶ng m∙ ASCII.
s1 > s2 x©u s1 ®øng sau x©u s2 theo thø tù cña b¶ng m∙ ASCII.
string biÕn string kh«ng rçng (not null).
§iÒu kiÖn víi c¸c sè:
n1 -eq n2 so s¸nh b»ng.
n1 -ge n2 so s¸nh lín h¬n hoÆc b»ng.
n1 -gt n2 so s¸nh lín h¬n.
n1 -le n2 so s¸nh nhá h¬n hoÆc b»ng.
n1 -lt n2 so s¸nh nhá h¬n.
n1 -ne n2 so s¸nh kh«ng b»ng.
VÝ dô:
if test $# -gt 0 nÕu cã tham sè
if [ -n “$1” ] nÕu tham sè kh¸c trèng
if [ $count -lt 5 ] nÕu gi¸ trÞ cña biÕn count nhá h¬n 5
Phô lôc
Danh s¸ch phÐp to¸n, lÖnh vµ tham sè m« tr−êng
$0 tªn tÖp ®ang ®−îc thùc hiÖn
$1 tham sè thø nhÊt
$2 tham sè thø hai
...
$# sè tham sè
$@ liÖt kª tÊt c¶ c¸c tham sè
$$ chØ sè cña process
VietHung soft group - viethung_group@email.com
$- cê (flag)
+ phÐp céng
- phÐp trõ
* phÐp nh©n
/ phÐp chia
% phÐp lÊy phÇn d−
== so s¸nh b»ng
!= so s¸nh kh«ng b»ng
< so s¸nh nhá h¬n
> so s¸nh lín h¬n
>= so s¸nh lín h¬n hoÆc b»ng
<= so s¸nh nhá h¬n hoÆc b»ng
| | hoÆc
&& vµ
$USER tªn ng−êi sö dông hiÖn t¹i
echo in ra mµn h×nh
read ®äc tõ bµn phÝm
$HOME/$home th− môc chÝnh cña ng−êi dïng hiÖn t¹i
$dir
$path

More Related Content

Similar to Co ban ve linuxshellscript

Similar to Co ban ve linuxshellscript (20)

Excel
ExcelExcel
Excel
 
Excel
ExcelExcel
Excel
 
Giáo trình excel
Giáo trình excelGiáo trình excel
Giáo trình excel
 
Hướng dẫn sử dụng tin học văn phòng rất chi tiết
Hướng dẫn sử dụng tin học văn phòng rất chi tiếtHướng dẫn sử dụng tin học văn phòng rất chi tiết
Hướng dẫn sử dụng tin học văn phòng rất chi tiết
 
Chuong3
Chuong3Chuong3
Chuong3
 
Lý thuyết excel
Lý thuyết excelLý thuyết excel
Lý thuyết excel
 
Thiết kế và chế tạo mô hình thực hành zen của omron 3442153
Thiết kế và chế tạo mô hình thực hành zen của omron 3442153Thiết kế và chế tạo mô hình thực hành zen của omron 3442153
Thiết kế và chế tạo mô hình thực hành zen của omron 3442153
 
Ky thuat lap_trinh
Ky thuat lap_trinhKy thuat lap_trinh
Ky thuat lap_trinh
 
Kỹ thuật lập trình.
Kỹ thuật lập trình.Kỹ thuật lập trình.
Kỹ thuật lập trình.
 
Chuong 5 excel
Chuong 5 excelChuong 5 excel
Chuong 5 excel
 
Lohong Buoi34
Lohong Buoi34Lohong Buoi34
Lohong Buoi34
 
Lohong Buoi34
Lohong Buoi34Lohong Buoi34
Lohong Buoi34
 
Lohong Buoi34
Lohong Buoi34Lohong Buoi34
Lohong Buoi34
 
Ms word
Ms wordMs word
Ms word
 
Giáo trình thiết kế web
Giáo trình thiết kế webGiáo trình thiết kế web
Giáo trình thiết kế web
 
Truyenhinhso
TruyenhinhsoTruyenhinhso
Truyenhinhso
 
Truyenhinhso
TruyenhinhsoTruyenhinhso
Truyenhinhso
 
Ky thuat lap trinh
Ky thuat lap trinhKy thuat lap trinh
Ky thuat lap trinh
 
Ki thuat lap_trinh
Ki thuat lap_trinhKi thuat lap_trinh
Ki thuat lap_trinh
 
Ky thuat lap_trinh
Ky thuat lap_trinhKy thuat lap_trinh
Ky thuat lap_trinh
 

Recently uploaded

50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...
50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...
50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...Nguyen Thanh Tu Collection
 
ĐẢNG LÃNH ĐẠO HAI CUỘC KHÁNG CHIẾN GIÀNH ĐỘC LẬP HOÀN TOÀN, THỐNG NHẤT ĐẤT NƯ...
ĐẢNG LÃNH ĐẠO HAI CUỘC KHÁNG CHIẾN GIÀNH ĐỘC LẬP HOÀN TOÀN, THỐNG NHẤT ĐẤT NƯ...ĐẢNG LÃNH ĐẠO HAI CUỘC KHÁNG CHIẾN GIÀNH ĐỘC LẬP HOÀN TOÀN, THỐNG NHẤT ĐẤT NƯ...
ĐẢNG LÃNH ĐẠO HAI CUỘC KHÁNG CHIẾN GIÀNH ĐỘC LẬP HOÀN TOÀN, THỐNG NHẤT ĐẤT NƯ...PhcTrn274398
 
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...Nguyen Thanh Tu Collection
 
Bai 1 cong bo mot cong trinh nghien cuu khoa hoc
Bai 1 cong bo mot cong trinh nghien cuu khoa hocBai 1 cong bo mot cong trinh nghien cuu khoa hoc
Bai 1 cong bo mot cong trinh nghien cuu khoa hocVnPhan58
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhvanhathvc
 
Trích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxTrích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxnhungdt08102004
 
Ma trận - định thức và các ứng dụng trong kinh tế
Ma trận - định thức và các ứng dụng trong kinh tếMa trận - định thức và các ứng dụng trong kinh tế
Ma trận - định thức và các ứng dụng trong kinh tếngTonH1
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líDr K-OGN
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...Nguyen Thanh Tu Collection
 
Hệ phương trình tuyến tính và các ứng dụng trong kinh tế
Hệ phương trình tuyến tính và các ứng dụng trong kinh tếHệ phương trình tuyến tính và các ứng dụng trong kinh tế
Hệ phương trình tuyến tính và các ứng dụng trong kinh tếngTonH1
 
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )lamdapoet123
 
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoabài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa2353020138
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Nguyen Thanh Tu Collection
 
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxChàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxendkay31
 
cuộc cải cách của Lê Thánh Tông - Sử 11
cuộc cải cách của Lê Thánh Tông -  Sử 11cuộc cải cách của Lê Thánh Tông -  Sử 11
cuộc cải cách của Lê Thánh Tông - Sử 11zedgaming208
 
Sơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdfSơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdftohoanggiabao81
 
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptxCHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx22146042
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...Nguyen Thanh Tu Collection
 
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào môBryan Williams
 

Recently uploaded (20)

50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...
50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...
50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...
 
ĐẢNG LÃNH ĐẠO HAI CUỘC KHÁNG CHIẾN GIÀNH ĐỘC LẬP HOÀN TOÀN, THỐNG NHẤT ĐẤT NƯ...
ĐẢNG LÃNH ĐẠO HAI CUỘC KHÁNG CHIẾN GIÀNH ĐỘC LẬP HOÀN TOÀN, THỐNG NHẤT ĐẤT NƯ...ĐẢNG LÃNH ĐẠO HAI CUỘC KHÁNG CHIẾN GIÀNH ĐỘC LẬP HOÀN TOÀN, THỐNG NHẤT ĐẤT NƯ...
ĐẢNG LÃNH ĐẠO HAI CUỘC KHÁNG CHIẾN GIÀNH ĐỘC LẬP HOÀN TOÀN, THỐNG NHẤT ĐẤT NƯ...
 
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
 
Bai 1 cong bo mot cong trinh nghien cuu khoa hoc
Bai 1 cong bo mot cong trinh nghien cuu khoa hocBai 1 cong bo mot cong trinh nghien cuu khoa hoc
Bai 1 cong bo mot cong trinh nghien cuu khoa hoc
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
 
Trích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxTrích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docx
 
Ma trận - định thức và các ứng dụng trong kinh tế
Ma trận - định thức và các ứng dụng trong kinh tếMa trận - định thức và các ứng dụng trong kinh tế
Ma trận - định thức và các ứng dụng trong kinh tế
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
 
Hệ phương trình tuyến tính và các ứng dụng trong kinh tế
Hệ phương trình tuyến tính và các ứng dụng trong kinh tếHệ phương trình tuyến tính và các ứng dụng trong kinh tế
Hệ phương trình tuyến tính và các ứng dụng trong kinh tế
 
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
 
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoabài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
 
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxChàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
 
cuộc cải cách của Lê Thánh Tông - Sử 11
cuộc cải cách của Lê Thánh Tông -  Sử 11cuộc cải cách của Lê Thánh Tông -  Sử 11
cuộc cải cách của Lê Thánh Tông - Sử 11
 
Sơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdfSơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdf
 
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptxCHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
 
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
 

Co ban ve linuxshellscript

  • 1.
  • 2. VietHung soft group - viethung_group@email.com 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).
  • 3. VietHung soft group - viethung_group@email.com 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 [<tªn shell>] CÊu tróc lÖnh chsh nh− sau: chsh [-s <tªn shell>] [ -l ] [<tªn ng−êi>] 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.
  • 4. VietHung soft group - viethung_group@email.com 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 <enter> 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
  • 5. VietHung soft group - viethung_group@email.com 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Þ> 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.
  • 6. VietHung soft group - viethung_group@email.com 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 1> [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`
  • 7. VietHung soft group - viethung_group@email.com 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 <biÕn ký tù> in <x©u> do <c¸c lÖnh cÇn thùc hiÖn> 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
  • 8. VietHung soft group - viethung_group@email.com 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 <c¸c lÖnh> 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.
  • 9. VietHung soft group - viethung_group@email.com 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 <c¸c lÖnh> 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 <lÖnh> [ elif <lÖnh> then <lÖnh> ] ... [ else <lÖnh> ] 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.
  • 10. VietHung soft group - viethung_group@email.com #!/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"
  • 11. VietHung soft group - viethung_group@email.com 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 <biÕn> in biÕn-1) <lÖnh> biÕn-2) <lÖnh> biÕn-3) <lÖnh> ... *) #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
  • 12. VietHung soft group - viethung_group@email.com 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”`
  • 13. VietHung soft group - viethung_group@email.com largeword = `uppercase $smallword` lµ kh¸c nhau. Dßng thø nhÊt tr¶ ra: “THU CHUYEN DOI”, cßn dong thø hai se tra ra: “THU”. 7. Lµm viÖc víi c¸c tÖp Trong vÝ dô 7b chóng t«i ®∙ giíi thiÖu c¸ch kiÓm tra sù tån t¹i cña mét tÖp hay m«t ®−êng dÉn nªn trong phÇn nµy sÏ kh«ng ®Ò cËp ®Õn n÷a mµ chØ ®−a ra c¸ch ®äc vµ ghi mét tÖp. #!/bin/sh #Vi du dem so tep trong thu muc count=1 for file in `ls -1 *` do echo "$count: $file" >> $mnu0 count=`expr $count + 1` done #Vi du doc va ghi tu tep inputfile sang tep outputfile filelength=`wc -l $inputfile | cut -c1-8` filelength=`expr $filelength + 0` while $filelength do line=`tail -$filelength $inputfile | head -1` words=`s_count_args $line` echo "$line = $words words" >> $outputfile file_length=`expr $filelength - 1` done Trong vÝ dô trªn cã sö dông mét vµi kü thuËt nh− ®äc phÇn cuèi cña tÖp ®Çu vµo (víi lÖnh tail)sau ®ã l¹i lÊy dßng ®Çu cña ®o¹n ®ã (víi lÖnh head -1) ®Ó lÊy ra ®−îc tõng dßng tõ trªn xuèng cña tÖp ®Çu vµo. Hai tham sè -c1-8 cña lÖnh wc dïng ®Ó bá phÇn tªn tÖp trong kÕt qu¶ liÖt kª sè dßng trong tÖp ®ã. Ngoµi ra, c¸c b¹n cã thÓ dïng lÖnh: Cat >> <tªn tÖp> <<-EOA ®Ó t¹o ra mét tÖp tr−íc víi tªn trong <tªn tÖp>. 8.T×m hiÓu lÖnh test test lµ lÇ lÖnh kiÓm tra sù tån t¹i cña c¸c tÖp, th− môc vµ so s¸nh biÕn sè. CÊu tróc cña lÖnh test nh− sau: test <®iÒu kiÖn> hoÆc [<®iÒu kiÖn>]
  • 14. VietHung soft group - viethung_group@email.com Cã c¸c tham sè nh− sau: §iÒu kiÖn víi c¸c tÖp, th− môc: -f <tªn> sù tån t¹i cña tÖp th«ng th−êng. -d <tªn> sù tån t¹i cña th− môc. -c <tªn> sù tån t¹i tÖp d¹ng ký tù. -r <tªn> sù tån t¹i vµ cã thÓ ®äc ®−îc. -s <tªn> sù tån t¹i vµ cã kÝch th−íc lín h¬n 0. -w <tªn> sù tån t¹i vµ cã thÓ ghi ®−îc. -x <tªn> sù tån t¹i vµ cã thÓ ch¹y ®−îc. §iÒu kiÖn víi c¸c x©u ký tù: -n s1 x©u s1 cã ®é dµi lín h¬n 0. -z s1 x©u s1 cã ®é dµi b»ng 0. s1 = s2 hai x©u s1 vµ s2 gièng nhau. s1 != s2 hai x©u s1 vµ s2 kh«ng gièng nhau. s1 < s2 x©u s1 ®øng tr−íc x©u s2 theo thø tù cña b¶ng m∙ ASCII. s1 > s2 x©u s1 ®øng sau x©u s2 theo thø tù cña b¶ng m∙ ASCII. string biÕn string kh«ng rçng (not null). §iÒu kiÖn víi c¸c sè: n1 -eq n2 so s¸nh b»ng. n1 -ge n2 so s¸nh lín h¬n hoÆc b»ng. n1 -gt n2 so s¸nh lín h¬n. n1 -le n2 so s¸nh nhá h¬n hoÆc b»ng. n1 -lt n2 so s¸nh nhá h¬n. n1 -ne n2 so s¸nh kh«ng b»ng. VÝ dô: if test $# -gt 0 nÕu cã tham sè if [ -n “$1” ] nÕu tham sè kh¸c trèng if [ $count -lt 5 ] nÕu gi¸ trÞ cña biÕn count nhá h¬n 5 Phô lôc Danh s¸ch phÐp to¸n, lÖnh vµ tham sè m« tr−êng $0 tªn tÖp ®ang ®−îc thùc hiÖn $1 tham sè thø nhÊt $2 tham sè thø hai ... $# sè tham sè $@ liÖt kª tÊt c¶ c¸c tham sè $$ chØ sè cña process
  • 15. VietHung soft group - viethung_group@email.com $- cê (flag) + phÐp céng - phÐp trõ * phÐp nh©n / phÐp chia % phÐp lÊy phÇn d− == so s¸nh b»ng != so s¸nh kh«ng b»ng < so s¸nh nhá h¬n > so s¸nh lín h¬n >= so s¸nh lín h¬n hoÆc b»ng <= so s¸nh nhá h¬n hoÆc b»ng | | hoÆc && vµ $USER tªn ng−êi sö dông hiÖn t¹i echo in ra mµn h×nh read ®äc tõ bµn phÝm $HOME/$home th− môc chÝnh cña ng−êi dïng hiÖn t¹i $dir $path