lập trình shell linux
LINUX, Lp trình shell ________________________________________________________________________ 1 UNIX/Linux LP TRÌNH TRONG MÔI TRNG SHELL 1. Shell ca UNIX/LINUX 2. S DNG SHELL NH NGÔN NG LP TRÌNH 2.1. iu khin shell t dòng lnh 2.2. iu khin shell bng tp tin kch bn (script file) 2.3. Thc thi script 3. CÚ PHÁP NGÔN NG SHELL 3.1. S dng bin 3.1.1. Các kí t đc bit (Metalcharacters ca Shell) 3.1.1.1 Chuyn hng vào/ra 3.1.1.2 Các kí t đc bit kim soát tin trình 1.& (Ampersand) 2.Ngoc đn ( ; ) 3. Du nháy ` ` (backquotes) 4.ng dn (Pipelines) 3.1.1.3 Du bc chui (quoting) 1.Backslash (\) 3.1.2. Biên môi trng (environment variable) 3.1.3. Bin tham s (parameter variable) 3.2. iu kin 3.2.1. Lnh test hoc [ ] 3.3. Cu trúc điu khin 3.3.1. Lnh if 3.3.2. Lnh elif 3.3.3. Vn đ phát sinh vi các bin 3.3.4. Lnh for 3.3.5. Lnh while 3.3.6. Lnh intil 3.3.7. Lnh case 3.4. Danh shell thc thi lnh (Lists) 3.4.1. Danh sách AND (&&) 3.4.2 Danh sáchl OR ( || ) 3.4.3. Khi lnh 3.5. Hàm (function) 3.5.1 Bin cc b và bên toàn cc 3.5.2. Hàm và cách truyn tham s 3.6. Các lnh ni ti ca shell 3.6.1. break 3.6.2 continue ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp trình shell ________________________________________________________________________ 2 3.6.3. Lnh : (lnh rng) 3.6.4. Lnh . (thc thi) 3.6.5. eval 3.6.6. exec 3.6.7. exit n 3.6.8. export 3.6.9 Lnh 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. Ly v kt qu ca mt lnh 3.7.1. c lng toán hc 3.7.2. M rng tham s 3.8. Tài liu Here 4. DÒ LI (DEBUG) CA SCRIPT 5. HIN TH MÀU SC (COLOR) 5.1. Màu ch 5.2. Thuc tính vn bn 5.3. Màu nn 6. XÂY DNG NG DNG BNG NGÔN NG SCRIPT 6.1. Phn tích yêu cu 6.2. Thit k ng dng 7. KT CHNG 8. MT S TÓM TT 8.1 To và chy các chng trình shell 8.1.1 To mt chng trình shell 8.1.2 Chy chng trình shell 8.2 S dng bin 8.2.1 Gán mt giá tr cho bin 8.2.2 Truy nhp giá tr ca mt bin 8.2.3 Tham s v trí và bin xây dng sn trong shell 8.2.4 Ký t đc bit và cách thoát khi ký t đc bit 8.2.5 Lnh test 8.3 Các hàm shell 8.3.2 Các ví d to hàm 8.4 Các mnh đ điu kin 8.4.1 Mnh đ if 8.4.2 Mnh đ case ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp trình shell ________________________________________________________________________ 3 8.5 Các mnh đ vòng lp 8.5.1 Mnh đ for 8.5.2 Mnh đ while 8.5.3 Mnh đ until 8.5.4 Câu lnh shift TÀI LIU THAM KHO ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp trình shell ________________________________________________________________________ 4 Trc khi bt tay vào vit nhng ng dng không cn ti các ngôn ng lp trình phc tp khác, chng này s đ cp cách tip cn vi ngôn ng kch bn (script) ca h v (shell, t đây s gi là shell script), dùng điu khin và tng tác vi Linux. Khi tip cn vi DOS, DOS cung cp mt shell đ to các x lí theo lô trên nhng tp tin *.bat, tng đi rõ ràng, đn gin. Tuy nhiên shell ca DOS không mnh và hu dng bng shell script trên Linux. Tài liu này s cung cp nhng kin thc va đ đ ngi dùng UNIX/LINUX có th dùng shell to ra các chng trình thc thi hu hiu, thm chí còn có th dùng shell đ thc hin đc mi thao tác kim soát h điu hành (nh các nhà chuyên nghip vn nói). Nhng đích chính cn đt đc nh sau: 1.Shell và mc đích s dng 2.Cú pháp và cách điu khin các lnh ca ngôn ng shell 3.Hin th và th hin màu sc 4.các ví d thc hành 1. Shell ca UNIX/Linux Mi th đc thc hin trên Unix đu bi tin trình. Vy to ra tin trình nh th nào ? Cách th nht là vit ra các chng trình mà các chng trình này bit cách to ra tin trình (C/C++). Tuy nhiên cách này đòi hi nhiu hiu bit và n lc. Cng nh các h điu hành làm vic kiu o khác, Unix h tr mt phng tin x lí lnh làm giao din gia lnh máy (mà ngi dùng đa vào) và vic thc thi ca lnh đó (bi Unix). Phng tin đó gi là shell. T khi ra đi Unix đã có vài kiu shell, đó là Bourne, C, Korn shell. Thc ra shell làm gì ? Tòan b mc đích ca shell là đ khi đng các tin trình x lí lnh đa vào: yêu cu đa (dòng) lnh vào, đc đu vào, thông dch dòng lnh đó, và to ra tin trình đ thc hin lnh đó. Nói cách khác shell quét dòng lnh đa vào máy tính, cu hình môi trng thc thi và to tin trình đ thc hin lnh. Hình 2: V trí ca shell khi “thc hin” lnh ca ngi dùng Shell dch các lnh nhp vào thành li gi h thng, chuyn các ký hiu dn hng >, >> hay | thành d liu di chuyn gia các lnh. c các bin môi trng đ tìm ra thông tin thc thi lnh. Nh vy tìm hiu shell thc t là hc mt ngôn ng lp trình, cho dù không phc tp nh C, hay các ngôn ng khác, nhng cng phi qua nhng đòi hi cn thit. Trong Unix/Linux có các lai shell khác nhau và có th la chn đ dùng theo nhu cu mà ngi dùng thy phù hp. Hình 2 là mô hình tng tác gia các shell, chng trình ng dng, h X-Window và ht nhân. ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp 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 bit các ng dng, lnh gi các hàm chc nng ca nhân thành nhng đn th rt nh (tin trình). Tuy nhiên, nhiu lnh ca Linux có th kt hp li vi nhau đ to nên chc nng tng hp rt mnh m. Ví d: $ ls -al | more lnh trên đc kt hp bng hai lnh, ls lit kê toàn b danh sách tp và th mc trên đa ra màn hình, nu danh sách quá dài, ls chuyn d liu kt xut cho lnh more x lý hin th kt qu thành tng trang màn hình. Linux có cách kt hp d liu kt xut ca các lnh vi nhau thông qua c ch chuyn tip (redirect), ng dn (pipe). Kt hp các lnh vi nhau ch bng dòng lnh không cha đ. Nu mun t hp nhiu lnh đng thi vi nhau và tùy vào tng điu kin, kt xut ca lnh, mà có nhng ng x thích hp thì sao? Lúc đó s dùng đn các cu trúc lp trình r nhánh nh if, case. Trng hp bn mun thc hin các thao tác vòng lp, phi dùng các lnh nh for, while . Shell chính là trình din dch cung cp cho ngi dùng kh nng này. Hu ht các Shell trong Unix/Linux s dng mt ngôn ng gn ging vi C (điu này cng d hiu bi trong th gii Unix/Linux, C là ngôn ng lp trình thng tr). Ngôn ng Shell càng ging C thì lp trình viên hay ngi điu khin Linux càng cm thy thân thin vi HH. H thng cung cp cho ngi dùng rt nhiu chng trình shell. Mi shell có mt s tin ích nh h tr ch đ gõ phím, ghi nh lnh. Kt hp các tin ích ca shell đ to ra mt chng trình chy đc, thì mt chng trình nh vy đc lu di dng mt tp, gi là tp kch bn (script, hãy th m mt tp nh vy và quan sát cu trúc ca tp). Vit đc mt tp script, thc cht là đã lp trình theo shell. Mt khi đã quen thuc vi mt shell và cách hot đng ca shell đó, ngi dùng có th làm ch đc các shell khác mt cách đ dàng. Các shell trên Unix/Linux: sh ( Bourne ) shell nguyên thy áp dng cho Unix Csh, tcsh và zsh dòng shell s d ng cu trúc lnh ca C làm ngôn ng kch bn. c to ra đu tiên bi Bia Joy. Là shell thông dng th hai sau bash shell. ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp trình shell ________________________________________________________________________ 6 bash shell ch yu ca Linux. Ra đi t d án GNU. bash (Vit tt ca Bourne Again Shell có li đim là mã ngun đc công b rng rãi. Nu bash cha có sn trong h thng Unix hay Linux, hãy ti v, biên dch và s dng min phí ti đa ch www.gnu.org rc shell mô rng ca csh vi nhiu tng thích vi ngôn ng C hn. rc cng ra đi t d án GNU. Shell chun thng đc các nhà phân phi Linux s dng hin nay là bash shell. Khi cài đt Linux, trình cài đt thng mc đnh bash là shell khi đng. Có th tìm thy chng trình shell này trong th mc /bin vi tên chng trình là bash. bash đôi khi là mt chng trình nh phân đôi khi là mt script gi đn liên kt nh phân khác. Có th dùng lnh file đ xem bash là mt tp tin nh phân hay script nh sau: $ file /bin/bash /bin/bash: ELF 32-bit LSB executable. Intel 80386 nu kt qu kt xut là dng ELF thì có ngha là bash là chng trình nh phân. Tuy bash là shell s dng ph bin trong Linux, nhng các ví d v lp trình s s dng ngôn ng và lnh ca shell sh bi vì sh là shell nguyên thy, có th chy trên c Unix. Bng lnh file ta s thy trong hu ht các bn Linux hin nay sh ch là liên kt đn bash mà thôi. Ví d: $ file /bin/sh /bin/sh: symbolic link to bash điu này có ngha là bash hoàn toàn có th din dch và điu khin các lnh ca shell sh. 2. S DNG SHELL NH NGÔN NG LP TRÌNH Có hai cách đ vit chng trình điu khin shell: gõ chng trình ngay t dòng lnh là cách đn gin nht. Tuy nhiên mt khi đã thành tho có th gp các lnh vào mt tp đ chy (chúng tng đng vi cách DOS gi tp *.bat), điu này hiu qu và tn dng trit đ tính nng t đng hóa ca shell. 2.1. iu khin shell t dòng lnh Chúng ta hãy bt đu, giá s trên đa cng có rt nhiu file ngun .c, bn mun truy tìm và hin th ni dung ca các tp ngun cha chui main(). Thay vì dùng lnh grep đ tìm ra tng file sau đó quay li dùng lnh more đ hin th file, ta có th dùng lnh điu khin shell t đng nh sau: $ for file in * do if grep -l 'main( ) ' $file then more $fle fi done Khi gõ mt lnh cha hoàn chnh t du nhc ca shell, shell s chuyn du nh c thành >, shell ch nhp đy đ các lnh trc khi thc hin tip. Shell t trng hiu đc khi nào thì lnh bt đu và kt thúc. Trong ví d trên lnh for . . . do s kt thúc bng done. ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp trình shell ________________________________________________________________________ 7 Khi gõ xong done, shell s bt đu thc thi tt c nhng gì đã gõ vào bt đu t for. đây, file là mt bin ca shell, trong khi * là mt tp hp đi din cho các tên tp tìm thy trong th mc hin hành. Bt tin ca vic điu khin ngôn ng shell t dòng lnh là khó ly li khi lnh trc đó đ sa đi và thc thi mt ln na. Nu ta nhn phím Up/Down thì shell có th tr li khi lnh nh sau: $ for file in * ; do ; if grep -1 'main( )’ $file; then ; more $file; fi; done ây là cách các shell Linux vn thng làm đ cho phép thc thi nhiu lnh cùng lúc ngay trên dòng lnh. Các lnh có th cách nhau bng du (;). Ví d: $ mkdir myfolđer; cd myfolder; s to th mc myfolder bng lnh mkdir sau đó chuyn vào th mc này bng lnh cd. Ch cn gõ Enter mt ln duy nht đ thc thi hai lnh cùng lúc. Tuy nhiên sa cha các khi lnh nh vy không d dàng và rt d gây li. Chúng ch thun tin cho kt hp khong vài ba lnh. d bo trì bn có th đa các lnh vào mt tp tin và yêu cu shell đc ni dung tp tin đ thc thi lnh. Nhng tp tin nh vy gi là tp tin kch bn (shell script). 2.2. iu khin shell bng tp tin kch bn (script file) Trc ht bn dùng lnh $cat > first.sh hay các trình son tho nh vi hay emacs (hoc mc) đ son ni dung tp tin first.sh nh sau: # ! /bin/ sh # first.sh # Script nay se tìm trong th mc hin hành các chui # mang ni dung main( ) , ni dung ca fìle s đc hin th ra màn hình nu tìm thy. for file in * do if grep -l 'main( ) ' $file then more $fle fi done exit 0 Không nh chú thích ca C, mt dòng chú thích (comment) trong ngôn ng shell bt đu bng ký t #. Tuy nhiên đây có mt chú thích hi đc bit đó là #!/bin/sh. y thc s không phi là chú thích. Cp ký t #! là ch th yêu cu shell hin ti triu gi shell sh nm trong th mc /bin. Shell sh s chu trách nhim thông dch các lnh nm trong tp tin script đc to. Có th ch đnh #!/bin/bash làm shell thông dch thay cho sh, vì trong Linux tht ra sh và bash là mt. Tuy nhiên nh đã nêu, trên các h Unix vn s dng shell sh làm chun, vì vy vn là mt thói quen tt cho lp trình viên nu s dng shell sh. Khi ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp trình shell ________________________________________________________________________ 8 tip cn vi UNIX, ta s cm thy quen và thân thuc vi shell này hn. Nên chy script trong mt shell ph (nh gi sh chng hn), khi đó mi thay đi v môi trng mà script gây ra không nh hng đn môi trng làm vic chính. Ch th #! Còn đc dùng đ gi bt kì chng trình nào ta mun chy trc khi script tip theo đc dch. Lnh exit bo đm rng script sau khi thc thi s tr v mã li, đây là cách mà hu ht các chng trình nên làm, mc dù mã li tr v ít khi đc dùng đn trong trng hp thc hin tng tác trc tip t dòng lnh. Tuy nhiên, nhn bit mã tr v ca mt đon script sau khi thc thi, li thng rt có ích nu bn triu gi script t trong mt script khác. Trong đon chng trình trên, lnh exit s tr v 0, cho bit script thc thi thành công và thoát khi shell gi nó. Mc dù khi đã lu tp tin script vi tên .sh, nhng UNIX và Linux không bt buc điu này. Him khi Linux s dng phn đuôi m rng ca tp tin làm du hiu nhn dng, do đó tp tp script có th là tùy ý. Tuy vy .sh vn là cách chúng ta nhn ngay ra mt tp tin có th là script ca shell mt cách nhanh chóng. 2.3. Thc thi script Chúng ta va to ra tp tin script first.sh, nó có th đc gi thc thi theo 2 cách. Cách đn gin nht là triu gi trình shell vi tên tp tin script làm đi s. Ví d: $ /bin/ sh first.sh Cách gi trên là bình thng, nhng vn quen thuc hn nu ta có th gi first.sh ngay t dòng lnh, tng t các lnh Linux thông thng. làm đc điu này, trc ht cn chuyn thuc tính thc thi (x) cho tp tin script bng lnh chmod nh sau: $ chmod +x first.sh Sau đó có th triu gi script theo cách th hai tin li hn: $ first.sh Có th lnh trên không thc hin thành công và ta s nhn đc thông báo li 'command not found' (không tìm thy lnh). iu này xy ra bi vì bin môi trng PATH ca bn thng không cha đng dn hay v trí th mc hin hành. khc phc, ta có th thêm vào bin môi trng PATH ch đnh th mc hin hành nh sau: $ PATH=$PATH: . Nu mun Linux t đng nh th mc hin hành mi khi đng nhp bn có th thêm lnh PATH=$PATH : . vào cui tp .bash_profile (file đc triu gi lúc h thng đang nhp - tng t autoexec.bat ca DOS). Tuy nhiên cách gn và đn gin nht mà ta vn thng làm là đnh rõ du th mc hiên hành ./ ngay trên lnh. Ví d: $ . / first.sh Lu ý: i vi tài khon root, không nên thay đi bin môi trng PATH (bng cách thêm du ch đnh . ) cho phép truy tìm th mc hin hành. iu này không an toàn và d to ra l hng bo mt. Ví d, mt qun tr h đng nhp di quyn root, triu gi chng trình ca Linux mà h tng th mc qui đnh nh /bin, nu bin PATH cho phép tìm th mc hin hành thì rt có th nhà qun tr thc thi chng trình ca ai đó thay vì chng trình Linux /bin. Vy nên to thói quen đt du ./ trc mt tp tin đ ám ch truy xut th mc hin hành. ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp trình shell ________________________________________________________________________ 9 Mt khi bn tin rng first.sh chy tt, có th di chuyn nó đn th mc khác thích hp hn th mc hin hành. Nu lnh script ch dành cho mc đích riêng ca bn, bn có th to ra th mc /bin trong th mc ch (home) mà nhà qun tr qui đnh cho ngi dùng, sau đó thêm đng dn này vào bin môi trng PATH. Nu mun script đc gi bi ngi dùng khác, hãy đt nó vào th mc /usr/1ocal/bin. Thông thng, đ cho phép mt script hay chng trình thc thi, cn đc ngi qun tr cho phép. Nu bn là nhà qun tr, cng cn cn thn xem xét các script do các ngi dùng khác (hacker chng hn) đt vào h thng. Ngôn ng script rt mnh, nó có th làm đc hu nh là mi chuyn k c hy dit h thng! ngn script ca b sa đi bi ngi dùng khác, có th s dng các lnh thit lp quyn (thng phái đng nhp vi t cách root đ làm công vic 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 on lnh trên mang ý ngha: chuyn quyn s hu tp tin cho root, root đc toàn quyn đc sa ni dung và thc thi tp tin, trong khi nhóm và nhng ngi dùng khác root ch đc phép đc và thc thi. Nên nh mc dù b n loi b quyn ghi w trên tp tin, UNTX và Linux vn cho phép bn xoá tp tin này nu th mc cha nó có quyn ghi w. an toàn, vi t cách là nhà qun tr, nên kim tra li th mc cha script và bo đm rng ch có root mi có quyn w trên th mc cha các tp .sh 3. CÚ PHÁP NGÔN NG SHELL Chúng ta đã thy cách vit lnh và gi thc thi tp tin scirpt. Phn tip theo nay dành cho bn khám phá sc mnh ca ngôn ng lp trình shell. Trái vi lp trình bng trình biên dch khó kim li và nâng cp, lp trình script cho phép bn d dàng sa đi lnh bng ngôn ng vn bn. Nhiu đon script nh có th kt hp li thành mt script ln mnh m và rt hu ích. Trong th gii UNIX và Linux đôi lúc gi thc thi mt chng trình, bn khó mà bit đc chng trình đc vit bng script hay thc thi theo mã ca chng trình nh phân, bi vì tc đ thc thi và s uyn chuyn ca chúng gn nh ngang nhau. Phn này chúng ta s hc v: • Bin: kiu chui, kiu s, tham s và bin môi trng • iu kin: kim tra lun lý Boolean bng shell • iu khin chng trình: if, elif, for , while, until, case • Danh shell • Hàm • Các hình ni ti ca shell • Ly v kt qu ca mt lnh • Tài liu Here 3.1. S dng bin ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son LINUX, Lp trình shell ________________________________________________________________________ 10 Thng bn không cn phi khai báo bin trc khi s dng. Thay vào đó bin s đc t đng to và khai báo khi ln đu tiên tên bin xut hin, chng hn nh trong phép gán. Mc đnh, tt c các bin đu đc khi to và cha tr kiu chui (string). Ngay c khi d liu mà bn đa vào bin là mt con s thì nó cng đc xem là đnh dng chui. Shell và mt vài lnh tin ích s t đng chuyn chui thành s đ thc hin phép tính khi có yêu cu. Tng t nh bn thân h điu hành và ngôn ng C, cú pháp ca shell phân bit ch hoa ch thng, bin mang tên foo, Foo, và FOO là ba bin khác nhau. Bên trong các script ca shell, bn có th ly v ni dung ca bin bng cách dùng du $ đt trc tên bin. hin th ni dung bin, bn có th dùng lnh echo. Khi gán ni dung cho bin, bn không cn phi s dng ký t $. Ví d trên dòng lnh, bn có th gán ni dung và hin th bin 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 Lu ý, sau du = không đc có khong trng. Nu gán ni dung chui có khong trng cho bin, cn bao bc chui bng du “ “. Có th s dng lnh read đ đc nhp liu do ngi dùng đa vào và gi li trong bin đ s dng. Ví d: $ read yourname XYZ $echo "Hello " $yourname Hello XYZ Lnh read kt thúc khi bn nhn phím Enter (tng t scanf ca C hay readln ca Pascal). 3.1.1. Các kí t đc bit (Metalcharacters ca Shell) 3.1.1.1 Chuyn hng vào/ra Mt tin trình Unix/Linux bao gi cng gn lin vi các đu x lí các dòng (stream) d liu: đu vào chun (stdin hay 0), thng là t bàn phím qua chc nng getty(); đu ra chun (stdout, hay 1), thng là màn hình, và c s d liu li h thng (stderr, hay 2). Tuy nhiên các hng vào/ra có th thay đi đc bi các thông báo đc bit: Kí hiu Ý ngha ( … tng trng cho đích đi hbg) ________________________________________________________________________ Hunh Thúc Cc, Vin CNTT tp hp và biên son [...]... 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. .. 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 nh t trên toàn h th ng vào... is 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... 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... Hu nh Thúc C c, Vi n CNTT t p h p và biên so n LINUX, L p trình shell test ít khi c dùng và h u h t các l p trình viên có thói quen th ng t o các ch ng trình v i tên test, cho nên khi th l nh test không thành công bên trong script, thì hãy xem l i ây ó bên trong h th ng có m t ch ng trình tên là test khác bi t nào ó ang t n t i Hãy th dùng l nh which... $(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... CNTT t 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à... in if Cách ch ng trình làm vi c: file_one u tiên c lo i b báo m l nh if ti p theo không tìm th y nó L 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... 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... u shell thông báo nó hòai v ng nh n nhi u (thông tin) u vào Hãy th v i ví d sau: $ cat Logged in > EOF > login.time $ date >> login.time $cat login.time Login in Fri May 19 12:40:15 PDT 2004 3.1.1.2 Các kí t c bi t ki m soát ti n trình 1 & (Ampersand) : t m t ti n trình (ch ng trình) vào ch ch y n n (background process) B n thân Unix không có khái ni m gì v ti n trình ch y n n hay ti n trình . thay th. Câu hi có th đt ra là set-group-id và set-ser-id (còn đc gi là set-gid và set- uid) mang ý ngha gì. Set-uid cho phép chng trình quyn ca. tin đó gi là shell. T khi ra đi Unix đã có vài kiu shell, đó là Bourne, C, Korn shell. Thc ra shell làm gì ? Tòan b mc đích ca shell là đ khi