Bài giảng Hệ điều hành Unix-Linux - Chương 8. Lập trình Shell - Nguyễn Tri Thanh

pdf 38 trang huongle 3880
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Hệ điều hành Unix-Linux - Chương 8. Lập trình Shell - Nguyễn Tri Thanh", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_he_dieu_hanh_unix_linux_chuong_8_lap_trinh_shell_n.pdf

Nội dung text: Bài giảng Hệ điều hành Unix-Linux - Chương 8. Lập trình Shell - Nguyễn Tri Thanh

  1. H ủiu hành UNIXLinux Chương 8. Lp trỡnh Shell Unix operating system Nguyen Tri Thanh Sep10 1
  2. Chương trỡnh shell  Ch ương trỡnh shell là mt tp hp cỏc cõu lnh vit trong mt file text  Nú ging chương trỡnh .bat trong MSDOS nhưng cú sc mnh ln hơn nhiu  Chương trỡnh shell cú th nhn d liu t ngưi dựng, t file và in kt qu ra màn hỡnh  Cú th dựng ủ to ra mt lnh riờng cho mỡnh  Shell giỳp tit kim thi gian ủ làm cỏc cụng vic hàng ngày  Cỏc bưc ủ to ra mt chương trỡnh shell  S dng mt chương trỡnh son tho text ủ to ra mt file chương trỡnh  Thay ủi thuc tớnh ca file va to ra thờm thuc tớnh kh thi: chmod +x ./script.sh  Cú th chy luụn chương trỡnh bng lnh: sh script.sh  Cỏc chương trỡnh shell nờn ủt ủuụi là .sh Unix operating system Nguyen Tri Thanh Sep10 2
  3. Trỡnh son tho văn bn trong Linux • Trỡnh son tho vim Unix operating system Nguyen Tri Thanh Sep10 3
  4. Trỡnh son tho văn bn trong Linux • Trỡnh son tho ca mc Unix operating system Nguyen Tri Thanh Sep10 4
  5. Cỏc loi shell  Mun xem cỏc loi shell cú trong h thng ta s dng lnh: cat /etc/shells  Mun xem shell hin ti: echo $SHELL  Phn này ch ủ cp ủn lp trỡnh shell trong bash Unix operating system Nguyen Tri Thanh Sep10 5
  6. Cỏc ký hiu ủc bit trong shell Khi ủt tờn bin cn trỏnh xung ủt vi cỏc ký t ủc bit này Unix operating system Nguyen Tri Thanh Sep10 6
  7. S dng bin trong shell  Bin h thng ủưc Linux to ra và qun lý (CH IN HOA)  Bin ngưi dựng: ủưc ngưi dựng to ra và qun lý (ch thưng) Unix operating system Nguyen Tri Thanh Sep10 7
  8. Quy tc ủt tờn bin  Tờn bin phi bt ủu vi mt ký t ch cỏi hoc du gch dưi (_), tip theo là mt hoc mt s ký t ch hoc s  Bin ủưc khi to khi ta gỏn giỏ tr cho bin  Khụng thờm cỏc du cỏch vào trưc và sau du gỏn, khi gỏn giỏ tr cho bin  Bin trong Linux phõn bit ch HOA thưng  Tỡm cỏc bin hp l và khong hp l:  no=10  new_variable=“Test”  number= 10  1stnumber=10  Truy cp giỏ tr ca mt bin ta dựng ký t $ trưc tờn bin, xúa 1 bin s dng lnh unset var  echo $new_variable  Lnh echo [tựy chn] [chui, bin] dựng ủ hin th văn bn hoc giỏ tr ca bin ra màn hỡnh  Tựy chn: n khụng hin th ký hiu xung dũng, e hin th cỏc ký t n ủc bit sau trong chui Unix operating system Nguyen Tri Thanh Sep10 8
  9. Trớch dn (quoting)  Trớch dn là cỏch bao quanh mt chui bng cp du nhỏy  Cho phộp mt s ký t ủc bit gi nguyờn như cỏc ký t bỡnh thưng  Cú 2 loi trớch dn mnh (‘ ’) và trớch dn yu (“ ”)  Trớch dn yu vn biờn dch cỏc bin trong chui  echo “Giỏ tr ca bin là: $var”  Trớch dn mnh bo toàn toàn b cỏc ký t trong chui  echo ‘Giỏ tr ca tham s ủu tiờn là: $var’ → Giỏ tr ca tham s ủu tiờn là: $var  ls l '[Vv]*‘ → ls: [Vv]*: No such file or directory Unix operating system Nguyen Tri Thanh Sep10 9
  10. Tớnh toỏn s hc trờn cỏc bin  Tớnh toỏn trong shell ủưc thc hin vi cỏc ủi s nguyờn  Cỏc phộp toỏn gm cú: cng (+), tr (), nhõn (*), chia (/), mod (%)  Tớnh toỏn trờn shell cú dng:  `expr `  Vớ d var1=10 var2=20 sum=`expr $var1 + $var2 ` product=`expr $var1 \* $var2 ` echo “Tng ca $var1 và $var2 là: $sum, tớch ca chỳng là $product” Unix operating system Nguyen Tri Thanh Sep10 10
  11. Tham s dũng lnh trong chương trỡnh shell  Là tham s ủưc truyn vào cho chương trỡnh trờn dũng lnh  Dựng ủ thụng bỏo cho chương trỡnh cỏc tựy chn, file cn x lý  rm test.txt  ls –a /usr/local  myshell 10 30  Truy cp cỏc tham s dũng lnh thụng qua cỏc bin h thng $1, , $9  echo $1 # hin th 10  echo $2 # hin th 30  Tng s tham s tr li qua bin $#, toàn b tham s thụng qua $* hay $@, bin $0 tr li tờn chương trỡnh  echo "Total number of command line argument are $#“  echo "$0 is script name“  echo "$1 is first argument“  echo "$2 is second argument“  echo "All of them are : $* or $@" Unix operating system Nguyen Tri Thanh Sep10 11
  12. Tham s dũng lnh trong chương trỡnh shell (tip)  Làm sao truy cp cỏc tham s cú s th t > 9?  Truy xut thụng qua $@ hay $*  Dựng lnh shift  shift s gỏn li giỏ tr ca cỏc tham s v trớ bng cỏch dch trỏi giỏ tr ca danh sỏch cỏc bin  $1 < $2, $2 < $3, $3 < $4,  Vớ d echo “Giỏ tr ca tham s th nht là: $1” shift echo “Giỏ tr ca tham s th 2 là: $1”  Kt qu tr v khi truyn vào cho chương trỡnh tham s: 3 6 5 ? Unix operating system Nguyen Tri Thanh Sep10 12
  13. Giỏ tr logic trong shell  Ngưc vi C hay cỏc ngụn ng lp trỡnh thụng dng, trong shell giỏ tr 0 nghĩa là true cũn giỏ tr khỏc 0 là false  Giỏ tr logic là mt giỏ tr quan trng trong cỏc cu trỳc ủiu khin  Giỏ tr logic trong bc Unix operating system Nguyen Tri Thanh Sep10 13
  14. Cu trỳc chương trỡnh shell  Là mt tp hp cỏc lnh và cỏc cu trỳc ủiu khin  Mi lnh ủưc vit trờn 1 dũng  Chỳ thớch trong chương trỡnh là phn nm sau du #  Dũng chỳ thớch ủu tiờn trong file chương trỡnh shell s bỏo cho h thng chn shell (chương trỡnh) nào ủ thc hin chương trỡnh (ngm ủnh là shell hin ti)  #!/bin/bash  #!/usr/bin/perl  #!/bin/csh  #!/bin/rm ủiu gỡ s xy ra??? Unix operating system Nguyen Tri Thanh Sep10 14
  15. Cu trỳc ủiu khin if  ðiu kin if ủưc s dng ủ ủưa ra cỏc quyt ủnh trong chương trỡnh shell  Nu ủiu kin ủưc cung cp là ủỳng thỡ cỏc lnh trong ủú ủưc thc thi  ðiu kin là mt phộp so sỏnh gia 2 giỏ tr, mt lnh kim tra hay kt qu tr v ca 1 chương trỡnh  Cu trỳc if ủiu_kin then #Khi nh s ủưc thc hin nu ủiu_kin là ủỳng fi  Vớ d: if cat $1 then echo e "\n\nFile $1, found and successfully echoed" fi  Trong linux cỏc lnh thưng tr v trng thỏi thành cụng hay li, nu thành cụng thỡ tr v giỏ tr 0, nu b li thỡ s tr v mó li khỏc 0 Unix operating system Nguyen Tri Thanh Sep10 15
  16. Lnh test hay []  ðưc dựng ủ kim tra xem mt biu thc ủỳng (0) hay sai (<>0)  Cỳ phỏp  test biu_thc  [ biu_thc ]  Vớ d: if test $1 gt 0 then echo "$1 number is positive" fi if [ $1 lt 0 ] then echo "$1 number is negative" fi Unix operating system Nguyen Tri Thanh Sep10 16
  17. Cỏc toỏn t s hc trong chương trỡnh shell Unix operating system Nguyen Tri Thanh Sep10 17
  18. Cỏc toỏn so sỏnh chui  S dng toỏn t so sỏnh chui trong toỏn t [[ ]] Vớ d if [[ $1 != "c" ]] ; then echo "The first argument must be c!" fi if [[ z $2 ]]; then echo “Missing the second argument!” fi Unix operating system Nguyen Tri Thanh Sep10 18
  19. Cỏc toỏn t kim tra file/thư mc Vớ d  Chương trỡnh hin th ni dung ca 1 file nu nú khỏc rng if [[ f $1 ]] ; then if [[ s $1 ]]; then cat $1 fi fi Unix operating system Nguyen Tri Thanh Sep10 19
  20. Cỏc toỏn t logic Vớ d  Chương trỡnh hin th ni dung ca 1 file nu nú khỏc rng if [[ n $1 ]] ; then if [ s $1 –a –f $1 ]; then cat $1 fi fi Unix operating system Nguyen Tri Thanh Sep10 20
  21. Cu trỳc r nhỏnh if else fi  Nu ủiu kin ủỳng thỡ thc hin khi lnh th nht, nu khụng thỡ thc hin khi lnh th 2 if ủiu_kin ; then Khi_lnh_1 else Khi_lnh_2 fi Vớ d if test $1 gt 0 then echo "$1 number is positive" else echo "$1 number is negative" fi Unix operating system Nguyen Tri Thanh Sep10 21
  22. Cu trỳc if then else fi ủa mc  Rt hiu qu khi phi kim tra nhiu trưng hp/giỏ tr ca 1 bin if ủiu_kin_1 ; then Khi_lnh_1 elif ủiu_kin_2 ; then Khi_lnh_2 else Khi_lnh_n fi  Vớ d if [ $1 gt 0 ]; then echo "$1 is positive" elif [ $1 lt 0 ]; then echo "$1 is negative" elif [ $1 eq 0 ]; then echo "$1 is zero" else echo "Opps! $1 is not number, give number" fi Unix operating system Nguyen Tri Thanh Sep10 22
  23. Cu trỳc la chn  Cu trỳc case expr in pattern1 ) Khi lnh 1 ;;  expr ủưc ủem ủi so sỏnh vi tng pattern, pattern2 ) Khi lnh 2 ;; nu nú bng nhau thỡ cỏc lnh tương ng s ủưc thi hành * )  Du ;; là tương ủương vi lnh break ca C, Khi lnh n ;; esac to ra ủiu khin nhy ti dũng ủu tiờn sau mó esac  Khụng như t khoỏ switch ca C, lnh case ca bash cho phộp ta kim tra giỏ tr ca expr da vào pattern, nú cú th cha cỏc kớ t ủi din *, ?  Biu thc *) cú ý nghĩa như nhón default trong lnh switch ca C Unix operating system Nguyen Tri Thanh Sep10 23
  24. Vớ d lnh case echo; echo "Hit a key, then hit return." read Keypress case "$Keypress" in [az] ) echo "Lowercase letter";; [AZ] ) echo "Uppercase letter";; [09] ) echo "Digit";; * ) echo "Punctuation, whitespace, or other";; esac # Allows ranges of characters in [square brackets].  Lnh read var s ủc giỏ tr nhp vào t bàn phớm, sau khi n Enter và lưu gi vào bin var Unix operating system Nguyen Tri Thanh Sep10 24
  25. Cu trỳc lp for  Lp ủi lp li 1 s ln mt khi lnh nào ủú for variable in danh_sỏch do # Khi lnh thao tỏc vi giỏ tr ca $variable done  Vớ d for i in 1 2 3 4 5 do echo "Welcome $i times" done  In ra bng nhõn ca 1 s n=$1 for i in 1 2 3 4 5 6 7 8 9 10 do echo "$n * $i = `expr $i \* $n`" done Unix operating system Nguyen Tri Thanh Sep10 25
  26. Cu trỳc lp for  Lp ủi lp li 1 s ln mt khi lnh nào ủú for (( expr1; expr2; expr3 )) do # Thc hin khi lnh cho ủn khi expr2 cú giỏ tr TRUE done Vớ d for (( i = 0 ; i <= 5 ; i++ )) do echo "Welcome $i times" done Unix operating system Nguyen Tri Thanh Sep10 26
  27. Cu trỳc lp while  Lp ủi lp li mt khi lnh nào ủú trong khi biu thc ủiu kin cú giỏ tr TRUE while ủiu_kin do #Khi lnh ủưc thc hin khi ủiu_kin là TRUE done  Vớ d n=$1 i=1 while [ $i le 10 ] do echo "$n * $i = `expr $i \* $n`" i=`expr $i + 1` done Unix operating system Nguyen Tri Thanh Sep10 27
  28. Cu trỳc lp until  Lp ủi lp li mt khi lnh nào ủú trong khi biu thc ủiu kin cú giỏ tr FALSE until ủiu_kin do #Khi lnh ủưc thc hin khi ủiu_kin là FALSE done  Vớ d until [[ "$var1" = end ]] do echo "Input variable #1 " echo "(end to exit)" read var1 echo "variable #1 = $var1" done Unix operating system Nguyen Tri Thanh Sep10 28
  29. ðưng ng (Pipe)  ðưng ng là cỏch ủ ủưa ủu ra ca mt chương trỡnh thành d liu ủu vào ca mt chương trỡnh khỏc mà khụng cn qua mt file trung gian  ðưng ng thc cht là mt vựng b nh tm thi, nơi lưu tr ủu ra ca mt lnh và sau ủú chuyn chỳng cho ủu vào ca lnh th hai  Lnh_1 | Lnh_2  ls | sort  ls | sort | less Unix operating system Nguyen Tri Thanh Sep10 29
  30. Thay th bin (variable substitution)  Thao tỏc và m rng bi n Unix operating system Nguyen Tri Thanh Sep10 30
  31. Vớ d option=$1 option=$1 var=${option:”20”} var=${option:=”20”} echo $var echo $var  Kt qu tr v khi $1 khụng xỏc ủnh và $1 cú giỏ tr là 10? Unix operating system Nguyen Tri Thanh Sep10 31
  32. Cỏc toỏn t string (tip) Unix operating system Nguyen Tri Thanh Sep10 32
  33. Vớ d v cỏc toỏn t pattern matching #!/bin/bash myfile=/usr/src/linux/Documentation/ide.txt echo ‘${myfile##*/}=’ ${myfile##*/} echo ‘basename $myfile =’ $(basename $myfile) echo ‘${myfile%/*}=’ ${myfile%/*} echo ‘dirname $myfile =’ $(dirname $myfile)  Lnh th 2 xoỏ xõu matching “*/” dài nht trong tờn file và tr v tờn file.  Lnh th 4 làm khp tt c mi th sau “/”, bt ủu t cui bin, b tờn file và tr v ủưng dn ca file  Kt qu ca tp lnh này $ ./pattern.sh ${myfile##*/} = ide.txt basename $myfile = ide.txt ${myfile%/*} = /usr/src/linux/Documentation dirname $myfile = /usr/src/linux/Documentation Unix operating system Nguyen Tri Thanh Sep10 33
  34. Thay th lnh  Dựng ủ gỏn kt qu tr v ca 1 lnh làm tham s cho 1 lnh khỏc hay cho 1 bin  Cõu lnh cn ly kt qu ủưc bao trong cp (` `)  rm `cat danh_sach_file_can_xoa.txt`  script_name=`basename $0`  echo "The name of this script is `basename $0`."  textfile_listing=`ls *.txt`  echo $textfile_listing Unix operating system Nguyen Tri Thanh Sep10 34
  35. ðnh hưng li cỏc thit b ủu vào/ra chun  Hu ht tt c cỏc lnh hin th kt qu ủu ra ra màn hỡnh, và ly d liu ủu vào t bàn phớm  Cú th gi kt qu ủu ra ra file cũng như ủc ủu vào t file bng cỏch s dng ủnh hưng li (redirect)  Ghi kt qu ca 1 lnh ra 1 file (thay vỡ màn hỡnh)  Lnh > tờn_file_ủu_ra  ls > danh_sach_file  ðnh hưng ủu vào  Lnh a.sorted.txt  tr “[az]” “[AZ]” b.txt Unix operating system Nguyen Tri Thanh Sep10 35
  36. ðnh hưng ủu vào vào khi lnh  ðưa d liu vào 1 khi lnh  Cú th ly d liu t 1 file filename=“dulieu.txt” name=“” while `true` do read name # ðc t file thay vỡ t bàn phớm echo $name if [[ "$name" = Smith ]] then break fi done <"$filename" Unix operating system Nguyen Tri Thanh Sep10 36
  37. Th tc / hàm trong chương trỡnh shell  ðnh nghĩa hàm  function_name(){ #Ni dung hàm }  Mun hàm tr v giỏ tr ta dựng lnh return  Trong hàm cú th truy cp bin toàn cc  Mun to bin cc b trong hàm ta dựng t khúa local  Gi hàm bng cỏch s dng tờn hàm  Cú th truyn tham s cho hàm  Khi gi hàm truyn theo tham s  Trong hàm truy cp cỏc tham s thụng qua cỏc bin v trớ function1(){ echo “This is the first argument $1” } function1 ARGUMENT Unix operating system Nguyen Tri Thanh Sep10 37
  38. Danh sỏch lnh  ð chy tun t mt dóy lnh trờn 1 dũng lnh ta phõn cỏch gia cỏc lnh du ;  Danh sỏch lnh AND  Cỏc lnh ủưc phõn cỏch nhau bi du &&  Lnh ủng sau ch ủưc thc hin khi tt c cỏc lnh trưc nú ủu tr v giỏ tr TRUE  cat a.txt && rm a.txt  Danh sỏch lnh OR  Cỏc lnh ủưc phõn cỏch bi du ||  Lnh sau ch ủưc thc hin khi tt c cỏc lnh ủng trưc nú tr v giỏ tr FALSE  cat a.txt || touch a.txt  Danh sỏch lnh AND và OR cú th thay th cho cu trỳc if then Unix operating system Nguyen Tri Thanh Sep10 38