You are on page 1of 6

UNIX C Shell Scripts

Scripting l g? Khi lm vic trn Unix, chng ta thng thc hin cc cng vic lp i, lp li, cc cng vic triu gi nhiu dng lnh v cu trc phc tp. May mn, Unix shell a ra mt kh nng gii quyt cc vn ny bao gm: kh nng ln lch cho cc cng vic chy sau khi ngi dng ng xut, gn b danh cho cc lnh v vit cc chng trnh ty chn bng lnh shell Khi bn mun dng cch n gin thc hin cc cng vic phc tp. Khi bn mun thc thi mt chui lnh lp i lp li...Trong trng hp ny, bn c th s dng shell script. Tt c shell script th n gin l tp tin cha mt chui lnh shell. UNIX cho php bn nhp vo tn ca script du nhc dng lnh - ni m mi lnh trong script s c thc thi theo th t. Trnh thng dch: Mi shell c mt ngn ng ring - tp cc lnh m shell hiu. Mt vi lnh lm vic bt chp shell, nhng ph bin ch c th thc thi trong shell xc nh. Dng u tin trong script ca bn phi xc nh trnh thng dch c s dng. V d: #!/bin/ksh Khi mt script c thc thi, shell c #! c ngha l: s dng shell hoc trnh thng dch sau thc thi phn cn li ca script. Trong v d ny, s dng Korn shell. K thut ny cho php ngi dng lm vic vi Korn shell, thm ch h ang lm vic trong C shell. Cc loi trnh thng dch: C mt vi trnh thng dch c sn trn hu ht h thng UNIX nh C shell (/bin/csh), Bourne shell (/bin/sh) v Korn shell (/bin/sh). Cc trnh thng dch ph bin khc c bit nh perl (/usr/local/bin/perl hoc /usr/bin/perl). Mi trnh thng dch c im mnh v yu: bn s phi quyt nh chn ci ph hp nht cho cng vic ca mnh. To script: Khi ng trnh son tho, xc nh trnh thng dch trn dng u tin. Sau g mt vi lnh n gin, mi lnh c t theo th t m bn mun n thc thi trc hay sau. Khi hon tt, thot khi trnh son tho, lu script ca bn vo mt tp tin. Bc cui cng bn cn thc hin trc khi chy chng trnh l thm quyn thc thi vo file , bng lnh chmod. Sau g tn tp tin du nhc v nhn enter. Cu trc C Shell: C Shell cung cp ngn ng dng lnh tng t nh ngn ng lp trnh C. Ngn ng C shell cha cu trc: nhp v xut, ton t iu kin, qun l tp tin v nh ngha bin...Nu bn lm quen vi cc ngn ng lp trnh cp thp, th lp trnh shell s rt n gin. Kt xut:

Lnh a kt xut ra mn hnh l echo. Mc nh echo s kt thc kt xut bng k t xung dng. Bn c th ngn chn iu ny bng cch thm c -n gia lnh echo v cc tham s ca n. V d: #!/bin/csh echo "Hello World!" echo "How are you today?" S kt xut nh sau: Hello World! How are you today? Nhng script: #!/bin/csh echo -n "Good morning, " echo "Beatrice." s kt xut nh th ny: Good morning, Beatrice. Bin: Lnh c bn khai bo bin trong C shell l set. V d: set name = "Henri" => s khi to bin name cha gi tr "Henri". set users = (George Frank Mary Heloise Hartsell) => s khi to bin c kiu d liu wordlist (mng chui), by gi chng ta c th truy cp gi tr ny bng index ca chng. @ count = 0 => khi to bin kiu integer. Ghi ch: lnh set ch c s dng cho cc bin shell. Bin mi trng nh DISPLAY, EDITOR...phi c khai bo bng lnh setenv. iu khin chng trnh: if...then Cho php ngi dng thc thi mt lnh hoc mt nhm lnh ch khi iu kin ph hp. Cu trc nh sau: if (condition(s)) then command(s) endif

iu kin trong du ngoc c tnh trc v tr v gi tr 0 (false) hoc 1 (true). Ch khi iu kin l true cc lnh mi c thc thi. if...then...else Cu trc ny cho php ngi dng xc nh nhm lnh "default" - thc thi nu iu kin sau t kha if l false, ngc li nhm lnh gia iu kin if v t kha else s thc thi. if (condition(s)) then command group 1 else command group 2 endif Nhiu iu kin - AND/OR Ton t AND l && - iu kin ghp l true nu c tt c iu kin l true. Ton t OR l || v iu kin ghp s l true nu mt trong tt c iu kin l true. Ton t kim tra tp tin: operator filename V d: Chy lnh da vo iu kin tp tin "mail.log" c tn ti hay khng. if (-e mail.log) then cat new.log >> mail.log endif S dng bin thay th cho tn tp tin: set file_to_remove = .pine-interrupted-mail if (-z $file_to_remove) then rm $file_to_remove endif => kim tra file c tn cha trong bin c chiu di l 0 hay khng, nu ng l xa file i. Ton t -d -e -f -o -r -w ngha tp tin l th mc? tp tin tn ti? plain file? quyn ch s hu? quyn c? quyn ghi?

-x -z

quyn thc thi? tp tin c chiu di l 0?

o ngc gi tr ca ton t ny, s dng ! Trc ton t trong du ngoc (v d nh ! -z filename). Cu lnh foreach: Cu lnh foreach cho php bn thc thi mt lnh hoc mt nhm lnh cho mi file m tn ca n ph hp vi mu xc nh. V d: to script xa file rng v file c tn l core trong th mc nh ca bn. #!/bin/csh foreach dudfile(/home/users1/hansel/*) if (-z $dudfile || $dudfile == "core") then rm $dudfile endif end Cu lnh while: C lc bn cn thc thi mt lnh lp i lp li cho n khi iu kin ph hp. Nu cu trc if...then khng p ng c, bi v iu kin ca n ch c tnh ton mt ln. t iu kin trong foreach cng khng p ng c hoc kh coi, bi v s vng lp v hn. Chng ta cn mt vng lp xoay vng khng hn nh cho n khi gi tr ca iu kin l false. Trong trng hp ny, chng ta s dng cu lnh while: while (condition) statements end To script cho php giao tip vi chng trnh: Trong C shell, c hai th chng ta cn quan tm l: u tin nhn input t ngi dng trong qu trnh thc thi, k thut th hai l bin tham s - nhn tham s t dng lnh, vo lc gi script. Input lc thc thi: Nu bn mun ngi dng c th tr li cc hi t chng trnh trong lc n chy, bn s cn khi to cc bin nm gi gi tr input . Thay v khi to chui cho bin, khi to n gi mt bin c bit $<. V d: set uinput = $< => gn mi th m ngi dng nhp vo cho bin uinput v chng ta c th tham chiu n gi tr bin sau . V d: #!/bin/csh

echo "Please input your name: " set uname = $< echo "Why, Good Morning, $uname!" Tham s dng lnh: Nu bn mun script ca bn chy ging nh cc lnh UNIX khc - cho php ngi dng chuyn vo tn tp tin hoc chui, th bn s cn s dng kh nng tham s ca C shell. Trong C shell c bin c bit l argv. Bin ny c kiu d liu wordlist, mi t trn dng lnh l mt phn t trong mng. V d chng ta vit script wrap cho php thc hin mt s chc nng trn file, chng ta gi script vi cu trc: wrap infile outfile Trong script ny gi tr argv[1] s l infile v gi tr argv[2] s l outfile. Chng ta c th truy cp cc gi tr ny nh sau: #!/bin/csh if (!-e $argv[1]) then echo "Error: file $argv[1] does not exist." exit 2 endif Chn la t danh sch: Gi s bn vit mt chng trnh menu. Ngi dng chn s t 1 n 6. Mt hnh ng s c thc hin ph thuc vo nhng g ngi dng chn. Chng ta c th s dng mt chui cu lnh if...then...else if...then...else if...then..., nhng rt kh coi v kh c nu chng ta debug chng trnh. Thay vo chng ta c th s dng chc nng switch...case. #!/bin/csh echo -n "Please enter your first name: " set uname = $< switch ($uname) case [Gg]eorge: cat /messages/George breaksw case [Mm]ary: cat /messages/Mary breaksw case [Ss]andy: cat /messages/Sandy breaksw

default: cat /messages/Goodbye exit 1 endsw Ch thch: Nu bn mun xem li chng trnh hoc chia s chng trnh cho ngi khc, bn c th s khm ph ra rng: rt kh c code khng c ch thch. chn vo cu ch thch, n gin s dng k hiu # - mi th theo sau n trn cng dng s c xem nh ch thch. V d: if (-e $file_to_remove) then # checks to see if the file exists (Ngun t http://www.cims.nyu.edu/~ytang/c_script.html)

You might also like