Cơ bản về Linux Shell Script

Chia sẻ: Tieu Dao | Ngày: | Loại File: PDF | Số trang:15

0
216
lượt xem
60
download

Cơ bản về Linux Shell Script

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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 sell

Chủ đề:
Lưu

Nội dung Text: Cơ bản về Linux Shell Script

  1. 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
  2. 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 - viethung_group@email.com
  3. 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 - viethung_group@email.com
  4. 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 - viethung_group@email.com
  5. 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 - viethung_group@email.com
  6. 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 - viethung_group@email.com
  7. 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 [ ] 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 - viethung_group@email.com
  8. 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 [ ] 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 [ ] 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 - viethung_group@email.com
  9. #!/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
  10. 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 - viethung_group@email.com
  11. 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
  12. 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 >>
  13. Cã c¸c tham sè nh− sau: §iÒu kiÖn víi c¸c tÖp, th− môc: -f sù tån t¹i cña tÖp th«ng th−êng. -d sù tån t¹i cña th− môc. -c sù tån t¹i tÖp d¹ng ký tù. -r sù tån t¹i vµ cã thÓ ®äc ®−îc. -s sù tån t¹i vµ cã kÝch th−íc lín h¬n 0. -w sù tån t¹i vµ cã thÓ ghi ®−îc. -x 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
  14. $- 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
Đồng bộ tài khoản