1. Trang chủ
  2. » Giáo án - Bài giảng

Lập trình trong môi trường shell unixlinux

80 203 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 80
Dung lượng 1,16 MB

Nội dung

LINUX, Lp trình shell ________________________________________________________________________ 1 UNIX/Linux LP TRÌNH TRONG MÔI TRNG SHELL 1. Shell ca UNIX/LINUX 2. S DNG SHELL NH NGÔN NG LP TRÌNH 2.1. iu khin shell t dòng lnh 2.2. iu khin shell bng tp tin kch bn (script file) 2.3. Thc thi script 3. CÚ PHÁP NGÔN NG SHELL 3.1. S dng bin 3.1.1. Các kí t đc bit (Metalcharacters ca Shell) 3.1.1.1 Chuyn hng vào/ra 3.1.1.2 Các kí t đc bit kim soát tin trình 1.& (Ampersand) 2.Ngoc đn ( ; ) 3. Du nháy ` ` (backquotes) 4.ng dn (Pipelines) 3.1.1.3 Du bc chui (quoting) 1.Backslash (\) 3.1.2. Biên môi trng (environment variable) 3.1.3. Bin tham s (parameter variable) 3.2. iu kin 3.2.1. Lnh test hoc [ ] 3.3. Cu trúc điu khin 3.3.1. Lnh if 3.3.2. Lnh elif 3.3.3. Vn đ phát sinh vi các bin 3.3.4. Lnh for 3.3.5. Lnh while 3.3.6. Lnh intil 3.3.7. Lnh case 3.4. Danh shell thc thi lnh (Lists) 3.4.1. Danh sách AND (&&) 3.4.2 Danh sáchl OR ( || ) 3.4.3. Khi lnh 3.5. Hàm (function) 3.5.1 Bin cc b  và bên toàn cc 3.5.2. Hàm và cách truyn tham s 3.6. Các lnh ni ti ca shell 3.6.1. break 3.6.2 continue ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp trình shell ________________________________________________________________________ 2 3.6.3. Lnh : (lnh rng) 3.6.4. Lnh . (thc thi) 3.6.5. eval 3.6.6. exec 3.6.7. exit n 3.6.8. export 3.6.9 Lnh expr 3.6.10. printf 3.6.11 return 3.6.12 set 3.6.13. shift 3.6.14. trap 3.6.15. unset 3.7. Ly v kt qu ca mt lnh 3.7.1. c lng toán hc 3.7.2. M rng tham s 3.8. Tài liu Here 4. DÒ LI (DEBUG) CA SCRIPT 5. HIN TH MÀU SC (COLOR) 5.1. Màu ch 5.2. Thuc tính vn bn 5.3. Màu nn 6. XÂY DNG NG DNG BNG NGÔN NG SCRIPT 6.1. Phn tích yêu cu 6.2. Thit k ng dng 7. KT CHNG 8. MT S TÓM TT 8.1 To và chy các chng trình shell 8.1.1 To mt chng trình shell 8.1.2 Chy chng trình shell 8.2 S dng bin 8.2.1 Gán mt giá tr cho bin 8.2.2 Truy nhp giá tr ca mt bin 8.2.3 Tham s v  trí và bin xây dng sn trong shell 8.2.4 Ký t đc bit và cách thoát khi ký t đc bit 8.2.5 Lnh test 8.3 Các hàm shell 8.3.2 Các ví d to hàm 8.4 Các mnh đ điu kin 8.4.1 Mnh đ if 8.4.2 Mnh đ case ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp trình shell ________________________________________________________________________ 3 8.5 Các mnh đ vòng lp 8.5.1 Mnh đ for 8.5.2 Mnh đ while 8.5.3 Mnh đ until 8.5.4 Câu lnh shift TÀI LIU THAM KHO ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp trình shell ________________________________________________________________________ 4 Trc khi bt tay vào vit nhng ng dng không cn ti các ngôn ng lp trình phc tp khác, chng này s đ cp cách tip cn vi ngôn ng kch bn (script) ca h v (shell, t đây s gi là shell script), dùng điu khin và tng tác vi Linux. Khi tip cn vi DOS, DOS cung cp mt shell đ to các x lí theo lô trên nhng tp tin *.bat, tng đi rõ ràng, đn gin. Tuy nhiên shell ca DOS không mnh và hu dng bng shell script trên Linux. Tài liu này s cung cp nhng kin thc va đ đ ngi dùng UNIX/LINUX có th dùng shell to ra các chng trình thc thi hu hiu, thm chí còn có th dùng shell đ thc hin đc mi thao tác kim soát h điu hành (nh các nhà chuyên nghip vn nói). Nhng đích chính cn đt đc nh sau: 1.Shell và mc đích s dng 2.Cú pháp và cách điu khin các lnh ca ngôn ng shell 3.Hin th và th hin màu sc 4.các ví d thc hành 1. Shell ca UNIX/Linux Mi th đc thc hin trên Unix đu bi tin trình. Vy to ra tin trình nh th nào ? Cách th nht là vit ra các chng trình mà các chng trình này bit cách to ra tin trình (C/C++). Tuy nhiên cách này đòi hi nhiu hiu bit và n lc. Cng nh các h điu hành làm vic kiu o khác, Unix h tr mt phng tin x lí lnh làm giao din gia lnh máy (mà ngi dùng đa vào) và vic thc thi ca lnh đó (bi Unix). Phng tin đó gi là shell. T khi ra đi Unix đã có vài kiu shell, đó là Bourne, C, Korn shell. Thc ra shell làm gì ? Tòan b mc đích ca shell là đ khi đng các tin trình x lí lnh đa vào: yêu cu đa (dòng) lnh vào, đc đu vào, thông dch dòng lnh đó, và to ra tin trình đ thc hin lnh đó. Nói cách khác shell quét dòng lnh đa vào máy tính, cu hình môi trng thc thi và to tin trình đ thc hin lnh. Hình 2: V trí ca shell khi “thc hin” lnh ca ngi dùng Shell dch các lnh nhp vào thành li gi h thng, chuyn các ký hiu dn hng >, >> hay | thành d liu di chuyn gia các lnh. c các bin môi trng đ tìm ra thông tin thc thi lnh. Nh vy tìm hiu shell thc t là hc mt ngôn ng lp trình, cho dù không phc tp nh C, hay các ngôn ng khác, nhng cng phi qua nhng đòi hi cn thit. Trong Unix/Linux có các lai shell khác nhau và có th la chn đ dùng theo nhu cu mà ngi dùng thy phù hp. Hình 2 là mô hình tng tác gia các shell, chng trình ng dng, h X-Window và ht nhân. ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp trình shell ________________________________________________________________________ 5 Cac ung dung C shell (csh) Bourne Again shell (bash) X-Wimdows shell Nhan HDH Hình 2 Linux/Unix tách bit các ng dng, lnh gi các hàm chc nng ca nhân thành nhng đn th rt nh (tin trình). Tuy nhiên, nhiu lnh ca Linux có th kt hp li vi nhau đ to nên chc nng tng hp rt mnh m. Ví d: $ ls -al | more lnh trên đc kt hp bng hai lnh, ls lit kê toàn b danh sách tp và th mc trên đa ra màn hình, nu danh sách quá dài, ls chuyn d liu kt xut cho lnh more x lý hin th kt qu thành tng trang màn hình. Linux có cách kt hp d liu kt xut ca các lnh vi nhau thông qua c ch chuyn tip (redirect), ng dn (pipe). Kt hp các lnh vi nhau ch bng dòng lnh không cha đ. Nu mun t hp nhiu lnh đng thi vi nhau và tùy vào tng điu kin, kt xut ca lnh, mà có nhng ng x thích hp thì sao? Lúc đó s dùng đn các cu trúc lp trình r nhánh nh if, case. Trng hp bn mun thc hin các thao tác vòng lp, phi dùng các lnh nh for, while Shell chính là trình din dch cung cp cho ngi dùng kh nng này. Hu ht các Shell trong Unix/Linux s dng mt ngôn ng gn ging vi C (điu này cng d hiu bi trong th gii Unix/Linux, C là ngôn ng lp trình thng tr). Ngôn ng Shell càng ging C thì lp trình viên hay ngi điu khin Linux càng cm thy thân thin vi HH. H thng cung cp cho ngi dùng rt nhiu chng trình shell. Mi shell có mt s tin ích nh h tr ch đ gõ phím, ghi nh lnh. Kt hp các tin ích ca shell đ to ra mt chng trình chy đc, thì mt chng trình nh vy đc lu di dng mt tp, gi là tp kch bn (script, hãy th m mt tp nh vy và quan sát cu trúc ca tp). Vit đc mt tp script, thc cht là đã lp trình theo shell. Mt khi đã quen thuc vi mt shell và cách hot đng ca shell đó, ngi dùng có th làm ch đc các shell khác mt cách đ dàng. Các shell trên Unix/Linux: sh ( Bourne ) shell nguyên thy áp dng cho Unix Csh, tcsh và zsh dòng shell s d ng cu trúc lnh ca C làm ngôn ng kch bn. c to ra đu tiên bi Bia Joy. Là shell thông dng th hai sau bash shell. ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp trình shell ________________________________________________________________________ 6 bash shell ch yu ca Linux. Ra đi t d án GNU. bash (Vit tt ca Bourne Again Shell có li đim là mã ngun đc công b rng rãi. Nu bash cha có sn trong h thng Unix hay Linux, hãy ti v, biên dch và s dng min phí ti đa ch www.gnu.org rc shell mô rng ca csh vi nhiu tng thích vi ngôn ng C hn. rc cng ra đi t d án GNU. Shell chun thng đc các nhà phân phi Linux s dng hin nay là bash shell. Khi cài đt Linux, trình cài đt thng mc đnh bash là shell khi đng. Có th tìm thy chng trình shell này trong th mc /bin vi tên chng trình là bash. bash đôi khi là mt chng trình nh phân đôi khi là mt script gi đn liên kt nh phân khác. Có th dùng lnh file đ xem bash là mt tp tin nh phân hay script nh sau: $ file /bin/bash /bin/bash: ELF 32-bit LSB executable. Intel 80386 nu kt qu kt xut là dng ELF thì có ngha là bash là chng trình nh phân. Tuy bash là shell s dng ph bin trong Linux, nhng các ví d v lp trình s s dng ngôn ng và lnh ca shell sh bi vì sh là shell nguyên thy, có th chy trên c Unix. Bng lnh file ta s thy trong hu ht các bn Linux hin nay sh ch là liên kt đn bash mà thôi. Ví d: $ file /bin/sh /bin/sh: symbolic link to bash điu này có ngha là bash hoàn toàn có th din dch và điu khin các lnh ca shell sh. 2. S DNG SHELL NH NGÔN NG LP TRÌNH Có hai cách đ vit chng trình điu khin shell: gõ chng trình ngay t dòng lnh là cách đn gin nht. Tuy nhiên mt khi đã thành tho có th gp các lnh vào mt tp đ chy (chúng tng đng vi cách DOS gi tp *.bat), điu này hiu qu và tn dng trit đ tính nng t đng hóa ca shell. 2.1. iu khin shell t dòng lnh Chúng ta hãy bt đu, giá s trên đa cng có rt nhiu file ngun .c, bn mun truy tìm và hin th ni dung ca các tp ngun cha chui main(). Thay vì dùng lnh grep đ tìm ra tng file sau đó quay li dùng lnh more đ hin th file, ta có th dùng lnh điu khin shell t đng nh sau: $ for file in * do if grep -l 'main( ) ' $file then more $fle fi done Khi gõ mt lnh cha hoàn chnh t du nhc ca shell, shell s chuyn du nh c thành >, shell ch nhp đy đ các lnh trc khi thc hin tip. Shell t trng hiu đc khi nào thì lnh bt đu và kt thúc. Trong ví d trên lnh for . . . do s kt thúc bng done. ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp trình shell ________________________________________________________________________ 7 Khi gõ xong done, shell s bt đu thc thi tt c nhng gì đã gõ vào bt đu t for.  đây, file là mt bin ca shell, trong khi * là mt tp hp đi din cho các tên tp tìm thy trong th mc hin hành. Bt tin ca vic điu khin ngôn ng shell t dòng lnh là khó ly li khi lnh trc đó đ sa đi và thc thi mt ln na. Nu ta nhn phím Up/Down thì shell có th tr li khi lnh nh sau: $ for file in * ; do ; if grep -1 'main( )’ $file; then ; more $file; fi; done ây là cách các shell Linux vn thng làm đ cho phép thc thi nhiu lnh cùng lúc ngay trên dòng lnh. Các lnh có th cách nhau bng du (;). Ví d: $ mkdir myfolđer; cd myfolder; s to th mc myfolder bng lnh mkdir sau đó chuyn vào th mc này bng lnh cd. Ch cn gõ Enter mt ln duy nht đ thc thi hai lnh cùng lúc. Tuy nhiên sa cha các khi lnh nh vy không d dàng và rt d gây li. Chúng ch thun tin cho kt hp khong vài ba lnh.  d bo trì bn có th đa các lnh vào mt tp tin và yêu cu shell đc ni dung tp tin đ thc thi lnh. Nhng tp tin nh vy gi là tp tin kch bn (shell script). 2.2. iu khin shell bng tp tin kch bn (script file) Trc ht bn dùng lnh $cat > first.sh hay các trình son tho nh vi hay emacs (hoc mc) đ son ni dung tp tin first.sh nh sau: # ! /bin/ sh # first.sh # Script nay se tìm trong th mc hin hành các chui # mang ni dung main( ) , ni dung ca fìle s đc hin th ra màn hình nu tìm thy. for file in * do if grep -l 'main( ) ' $file then more $fle fi done exit 0 Không nh chú thích ca C, mt dòng chú thích (comment) trong ngôn ng shell bt đu bng ký t #. Tuy nhiên  đây có mt chú thích hi đc bit đó là #!/bin/sh. y thc s không phi là chú thích. Cp ký t #! là ch th yêu cu shell hin ti triu gi shell sh nm trong th mc /bin. Shell sh s chu trách nhim thông dch các lnh nm trong tp tin script đc to. Có th ch đnh #!/bin/bash làm shell thông dch thay cho sh, vì trong Linux tht ra sh và bash là mt. Tuy nhiên nh đã nêu, trên các h Unix vn s dng shell sh làm chun, vì vy vn là mt thói quen tt cho lp trình viên nu s dng shell sh. Khi ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp trình shell ________________________________________________________________________ 8 tip cn vi UNIX, ta s cm thy quen và thân thuc vi shell này hn. Nên chy script trong mt shell ph (nh gi sh chng hn), khi đó mi thay đi v môi trng mà script gây ra không nh hng đn môi trng làm vic chính. Ch th #! Còn đc dùng đ gi bt kì chng trình nào ta mun chy trc khi script tip theo đc dch. Lnh exit bo đm rng script sau khi thc thi s tr v mã li, đây là cách mà hu ht các chng trình nên làm, mc dù mã li tr v ít khi đc dùng đn trong trng hp thc hin tng tác trc tip t dòng lnh. Tuy nhiên, nhn bit mã tr v ca mt đon script sau khi thc thi, li thng rt có ích nu bn triu gi script t trong mt script khác. Trong đon chng trình trên, lnh exit s tr v 0, cho bit script thc thi thành công và thoát khi shell gi nó. Mc dù khi đã lu tp tin script vi tên .sh, nhng UNIX và Linux không bt buc điu này. Him khi Linux s dng phn đuôi m rng ca tp tin làm du hiu nhn dng, do đó tp tp script có th là tùy ý. Tuy vy .sh vn là cách chúng ta nhn ngay ra mt tp tin có th là script ca shell mt cách nhanh chóng. 2.3. Thc thi script Chúng ta va to ra tp tin script first.sh, nó có th đc gi thc thi theo 2 cách. Cách đn gin nht là triu gi trình shell vi tên tp tin script làm đi s. Ví d: $ /bin/ sh first.sh Cách gi trên là bình thng, nhng vn quen thuc hn nu ta có th gi first.sh ngay t dòng lnh, tng t các lnh Linux thông thng.  làm đc điu này, trc ht cn chuyn thuc tính thc thi (x) cho tp tin script bng lnh chmod nh sau: $ chmod +x first.sh Sau đó có th triu gi script theo cách th hai tin li hn: $ first.sh Có th lnh trên không thc hin thành công và ta s nhn đc thông báo li 'command not found' (không tìm thy lnh). iu này xy ra bi vì bin môi trng PATH ca bn thng không cha đng dn hay v trí th mc hin hành.  khc phc, ta có th thêm vào bin môi trng PATH ch đnh th  mc hin hành nh sau: $ PATH=$PATH: . Nu mun Linux t đng nh th mc hin hành mi khi đng nhp bn có th thêm lnh PATH=$PATH : . vào cui tp .bash_profile (file đc triu gi lúc h thng đang nhp - tng t autoexec.bat ca DOS). Tuy nhiên cách gn và đn gin nht mà ta vn thng làm là đnh rõ du th mc hiên hành ./ ngay trên lnh. Ví d: $ . / first.sh Lu ý: i vi tài khon root, không nên thay đi bin môi trng PATH (bng cách thêm du ch đnh . ) cho phép truy tìm th mc hin hành. iu này không an toàn và d to ra l hng bo mt. Ví d, mt qun tr h đng nhp di quyn root, triu gi chng trình ca Linux mà h tng  th mc qui đnh nh /bin, nu bin PATH cho phép tìm  th mc hin hành thì rt có th nhà qun tr thc thi chng trình ca ai đó thay vì chng trình Linux  /bin. Vy nên to thói quen đt du ./ trc mt tp tin đ ám ch truy xut  th mc hin hành. ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp trình shell ________________________________________________________________________ 9 Mt khi bn tin rng first.sh chy tt, có th di chuyn nó đn th mc khác thích hp hn th mc hin hành. Nu lnh script ch dành cho mc đích riêng ca bn, bn có th to ra th mc /bin trong th mc ch (home) mà nhà qun tr qui đnh cho ngi dùng, sau đó thêm đng dn này vào bin môi trng PATH. Nu mun script đc gi bi ngi dùng khác, hãy đt nó vào th mc /usr/1ocal/bin. Thông thng, đ cho phép mt script hay chng trình thc thi, cn đc ngi qun tr cho phép. Nu bn là nhà qun tr, cng cn cn thn xem xét các script do các ngi dùng khác (hacker chng hn) đt vào h thng. Ngôn ng script rt mnh, nó có th làm đc hu nh là mi chuyn k c hy dit h thng!  ngn script ca b sa đi bi ngi dùng khác, có th s dng các lnh thit lp quyn (thng phái đng nhp vi t cách root đ làm công vic này): #cp first.sh /usr/1ocal/bin #chown root /usr/local/bin/first.sh #chgrp root /usr/1ocal/bin/first.sh #chmod u=rwx go=rx /usr/1ocal/bin/firsc.sh on lnh trên mang ý ngha: chuyn quyn s hu tp tin cho root, root đc toàn quyn đc sa ni dung và thc thi tp tin, trong khi nhóm và nhng ngi dùng khác root ch đc phép đc và thc thi. Nên nh mc dù b n loi b quyn ghi w trên tp tin, UNTX và Linux vn cho phép bn xoá tp tin này nu th mc cha nó có quyn ghi w.  an toàn, vi t cách là nhà qun tr, nên kim tra li th mc cha script và bo đm rng ch có root mi có quyn w trên th mc cha các tp .sh 3. CÚ PHÁP NGÔN NG SHELL Chúng ta đã thy cách vit lnh và gi thc thi tp tin scirpt. Phn tip theo nay dành cho bn khám phá sc mnh ca ngôn ng lp trình shell. Trái vi lp trình bng trình biên dch khó kim li và nâng cp, lp trình script cho phép bn d dàng sa đi lnh bng ngôn ng vn bn. Nhiu đon script nh có th kt hp li thành mt script ln mnh m và rt hu ích. Trong th gii UNIX và Linux đôi lúc gi thc thi mt chng trình, bn khó mà bit đc chng trình đc vit bng script hay thc thi theo mã ca chng trình nh phân, bi vì tc đ thc thi và s uyn chuyn ca chúng gn nh ngang nhau. Phn này chúng ta s hc v: • Bin: kiu chui, kiu s, tham s và bin môi trng • iu kin: kim tra lun lý Boolean bng shell • iu khin chng trình: if, elif, for , while, until, case • Danh shell • Hàm • Các hình ni ti ca shell • Ly v kt qu ca mt lnh • Tài liu Here 3.1. S dng bin ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp trình shell ________________________________________________________________________ 10 Thng bn không cn phi khai báo bin trc khi s dng. Thay vào đó bin s đc t đng to và khai báo khi ln đu tiên tên bin xut hin, chng hn nh trong phép gán. Mc đnh, tt c các bin đu đc khi to và cha tr kiu chui (string). Ngay c khi d liu mà bn đa vào bin là mt con s thì nó cng đc xem là đnh dng chui. Shell và mt vài lnh tin ích s t đng chuyn chui thành s đ thc hin phép tính khi có yêu cu. Tng t nh bn thân h điu hành và ngôn ng C, cú pháp ca shell phân bit ch hoa ch thng, bin mang tên foo, Foo, và FOO là ba bin khác nhau. Bên trong các script ca shell, bn có th ly v ni dung ca bin bng cách dùng du $ đt trc tên bin.  hin th ni dung bin, bn có th dùng lnh echo. Khi gán ni dung cho bin, bn không cn phi s dng ký t $. Ví d trên dòng lnh, bn có th gán ni dung và hin th bin nh sau: $ xinahao=hello $ echo $xinchao Hello $ xin chao= "I am here" $echo $xin chao I am here $ xinchao=12+l $echo $xin chao 12+1 Lu ý, sau du = không đc có khong trng. Nu gán ni dung chui có khong trng cho bin, cn bao bc chui bng du “ “. Có th s  dng lnh read đ đc nhp liu do ngi dùng đa vào và gi li trong bin đ s dng. Ví d: $ read yourname XYZ $echo "Hello " $yourname Hello XYZ Lnh read kt thúc khi bn nhn phím Enter (tng t scanf ca C hay readln ca Pascal). 3.1.1. Các kí t đc bit (Metalcharacters ca Shell) 3.1.1.1 Chuyn hng vào/ra Mt tin trình Unix/Linux bao gi cng gn lin vi các đu x lí các dòng (stream) d liu: đu vào chun (stdin hay 0), thng là t  bàn phím qua chc nng getty(); đu ra chun (stdout, hay 1), thng là màn hình, và c s d liu li h thng (stderr, hay 2). Tuy nhiên các hng vào/ra có th thay đi đc bi các thông báo đc bit: Kí hiu Ý ngha ( … tng trng cho đích đi hbg) ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son [...]... trong script' dùng con s này t o các tên file t m Ví d /tmp/tmpfile_$$ 15 Hu nh Thúc C c, Vi n CNTT t p h p và biên so n LINUX, L p trình shell M i môi tr ng mà uer ng nh p ch a m t s danh shell bi n môi tr ng dùng cho m c ích riêng Có th xem anh shell này b ng l nh env t o m t bi n môi tr ng m i, có th dùng l nh export c a shell. .. $(command) (s c chúng ta tìm hi u chi ti t h n trong ph n sau) Danh shell c a các ph n t trong l nh for c cung c p b i k t qu tr v c a l nh ls f* và c b c trong c p l nh m r ng bi n $ ( ) Bi n m r ng n m trong d u bao $ (command) ch c xác inh khi l nh command th c thi xong 3.3.5 L nh while M c dù l nh for cho phép l p trong m t t p h p giá tr bi t tr c, nh ng trong tr ng h p m t t p h p l n ho c s l n... executing script ending Cách ch ng trình làm vi c: Shell s b t u th c thi l nh trong script t u n cu i, khi g p foo() l n u, shell s hình dung foo là m t hàm Shellghi nh n i dung hàm và không th c thi hàm Shell ti p t c b qua n i dung hàm cho n cu i ký t } và th c hi n l nh echo "script starting" Khi g p l i foo l n th hai, shell bi t là ta mu n tri u g i hàm, shell quay l i th c hi n n i dung c a hàm foo()... cho phép ng i dùng h th ng s d ng Danh shell c a các bi n môi tr ng là khá nhi u, nh ng nhìn chung nên nh m t s bi n môi tr ng ch y u sau: Bi n môi tr $HOME $PATH $PS1 cho $SP2 $IFS $0 $# $$ ng Ý ngh a Ch a n i dung c a th m c ch (Th m c u tiên khi ng i dùng ng nh p) Ch a danh shell các ng d n (ph n cách b ng d n hai ch m :) Linux th ng tìm các trình c n thi hành trong bi n $PATH D u nh c (prompt) hi... nh [ -f file_one ] tr v false vì file_one không t n t i L nh echo ti p theo trong chu i danh shell OR s c g i in ra hello Do echo luôn tr v true nên echo ti p theo không c g i B i vì trong danh shell OR có m t l nh tr v true nên toàn b bi u th c s là true K t qu cu i cùng là echo trong if c g i in ra chu i ‘in if’ L u ý, danh shell AND và OR s d ng thu t toán th m nh t t 1 bi u th c, có ngh a là ch c... p h p và biên so n LINUX, L p trình shell Tóm t t: cmd & t l nh cmd ch y n n (background) cmd1 ; cmd2 ch y cmd1 tr c, sau ó ch y cmd2 (cmd) th c hi n cmd trong m t shell con (subshell) `cmd` u ra c a cmd s thay cho àu ra c a l nh trong dòng l nh cmd1 | cmd2 n i u ra c a cmd1 vào u vào c a cmd2 3.1.1.2 D u b c chu i (quoting) Shell có m t t p các kí t c bi t mà hi... nào hàm nh n và l y v c n i dung i s truy n cho nó? Bên trong hàm, ta g i các bi n môi tr ng $*, $1, $2 chúng chính là các i s truy n vào khi hàm c g i L u ý, n i dung c a $*, $1, $2 do bi n môi tr ng n m gi s c shell t m th i c t i M t khi hàm ch m d t, các giá tr c s c khôi ph c l i M c dù v y, có m t s shell c trên UNIX không ph c h i tham s môi tr ng v giá tr ban u khi hàm k t thúc N u mu n b o... shell (m t s shell s d ng l nh setenv) 3.1.3 Bi n tham s (parameter variable) tr N u c n ti p nh n tham s trên dòng l nh ng sau: Bi n tham s $1, $2, $3 S* $@ x lý, có th dùng thêm các bi n môi Ý ngh a V trí và n i dung c a các tham s trên dòng l nh theo th t t trái sang ph i Danh shell c a t t c các tham s trên dòng l nh Chúng cl u trong m t chu i duy nh t ph n cách b ng ký t u tiên quy nh trong bi... i n i ch cho phép t m t l nh (nh trong danh shell AND hay OR ch ng h n) b n có th s d ng c p { } b c kh i l nh nh sau: if [ -f file_one ] && { ls -l echo “complex block execute" } then echo "command complete " fi 3.5 Hàm (function) T ng t các ng trình khác, shell cho phép b n t t o hàm hay th t c tri u g i bên trong script M c dù b n có th g i các script con khác bên trong script chính, chúng t ng t... c khi l nh th c hi n.Th ng là d u > D u phân cách các tr ng trong danh shell chu i Bi n này ch a danh shell các ký t mà shell dùng tách chu i (th ng là tham s trên dòng l nh) Ví d $IFS th ng ch a ký t Tab, ký t tr ng ho c ký t xu ng hàng Ch a tên ch ng trình g i trên dòng l nh S tham s truy n trên dòng l nh Mã ti n trình (process id) c a shell script th c thi B i s process id c a ti n trình là duy . LINUX, Lp trình shell ________________________________________________________________________ 1 UNIX/ Linux LP TRÌNH TRONG MÔI TRNG SHELL 1. Shell ca UNIX/ LINUX 2 chn -e không kh chuyn (portable) và -f th ng đc s dng thay th. Câu hi có th đt ra là set-group-id và set-ser-id (còn đc gi là set-gid và set- uid) mang ý ngha gì. Set-uid. theo shell. Mt khi đã quen thuc vi mt shell và cách hot đng ca shell đó, ngi dùng có th làm ch đc các shell khác mt cách đ dàng. Các shell trên Unix/ Linux: sh ( Bourne ) shell

Ngày đăng: 02/08/2015, 03:01

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w