Professional Documents
Culture Documents
UNIX - C Shell Scripts
UNIX - C Shell Scripts
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 ngha -d tp tin l th mc? -e tp tin tn ti? -f plain file? -o quyn ch s hu? -r quyn c? -w quyn ghi? -x quyn thc thi? -z 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)