Professional Documents
Culture Documents
UNIX C S
Bai 1. Khi ong UNIX 1.1 Bat au phien lam viec 1.2 Ket thuc phien lam viec 1.3 Cach dung lenh cua UNIX Bai 2. Lam viec vi file. 2.1 To chc file 2.2 Di chuyen gia cac th muc 2.3 Cac thao tac c s vi cac th muc 2.4 Cac thao tac c s vi file thng Bai 3. Bao ve cac file cua ngi s dung 3.1 Mo ta ngi s dung 3.2 Mo ta nhom ngi s dung 3.3 Bao ve cac file va cac th muc Bai 4. Sao, chuyen, lien ket va tm kiem file 4.1 Sao chep file 4.2 Chuyen va oi ten file 4.3 Tao lien ket vi file 4.4 Tm kiem file Bai 5. Thong tin gia nhng ngi s dung 5.1 Thong tin bang lenh mail 5.2 Thong tin bang lenh write Bai 6. S dung chng trnh soan thao vi 6.1 Khi ong vi 6.2 Soan thao van ban Bai 7. Shell script 7.1 Quan ly tien trnh 7.2 Lap cach thc cho shell script 7.3 Cac shell UNIX Bai 8. oi hng (redirection) 8.1 Vao/ra chuan 8.2 Chuyen oi d lieu gia cac tien trnh
Bai 9. C che thay the cua Shell 9.1 Truyen tham so 9.2 Cac bien Shell 9.3 Cac k t ac biet 9.4 Lay ket qua cua mot lenh 9.5 Cac qui tac thay the cua Shell Bai 10. Moi trng cua Shell 10.1 Moi trng 10.2 Cac bien nh ngha trc 10.3 Cac bien chung Bai 11. Lap trnh mc c s di UNIX 11.1 Cac phep th trong Shell 11.2 Lap trnh mot cau truc co ieu kien 11.3 Lap trnh mot chu trnh Bai 12. Tn hieu va ong bo 12.1 Quan ly cac tn hieu 12.2 Quan ly cac tien trnh 12.3 e qui PHAN 2 LAP TRNH C DI UNIX
Bai 1. Gii thieu chung 1.1 Cac li goi he thong 1.2 Chu thc va chu thc quyen cua tien trnh 1.3 nh ngha cac tham bien chng trnh 1.4 Mot so nh ngha khac Bai 2. Quan ly tien trnh 2.1 Nhan biet tien trnh 2.2 Nhan biet chu tien trnh 2.3 Thay oi chu va nhom chu 2.4 Tao mot tien trnh 2.5 Cac ham goi mot tien trnh thay the 2.6 ong bo tien trnh 2.7 Mc u tien cua tien trnh 2.8 Nhom cac tien trnh
Bai 3. Quan ly file 3.1 M mot file 3.2 Tao mot file 3.3 ong file 3.4 at mat na cac quyen tham nhap file 3.5 oc file 3.6 Ghi file 3.7 Di chuyen con tro file 3.8 Cau truc mot inode 3.9 Tao mot inode 3.10 Thay oi quyen tham nhap 3.11 Thay oi chu s hu hoac nhom 3.12 Thay oi th muc lam viec
PHAN 1: UNIX C S
Bai 1. Khi ong UNIX
Noi dung: Lam quen vi he ieu hanh UNIX. Bat au, ket thuc phien lam viec, chay mot so lenh ac trng. 1.1 Bat au phien lam viec: Bat cong tac nguon cua terminal (trong he thong cua NLC la Xterm sau khi dung Exceed ket noi vi UNIX server), khoang mot giay sau tren man hnh hien dong thong bao: Login: Hay nhap vao ten (user name) khi ket thuc bang phm Enter. Neu ngi s dung co dung mat khau (passwor), tren man hnh se hien dong: Password: Hay vao mat khau cua mnh va ket thuc bang phm Enter. Neu ten (va mat khau neu co) c vao ung, terminal o se c noi vi may chu va tren man hnh se hien ky t: $ o la dau nhac cua Shell. Mat khau am bao an toan cho moi phien lam viec. Ta co the thay oi mat khau bang lenh passwd. Mat khau phai dai t nhat 6 ky t, t nhat phai co 2 ky t alphabet, phai khac vi ten (user name) t nhat 3 ky t, dai toi a 13 ky t. 1.2 Ket thuc phien lam viec: An CTRL + D (gi phm CTRL va go phm D) hoac go lenh $exit e ket thuc phien lam viec. 1.4 Cach dung lenh cua UNIX: - Cu phap c ban e chay mot lenh cua UNIX nh sau: $tenlenh [-tuy chon][oi so 1][oi so n] Th du: wc la lenh em va hien th so dong, t va ky t cua mot file. Ta co the chay lenh wc nh sau $wc /etc/passwd 32 37 1139 etc/passwd $wc 32 -l /etc/passwd etc/passwd
$wc 32 15 47
- Cac thong bao loi khi goi lenh: Neu lenh khong ton tai hoac khong tm thay: $data data not found Neu cu phap cua lenh b go sai: $wc -m /etc/group usage: wc [-clw][name] Bai tap: Chu y: Ky hieu <CR> tng trng cho viec go phm Enter. 1. Hay bat au phien lam viec vi ten (username) cua ban. 2. i khi dau nhac cua he thong xuat hien (dau $), go vao date<CR> 3. Gan mat khau cho ten: passwd<CR> 4. Liet ke ten nhng ngi ang s dung he who<CR> 5. Xem ai la ngi ang lam viec tai terminal: who am I<CR> whoami<CR> 6. Xem ten terminal ma ta ang lam viec tren o: tty<CR> 7. Hien th cac thong bao len man hnh: echo Xin chao <CR> echo Chao <CR> echo Dau nhac ket thuc boi $ xuat hien sau Chao <CR> echo Hom nay la ngay:;date<CR> echo Hai lenh tren 1 dong cach nhau boi dau ; <CR> 8. Dung lenh cal (lch): cal 01 1900<CR> cal 01<CR> cal 1900<CR> cal 1900 | more<CR> 9. Mot vai lenh khac: logname<CR>
Copyright(c) by Galaxy CD http://www.galaxycd.com uname<CR> who | wc<CR> Ket thuc phien lam viec: Ctrl D (gi phm Ctrl va go D) hoac exit<CR>
10.
unix
bin
etc
dev
users
usr
user1
user2
Hnh 1: Cau truc cay c s cua UNIX 2.2 Di chuyen gia cac th muc: e di chuyen gia cac th muc trong cay cua UNIX, ta dung 2 lenh sau ay:
Copyright(c) by Galaxy CD http://www.galaxycd.com cd chuyen en th muc can en (change directory) pwd hien th ten th muc ang lam viec (print working directory) Tai thi iem bat au phien lam viec, ta trong th muc tiep nhan (HOME directory). Muon xem ten th muc tiep nhan nay, ta dung lenh pwd. Th du: user1 co th muc tiep nhan la /users/user1 $pwd /users/user1 e di chuyen gia cac th muc ta dung lenh cd vi ten th muc can chuyen en. $cd /usr/bin $pwd /usr/bin $cd .. $pwd /usr e ve th muc tiep nhan khi ta ang bat ky au, go: $cd $pwd /users/user1 2.3 Cac thao tac c s vi th muc: 2.3.1 Xem noi dung th muc: - Xem noi dung th muc hien ang lam viec: $ls - Xem noi dung th muc khac, chang han th muc /bin: $ls /bin - Xem them thong tin cua cac file trong th muc: $ls -l hoac $ll - Xem ten cac file trong th muc theo cot: $lc Khi dung lenh ls l ta co the phan biet cac kieu file bang cach xem ky t au cua dong hien th, neu la: d : file th muc. : file bnh thng c hoac b : file ac biet 2.3.2 Tao th muc: e tao mot th muc mi, ta dung lenh mkdir (make directory): $mkdir index $cd index
Copyright(c) by Galaxy CD http://www.galaxycd.com $ls -a . .. Lenh mkdir tao mot th muc vi 2 au vao (entry) - ban than th muc co ten a cho. - th muc . lien he vi th muc c tao tren - th muc . . lien he v th muc cha. 2.3.3 Xoa th muc: e xoa mot th muc ta dung lenh rmdir (remove directory): $rmdir index Neu muon xoa th muc khong rong, phai dung lenh rm vi tuy chon r $rm -ri thumuc 2.4 Cac thao tac c s vi file thng: 2.4.1 Nhan biet mot file thng: Lenh file phan tch not dung cua mot file va hien th tnh chat cua thong tin cha trong file: $file /etc/passwd /etc/passwd: ascii text $file /bin/ls /bin/ls: 680x0 executable 32 bits page aligned striped 2.4.2 Xem noi dung mot file thng ASCII: Co the dung mot trong cac lenh sau: cat dung e xem noi dung cac file nho. pg hoac more xem noi dung cac file ln theo trang. $cat ten file $pg ten file $more ten file 2.4.3 Tao mot file thng ASCII Tai Shell cua UNIX ta co the de dang tao mot file thng ASCII text bang cach dung lenh cat $cat >text_file abcdef 123456 <Ctrl + D> $
Copyright(c) by Galaxy CD http://www.galaxycd.com Ky t > oi hng, thay v en au ra chuan (standard output) en file c quy nh ngay sau >. ay cac ky t go vao c ghi vao file text_file. Lenh cat, neu khong co oi so (argument), se coi ban phm la au vao chuan. Go <Ctrl + D> tai dong trong cuoi cung ket thuc viec vao so lieu. (1) > FILE stdout
cat
stderr
Cach viet ten file khi tao file: - o dai + ten file cua UNIX sys V dai toi a 14 ky t + ten file cua BERKELEY, bat au t version BSD 4.2. co the dai en 256 ky t. - khong co s han che dung ky t nao khi viet ten file, song ta can chu y vai iem sau: + khong dung cac ky t ac biet (tr dau cham . hoac dau gach di _) v phan ln cac ky t o c dung trong cu phap cua lenh Shell. + file co ten bat au bang dau cham . la file an (hidden). + ky t viet thng khac vi viet hoa. Viet ten file bang cach dung cac metacharacter (? Va *) - ky t * thay the mot xau ky t - ky t ? thay the mot ky t Th du: $ll /bin/c* $ll /bin/c? 2.4.4 Xoa mot file thng: Lenh : rm Co the dung lenh rm vi cac tuy chon sau: -i co hoi ap e khang nh -f khong co hoi ap. Tuy chon nay rat nguy hiem, ch nhng ngi s dung co kinh nghiem va can than mi nen dung. $rm $rm text_file -i text_file
10
Copyright(c) by Galaxy CD http://www.galaxycd.com Bai tap: 1. Xem ten th muc ang lam viec: pwd<CR> 2. Xem noi dung cua th muc ang lam viec: ls l<CR> 3. Tao file van ban tintin: cat > tintin<CR> blabla<CR> BLABLA<CR> end<CR> CTRL + D (gi phm Ctrl va go phm D) 4. Xem noi dung file tintin: cat tintin<CR> 5. Xem noi dung cac th muc /bin /usr/bin /dev ll /bin<CR> hoac ls -C /bin hoac ll /bin | pg 6. Tao 2 th muc d1 va d2 mkdir d1 d2<CR> 7. Chuyen th muc lam viec en d1 8. Tao mot file trong th muc d1 9. Tr ve th muc tiep nhan (HOME directory) cd<CR> 10. Xem noi dung th muc ang lam viec: ls -l hoac ll ls ll -R (xem noi dung ca cac th muc con) lc 11. Xoa th muc d1: rm d1/* rmdir d1 Hoac rm -ri d1
11
UID 0 1 2 3 4 18 19 20 11 71 3000
GID 3 12 2 3 4 1 1 1 11 2 300
SHELL
/bin/ksh
12
3.2 Mo ta nhom ngi s dung 3.2.1 Khai niem : Mot nhom ngi s dung la tap hp cua mot so ngi s dung co the dung chung cac file cua nhau. Mot nhom ngi s dung c mo ta bang cac thong tin sau: - ten cua nhom - [mat khau] - so cua nhom (gid : group identify number) - [danh sach nhng ngi khach (guest)] Cac thong tin tren c cha trong file /etc/group 3.2.2 Lenh defgrp: Lenh nay trong th muc /etc, no cho phep: - hien th danh sach cac nhom ngi s dung. - them nhom mi (ch ngi quan tr he thong mi co quyen). $cat /etc/group public :: 100 : invite animator :: 200 : stagiaires :: 300 : $/etc/defgrp GRP root other
GID 0 1
bin
sys
adm
uucp
USERS root date sync shut root bin daemon lp root bin sys adm root adm daemon uucp daemon
13
3.3 Bao ve cac file va cac th muc 3.3.1 Cac quyen tham nhap file: Khi file c tao lap, cac thong tin sau ay ong thi c ghi lai: - uid cua ngi tao file - gid cua ngi tao file - cac quyen tham nhap file File c bao ve bi mot tap hpc cac bit nh ngha quyen tham nhap: r w x r w x r w x suid sgid owner group other Trong o: r quyen oc w quyen ghi x quyen chay (executing) suid set user-id sgid set group-id oi vi th muc: r quyen oc noi dung th muc w quyen tao va xoa file trong th muc x quyen qua lai (crossing) th muc Ghi chu: cac quyen vi th muc ch co hieu lc tai mot mc nhat nh, th muc con co the c bao ve trong khi th muc cha th khong. 3.3.2 Lenh ls -l Lenh nay liet ke danh sach cac file va cac thuoc tnh cua chung trong mot th muc, qua o ta co the phat hien loai file, cach bao ve, ngi s hu, va kch thc cua chung Th du: Cac file thng (ordinary files): $ls -l /bin -rwxrwxr-x 1 bin bin 16336 Mar 8 1988 cat -rwxrwxr-x 3 root bin 16124 Mar 8 1988 cp -rwxrwxr-x 1 bin bin 18760 Mar 8 1988 cat -rwxrwxr-x 1 bin bin 13320 Mar 8 1988 echo -rwxrwxr-x 2 bin bin 33896 Mar 8 1988 ed -rwxrwxr-x 1 bin bin 28928 Mar 8 1988 file -rwxrwxr-x 3 root bin 16124 Mar 8 1988 ln
14
Copyright(c) by Galaxy CD http://www.galaxycd.com -rwxrwxr-x 8 bin bin 60152 Mar 8 1988 ls -rwxr-sr-x 1 bin mail 63264 April 2 1988 mail -rwxrwxr-x 1 bin bin 15276 Mar 8 1988 mesg -rwxr-xr-x 1 root bin 13180 Mar 8 1988 mkdir Trong o: Cot 1 : loai file va quyen tham nhap (-rwxrwxr-x, rwxr-xr-x) Dau tr - au co ngha file la file thng (khong phai th muc). Dau tr trong day bit co ngha la khong co quyen tng ng bit o. e tiet kiem cho, ngi ta at bit s vao cung mot ni vi bit x va ky hieu: s neu x ton tai S neu X khong ton tai. (bit s : set uid hoac set gid khi chay file) Cot 2 : so lien ket (link number) Cot 3 : ten ngi s hu file (owner) Cot 4 : ten nhom s hu file (group) Cot 5 : kch thc file. Cot 6,7,8 : ngay sa oi gan nhat Cot 9 : ten file. Cac file ac biet (Special files): $ll /dev crw------1 lp bin 8.97 May 6 1988 lp1 crw-rw-rw2 root sys 3,2 Apr 3 09:08 null brw-r----3 root sys 0,96 Apr 3 08:54 pd300 . . crw-rw-rw4 root sys 4,012 May 6 1988 rflop . . crw--w--w2 root other 1,17 Mar 2 07:57 tty11 Trong o: Cot 1: Ky t au tien la c hoac b co ngha la file c oc hoac ghi theo tng ky t (c) hoac ghi theo tng khoi (b). Cot 5: Bieu dien majo va minor cua thiet b (major: loai thiet b, minor: a ch cua thiet b) Cac file th muc (directory files): $ll /users drwxr-xr-x 2 user1 stagiair
240
Mar
31
10:16 user1
15
Copyright(c) by Galaxy CD http://www.galaxycd.com drwxr-xr-x 2 user2 stagiair 32 Mar 31 11:16 user1 drwxr-xr-x 2 user3 stagiair 24 Mar 31 10:16 user1 drwxr-xr-x 2 user4 stagiair 32 Mar 31 11:16 user1 trong o: Cot 1: Ky t au tien d co ngha la file th muc. Cot 2: So cac th muc con 3.3.3 Thay oi quyen tham nhap file: Lenh chmod cho phep thay oi quyen tham nhap cac file va th muc. Co the chay lenh theo 2 cach: - cho thong so tuyet oi: chmod mode ten_file trong o thong so mode la mot so c so 8 (octal) r w x r - x r - 1 1 1 1 0 1 1 0 0 7 5 4 $chmod 754 ten_file - dung cac ky hieu tng trng: chmod who [operation] [right] filename trong o: who : u co ngha user g group o other a all operation: + them quyen bt quyen = gan gia tr khac right: r reading w writing x execution s at suid hoac guid Th du: $chmod g-w, o = r toto 3.3.4 at quyen tham nhap ngam nh: Cac quyen tham nhap c gan bang mat na quyen tham nhap cua tng ngi s dung. Lenh umask cho phep ta at mat na nay. Cu phap cua lenh nh sau: umask nnn trong o: nnn la so bu 7 cua gia tr cac quyen tham nhap. Th du: $umask 177
16
Copyright(c) by Galaxy CD http://www.galaxycd.com $> titi $ll titi -rw------1 user1 other 0 $umask 333 $>toto $ll toto -r--r--r-1 user1 other 0 3.3.5 Thay oi ngi hoac nhom s hu file: Lenh chown cho phep thay oi ngi s hu. Lenh chgrp cho phep thay oi nhom s hu. $echo Hello >file1 $chmod 700 file1 $ls -l file1 -rwx-----1 user1 stagiair $cat file1 Hello $chgrp animator file1 $ls -l file1 -rwx-----1 user1 animator $chown user2 file1 $ls -l file1 -rwx-----1 user2 animator
Mar
11
10:11 titi
Mar
11
20:11 toto
Apr
14:06 file1
Apr
14:06 file1
Apr
14:06 file1
$cat file1 cat: cannot open file1 Bai tap: 1. Hay tao chng trnh sau trong th muc tiep nhan: - chng trnh hello: $cat > hello print Hello print How are you ? ^D - chng trnh reply: $cat > reply print Hello print Fine. And you ? ^D 2. Xem quyen tham nhap vao cac file tren: ll -R 3. Chay 2 chng trnh tren.
17
Copyright(c) by Galaxy CD http://www.galaxycd.com at quyen chay c (executable) cho 2 files tren. Chay lai 2 chng trnh tren. $hello $chmod +x hello $hello 4. Bo cac quyen tham nhap ti hello va reply cua nhng ngi cung nhom (group) va cua nhng ngi khac (other) chmod go = ten file Co the dung lenh chmod theo cach khac c khong ? Hay th vi ca cac file khac (g-rwx, o-rwx, 700 ) 5. Thay oi quyen tham nhap sao cho nhng ngi cung nhom co kha nang oc va chay cac file hello va reply 6. Hay th thay oi ngi hoac nhom s hu cua mot file: chown userY file Khi o file se thuoc s hu cua ngi khac. Co the xoa c khong ? 7. Hay lam theo hng dan sau: cat > rm echo Hello ^D e tao file rm, sau o sa quyen tham nhap e file co the chay c: chmod +x rm th chay file rm e xoa mot file nao o ang ton tai: rm file ieu g se xay ra? KHONG BAO GI C AT TEN FILE TRUNG VI TEN LENH HE THONG. (CHU Y: test cung la mot lenh cua he thong)
18
2 2
32 96
Apr Apr
5 5
16 17 18
5 5 5
original1 ../copie
../copie/original1.copie
Apr
16:25 original1.copie
19
1 1 1 1
16 16 17 18
5 5 5 5
4.2 Chuyen va oi ten file: Lenh mv cho phep chuyen va oi ten file: - chuyen mot file: $mv file_nguon file_ch - chuyen nhieu file: $mv file1 file2 th_muc $mv * th_muc - chuyen th muc: $mv th_muc1 th_muc2 (cac th muc phai co cung th muc con) Th du: $pwd /users/user2/source $ls -l total 3 -rw-rw-r-- 1 -rw-rw-r-- 1 -rw-rw-r-- 1
16 17 18
5 5 5
$mv
original1
original1.bis
16 17 18
5 5 5
20
Copyright(c) by Galaxy CD http://www.galaxycd.com $pwd /users/user2 $ls -l total 2 drwxrwxr-x drwxrwxr-x $mv source
2 2
96 96
Apr Apr
4 4
2 2 replace
Apr Apr
4 4
16 17 18
5 5 5
4.3 Tao lien ket vi file: Tao lien ket vi file la tao them cho file ten mi va ng dan tng ng. Lenh ln cho phep ta lam viec tren. $ln file_nguon file_ch Bang lenh ls -l, ta co the xem so lien ket cua file. Lenh rm dung e xoa mot lien ket. Muon xoa mot file, ta phai xoa tat ca cac lien ket cua no. Th du: $pwd /users/user2 $ls -l total 2 drwxrwxr-x drwxrwxr-x $ls -l total 1 -rw-rw-r-- 1 $ln
2 2 appli
96 96
Apr Apr
4 4
71
Apr
17:05 file1
appli/file1
21
appli user2 stagiair file.link user2 stagiair 71 Apr 5 17:05 file.link 71 Apr 5 17:05 file1
4.4 Tm kiem mot file Lenh find cho phep tm mot hay nhieu file trong cay th muc. Ta co the: - Tm theo ten: $find ng_dan -name ten_file -print - Tm theo so i-node (i-num) cua file: $find ng_dan -inum number -print - Tm theo ten ngi s hu: $find pathname -user username -print e tranh cac thong bao loi a ra man hnh, ta co the oi hng au ra loi chuan (standard error) ti mot file khong (/dev/null) $find / -name filename -print 2> /dev/null Th du: $pwd /users/user1 $find / -name /dev/ttyc2d1 $ls -i /unix 2810 -r-xr--r-- 2 ttyc2d1 -print 2> /dev/null
bin
bin
508516 Mar 10
1989
/unix
22
75 75 75
18 18 18
Bai tap: 1. Tao 2 files file1 va file2 trong th muc tiep nhan. 2. Sao cac file o vao cac file file?.old cp file1 file1.old 3. Tao cac th muc src va bin mkdir src bin 4. Sao cac file file1 va file2 vao th muc src, cac file file?.old vao th muc bin. 5. Xoa cac file trong th muc tiep nhan. 6. Sao cac files file1, file2, file1.old va file2.old tr lai th muc tiep nhan. 7. e lam tiep cac phan sau, can to chc cac file nh sau: - file1 va file2 trong th muc bin - file1.old va file2.old trong th muc src va - khong co file nao trong th muc tiep nhan. Tao mot lien ket ten la file3 trong th muc tiep nhan vi file1 trong th muc bin cd ln /users/userX/bin/file1 /users/userX/file3 8. Liet ke 2 file file1 va file3 ll -i /users/userX/bin/file1 /users/userX/file3 Ta co nhan xet g ve nhng thong tin c a ra man hnh ? 9. Hay xoa file3 va kiem tra xem no a b xoa cha, xem ieu g xay ra vi file1? Hay giai thch. 10. Lenh chuyen file (mv) cho phep oi ten mot file. Hay sao file file2.old trong th muc src vao file file4/ 11. Hay tm file vi find / -name vi -print 2> /dev/null 12. Xem gia tr i-num cua file vi (dung ll vi tuy chon l) 13. Tm tat ca cac file co cung gia tr i-num vi vi.
23
24
Copyright(c) by Galaxy CD http://www.galaxycd.com p print s [file] save (default mailbox) w [file] same without header print previous d delete + [user] mail to user !cmd execute cmd ?q $ Chu y: au th (header) co the b thay oi khi lam viec tren mang. 5.3 Thong tin bang lenh write Lenh write cho phep gi thong bao tc thi ti nhng ngi khac ang trong phien lam viec. $write user2 hello my friend how are you CTRL D $ Lenh wall cho phep gi thong bao ti tat ca nhng ngi ang lam viec trong he. Lenh write ghi thong tin trc tiep len man hnh nen co the gay nhieu cho cong viec ma ngi nhan ang lam. e tranh lam viec o co the dung lenh mesg vi tuy chon n. $mesg
25
26
Copyright(c) by Galaxy CD http://www.galaxycd.com 6.1.2 Ra khoi vi: Muon ra khoi vi va ghi file co the dung mot trong cac cach sau: ZZ hoac :w sau o :q hoac :wq hoac :x Ra khoi vi va khong ghi file: :q (neu khong co sa oi) hoac :q! Khi ang trong vi, muon lam viec vi SHELL, ta co the lam nh sau: - chay mot lenh cua SHELL :!lenh - hoac goi SHELL, sau o chay cac lenh ta muon, khi ket thuc an CTRL-D e tr lai vi: :!sh $lenh $CTRL-D 6.2 Soan thao van ban: 6.2.1 Xen van ban: - xen ky t tren mot dong: a <text> <ESC>
i <text> <ESC> A <text> <ESC> I <text> <ESC> - xen dong: o <text> <ESC> Xen mot dong vao trc dong cha cursor. O <text> <ESC> Xen mot dong vao sau dong cha cursor. Ghi chu: muon xen cac ky t khong in c (non printable) ta phai go: CTRL V trc chung. 6.2.2 Di chuyen cursor trong file: - theo ky t: sang trai: dung phm mui ten trai hoac h hoac backspace. xuong dong: dung phm mui ten xuong hoac j hoac linefeed sang phai : dung phm mui ten phai hoac i hoac escape. len dong : dung phm mui ten len hoac k. - theo dong: ^ ve au dong $ cuoi dong
Xen ky t vao sau cursor. Lenh khong c hien th tren man hnh. ESC: Ket thuc che o xem. Xen ky t vao trc cursor. Xen ky t vao cuoi dong. Xen ky t vao au dong.
27
Copyright(c) by Galaxy CD http://www.galaxycd.com Enter au dong tiep au dong tren 0(null) ve au dong vat ly (dong bat au bang dau cach hoac tab) theo man hnh: H ve au man hnh (Home) M ve gia man hnh (Middle) L ve cuoi man hnh (Last) theo t (word): w W ve au t tiep b B au t hien tai e E cuoi t hien tai theo cau (sentence): ( ve au cau ) ve cuoi cau dau ket thuc mot cau la cac dau ., ! hoac ? theo oan van (paragraph): { ve au oan van } cuoi oan van oan van ket thuc bang mot dong trong. theo ca so (window): z dong hien tai gia ca so. z<Enter> dong hien tai au ca so. zdong hien tai cuoi ca so. ^D ^U ^F ^B xuong na ca so len na ca so xuong mot ca so (-2 dong) len mot ca so (2 dong)
Ghi chu: ^ la ky hieu cua phm CTRL theo so th t dong: e hien th so th t cua cac dong soan thao: :set nu Xoa bo hien th tren: :set nonu :n <Enter> hoac nG :$ hoac G :se list chuyen cursor en dong th n en dong cuoi van ban hien th cac ky t an (hidden)
28
Copyright(c) by Galaxy CD http://www.galaxycd.com tm day ky t: / ky hieu chieu tm xuoi. ? ky hieu chieu tm ngc. /string ?string chuyen cursor ti dong cha day ky t theo chieu xuoi. chuyen cursor ti dong cha day ky t theo chieu ngc.
// lap lai tm xuoi. ?? lap lai tm ngc. 6.2.3 Xoa van ban: - xoa ky t: x xoa ky t tai v tr cursor 3x xoa 3 ky t X xoa ky t trc v tr cursor - xoa dong van ban: dd hoac :d<CR> xoa dong cha cursor 3dd xoa 3 dong bat au t dong cha cursor d$ hoac D xoa en cuoi dong dw 3dw hoac d3w d/string 6.2.4 Thay the van ban: - thay the ky t: rc R<text><ESC> thay the dong: S<text><ESC> thay the t: cw<text><ESC> xoa t cha cursor xoa 3 t xoa khi het day string
thay the ky t hien tai bang ky t c (???) thay the so ky t bang day text
c2w<text><ESC> C hoac c$ c/string 6.2.5 Xoa hoac lap lai lenh: - Xoa lenh u xoa tac dung cua lenh cuoi cung
thay mot t bang text. T c thay the tnh t cursor en ky t $. thay 2 t. thay the cuoi dong thay the en het string
29
Copyright(c) by Galaxy CD http://www.galaxycd.com U xoa tat ca thay oi a lam tren dong hien tai. - Lap lai lenh: . lap lai lenh sa oi van ban cuoi cung (???) 6.2.6 Xem trang thai van ban ang soan thao: ^G Hien th ten, trang thai, so dong, v tr ,cursor va phan tram van ban tnh t v tr cursor en cuoi van ban. 6.2.7 Sao chep, chuyen van ban: - di chuyen van ban: Moi lan thc hien mot lenh xoa (x hoac d), vi eu ghi lai phan van ban b xoa vao vung em rieng cho en lan xoa sau. Lenh p va P cho phep lay lai van ban t vung em o. Trc khi thc hien lenh nay, cursor phai c at vao v tr cung kieu vi phan van ban co trong vung em : -ky t -t -dong -cuoi dong (end of line) p sao phan van ban xoa lan cuoi cung vao sau oi tng trong cung kieu. P sao phan van ban xoa lan cuoi vao trc oi tng cung kieu. Mot cach khac e chuyen dong: :5,10m20 chuyen cac dong t 5 en 10 ti sau dong 20 - Sao chep van ban: Lenh y(yank) cho phep sao phan van ban ta muon vao vung em . Muon sao phan van ban t vung em ra, ta phai chuyen cursor vao ni can sao, sau o dung p hoac P. Y3w sao 3 t vao vung em Y hoac yy sao dong hien tai vao vung em . 5yy sao 5 dong vao vung em Mot cach khac e sao chep dong: :5,8t25 sao cac dong t 5 en 8 ti sau dong 25 6.3 Dung vi vi danh sach cac lenh a chay cua Shell (history of commands) Lenh fc (fix command) cho phep ta soan thao bang vi va chay lai cac lenh a chay cua Shell, cach dung nh sau: - soan thao va cho chay lenh cuoi cung: $fc - soan thao mot nhom lenh va cho chay: $fc m n - xem danh sach 16 lenh cuoi cung: $fc -l hoac history
30
Copyright(c) by Galaxy CD http://www.galaxycd.com $fc -lr (danh sach theo th t ngc lai) - tao mot file cha mot so lenh a chay (cua history): $fc -nl n1 n2 > cmd cmd la mot file cha cac lenh cua history t lenh n1 en lenh n2 Bai tap: 1. Sao file van ban co san vao th muc tiep nhan: cp /users/EXERCISES/editsave edition 2. Dung chng trnh vi e soan thao file tren: vi edition 3. Chuyen cursor xuong cuoi dong van ban, xong lai chuyen ve au van ban. Dung: CTRL D va CTRL U hoac CTRL F va CTRL B hoac G va :1 4. Hay sa: - Ten Dupont Jean au tien thanh Jean-Jacques - Ten Dupont Pierre au tien thanh Jean-Pierre Lam nh sau: /Dupont Jean/ chuyen cursor ti ky t n cua Jean a-Jacques<ESC> /Dupont Pierre/ chuyen cursor ti ky t p cua Pierre iJean-<ESC> Hay vao ten mnh vao dong trc dong Dupont au tien: :1 /Dupont/ Oname<ESC> Hay vao biet hieu hoac mot ten bat ky vao sau dong Dupont cuoi cung: G ?Dupont? oname<ESC> Ghi file va ra khoi vi: :wq hoac ZZ Vao lai vi va soan thao file edition. at va bo che o hien th so dong. vi edition :set nu :set nonu Hay sa Dupont Jean thanh Martin Jean:
5.
6.
7.
8.
9.
31
Copyright(c) by Galaxy CD http://www.galaxycd.com Chuyen cursor ti ky t D cua Dupont: hoac: XxxxxxiMartin<ESC> (dung x e xoa ky t) (neu lam sai hoac muon lam lai go U e xoa bo toan bo thay oi tren dong) hoac: dwiMartin<ESC> (dung dw e xoa t) hoac: cwMartin<ESC> (dung cw e thay t) 10. Xoa dong cha Coteau Jean: /Couteau Jean/ dd 11. Thay tat ca Dupont thanh Durand /Dupont/ cwDurand<ESC> // . 12. Chuyen cac dong cha Durand xuong cuoi van ban: Chuyen cursor ti dong Durand au tien: 4dd (xoa 4 dong va a vao vung em) G (chuyen en cuoi van ban) P (sao t trong vung em ) 13. Nhan oi dong cha Martin Jean yy p 14. Hien ta ang trong vi, hay gi thong bao ti cho ngi khac ang trong phien lam viec: :!who :!mail userX message ^D 15. Ta ang tai th muc tiep nhan, sa oi va chay lai mot lenh: $cd $write userX message ^D $fc ->sa X thanh Y :wq $
32
Bai 7 Shell_script
Noi dung: gii thieu shell, tien trnh (process) va cac cach thc thc hien tien trnh. Shell co the oc va thc hien mot file gom danh sach cac lenh can thc hien. File dang nay c goi la shell_sript hoac procedure Shell_script c thc hien nh shell, va chnh shell se phat sinh va quan ly tat ca cac tien trnh can thiet e thc hien cong viec c mo ta trong shell_script 7.1 Quan ly tien trnh: 7.1.1 Muc ch cua shell Shell la chng trnh thong dch lenh Hien th $
oc lenh
Hien th $ 7.1.2 Tao tien trnh: Khai niem chung ve tien trnh: Tien trnh c hieu la viec thc hien mot cong viec hay mot chng trnh trong moi trng cu the trong he thong. Ta co the phan biet hai loai tien trnh: - Tien trnh he thong: la tien trnh khong gan vi bat ky mot terminal nao, no c tao ra vao thi iem khi ong he thong hoac vao cac thi iem co nh do ngi dung quan tr he thong at.
33
Cac tien trnh c to chc theo dang cay: Tien trnh cha tien trnh con (parent) (child) oi vi ngi s dung, tien trnh cha la Shell c tao tai thi iem bat au phien lam viec. 7.1.3 Liet ke cac tien trnh: Lenh ps cho phep liet ke danh sach cac tien trnh ang dien ra: $ps -f UID PID PPID C STIME TTY TIME COMMAND user5 4582 1 0 11:04:45 tty23 0:01 -sh user5 4792 4582 36 11:10:04 tty23 0:04 ps -f trong o: UID so UID cua ngi chu tien trnh PID so cua tien trnh (process identity) PPID so cua tien trnh cha (parent process identity) C ch so s dung bo x ly (processor utilization for scheduling). STIME thi iem bat au tien trnh TTY terminal ieu khien tien trnh TIME thi gian tch luy thc hien tien trnh (cumulative time) COMMAND ten lenh sinh ra tien trnh Tien trnh so 1 la tien trnh init, trong o co chcc nang giam sat cac terminal, la tien trnh cha cua tat ca cac tien trnh Shell khi login. Cach thc hien mot shell_script: $chmod +x proc $proc hoac $sh proc 7.2 Lap cach thc (setup) cho shell_script: Lenh set cho phep lap cach thc chay shell_script. set -x hien th dong lenh sau khi trien khai lenh set -v hien th dong lenh trc khi trien khai set -e ra khoi shell_script sau khi gap mot loi set -t ra khoi shell_script sau lenh tiep set xoa tac dung cua x va v Viec lap cach thc ch lien quan ti shell_script ang chay. Cac tuy chon -x va v co the a vao dong lenh goi shell_script: $sh -v proc
34
Th du: - dung -x: $cat exam1 set -x echo The current directory is : pwd echo List of files : echo file1 file2 file3 $exam1 + echo The current directory is : The current directory is: + pwd /users/user8 + echo List of files: List of files: + echo file1 file2 file3 file1 file2 file3 dung -v: $cat exam2 set -v echo The current directory is : pwd echo List of files : echo file1 file2 file3
$exam2 echo The current directory is : The current directory is: pwd /users/user8 echo List of files: List of files: echo file1 file2 file3 file1 file2 file3 Co the dung ky t # e viet chu thch cho dong lenh trong shell_script, neu chu thch viet ngay sau lenh tren cung mot dong, ta phai cho t nhat mot dau cach (space) vao trc ky t #.
35
Copyright(c) by Galaxy CD http://www.galaxycd.com 7.2 Cac loai Shell UNIX Co 3 loai shell UNIX: csh cua Berkeley BSD sh cua AT&T, Bourne-shell ksh cua AT&T,Korn-shell Shell ksh dung trong tai lieu nay la toan bo sh ket hp vi phan phat trien cua csh. Shell csh co cu phap giong ngon ng C, nhng cac shell_script cua csh khong chay c di sh va ksh. Di ay la liet ke nhng khac nhau c ban khac: - csh va ksh co nhat ky (history). - ksh co trnh soan thao dong (line editor) - cu phap vong lap csh: while end ksh, sh: while do done - ch csh co lenh goto - c che thay the bien cua ksh la hoan thien nhat - csh va ksh co cac phep tnh so hoc.
36
37
Copyright(c) by Galaxy CD http://www.galaxycd.com ma lenh nay can oc STRING $ Th du: dung lenh cat tao mot file: $cat > file1 <<OK aa bb OK $cat aa bb $ file1
8.2 Chuyen d lieu gia cac tien trnh: Hai dong lenh sau ay: lenh1 > temp lenh2 < temp co the c thay the bang mot dong lenh nh sau: lenh1 | lenh 2 Khi o au ra chuan cua lenh lenh1 se la au vao chuan cua lenh lenh2, va file trung gian temp khong can thiet na. Ky hieu | goi la ong (pipe). Th du: $ls -l | pg 8.3 oi hng kep (double) au ra chuan: Lenh tee cho phep oi hng kep au ra chuan: va hng d lieu au ra ve hng khac, va hien th ra man hnh. $lenh | tee ten_file. stdout lenh tee
stdout
ten_file
38
Copyright(c) by Galaxy CD http://www.galaxycd.com Th du: $ps -ef | tee file_ps | grep $LOGNAME Co the dung tee vi tuy chon a (tee a), khi o d lieu au ra se c ghi tiep vao cuoi file file_ps Bai tap: 1. Hay viet lenh co ten WHO vi cac chc nang sau:: - tnh va hien th so ngi s dung ang trong phien lam viec. - hien th danh sach va cac thuoc tnh cua ho. - xoa file em (neu co dung) c tao khi chay lenh WHO. Gi y: dung cac lenh who, tee, wc. 2. Viet lenh LLD liet ke cac th muc con trong mot th muc. Gi y: dung cac lenh ll va grep.
39
$param London Paris New-York Brussels Name of shell_script: param First parameter: London Third parameter: New-York Number of parameters: 4 List of all the param: London Paris New-York Brussels 9.1.2 Dch chuyen cac tham so:
40
Copyright(c) by Galaxy CD http://www.galaxycd.com Vi cach the hien tham so cua shell_script bang $n, ta ch co the lam viec c vi t 1 en 9 tham so. Bang cach dch chuyen, ta co the lam viec vi so tham so nhieu hn 9. Viec dch chuyen c thc hien bi lenh: shift Sau khi shift: - $0 van gi nguyen - $1 mat i - $2 thanh $1 - $3 thanh $2 - $n thanh $n-1 - $*, S# c cap nhat lai. Co the dch chuyen n v tr bang cach: shift n Th du: $cat shifting echo First parameter: $1 echo Nineth parameter: $9 echo Number of parameters: $# echo SHIFTING shift echo First parameter: $1 echo Nineth parameter: $9 echo Number of parameters: $# $ $shifting A B C D E F G H I J K First parameter: A Nineth parameter: I Number of parameters: 11 SHIFTING shift First parameter: B Nineth parameter: J Number of parameters: 10 $ 9.2 Cac bien Shell 9.2.1 Cac kieu bien: Ksh co the x ly 4 kieu bien sau: - so nguyen - xau ky t
41
Copyright(c) by Galaxy CD http://www.galaxycd.com - bang cac xau ky t - bang cac so nguyen Th du: - bien xau ky t: $string = character string $print $string character string Ghi chu: o noi dung bien c bieu dien bang ten bien va dau $ ang trc. o trc va sau dau khong co ky t trong. - bien so nguyen: $integer var = 2 $itypeset -i var1 = 23 $print $var $var1 2 23 - bang cac xau ky t: $string[1] = more characters $print ${string[1]} more characters $print ${string[0]} character string Ghi chu: khi khai bao mot bien, ta cung co the coi bien o la bien au tien cua mot bang cung ten vi no. - bang cac so nguyen: $integer tabint $typeset -i i $tabint[0] = 13 $tabint[13] = toto ksh:toto:bad member $i=1 $tabint[i] = 45 $print tabint[1] 45 Ch so (index) cua bang la mot so nguyen t 0 en 511. - xoa mot bien: $unset i 9.2.2 Cach thay the cac bien shell:
42
Copyright(c) by Galaxy CD http://www.galaxycd.com $print ${var-val1} hien th gia tr cua var, neu bien var cha nh ngha th hien th val1 thay cho gia tr cua var $print ${var=val2} neu var cha nh ngha, tao bien var vi gia tr la val2 $print ${var:-val3} giong trng hp au $print ${var:=val4} giong trng hp th hai nhng var co the cha c nh ngha hoac co gia tr null. $print ${var?message} neu var cha c nh ngha, hien th message. (th du: print ${var?not defined}) Chu thch: - bien cha c nh ngha la bien cha ton tai - bien co ga tr null la bien ch chamot ky t Return, hoac xau rong. $integer tab $tab[0]=1 tab[1]=2 tab[2]=7 - liet ke cac gia tr cua bang: $print ${tab[*]} 1 2 7 - hien th so phan t cua bang: $print ${#tab[*]} 3 9.1.3 Dung mot bien che do hoi ap: Lenh read cho phep dung mot bien che o hoi ap khi ang chay mot shell_script. Th du: $cat menu echo This is an example of menu echo Choice: 1, 2 or 3 read reply echo Your choice is $reply $menu This is an example of menu Choice: 1, 2 or 3 2 Your choice is 2 Cu phap read var?invite cho phep hien th trc tiep xau invite $read var?Choice: 1, 2 or 3? Choice :1,2 or 3?3 $echo $var 3 9.2.4 Bao ve mot bien:
43
Copyright(c) by Galaxy CD http://www.galaxycd.com Lenh read-only cho phep bao ve mot bien. Ta ch co the oc makhong thay oi c gia tr cua no. $VAR=45 $readonly VAR $VAR=22 ksh: VAR: is readonly $echo $VAR 45 Lenh readonly khong co oi hien th danh sach cac bien c bao ve. e bao ve mot bien, ta cung co the dung tpeset vi tuy chon r: $typeset -r var1=68 9.3 Cac ky t ac biet 9.3.1 Tao mot ten vi cac metacharacter Mot so ky t co y ngha ac biet trong dong lenh Shell, ngi ta goi cac ky t o la metacharacter. Chung cho phep tao ra cac ten file ta quan tam trong mot th muc. * thay the mot xau ky t bat ky/ ? thay the mot ky t bat ky. [] thay the mot trong nhng ky t trong ngoac vuong. [!] thay the mot ky t khong co trong ngoac vuong. Muon dung mot ky t kieu metacharacter e the hien mot ten ma khong b hieu ng ac biet cua no, ta can cho vao trc no mot ky t \ (backslash). Chu y: cac metacharacter dung trong Shell khong cung y ngha vi cac metacharacter dung trong cac chng trnh soan thao. Th du: $echo * hien th tat ca cac file trong th muc. $echo *.c hien th tat ca cac file co ten ket thuc bang .c $echo \* * $ls a.out try.o file1 file1.c file5 fileA $ls *.c file1.c
44
Copyright(c) by Galaxy CD http://www.galaxycd.com $ls *.* a.out try.o file1.c $ls *.? try.o file1.c $ls file[0-9] file1 file5 Chu y: Cac ky t metacharacter ch co tac dung trong phan cua dong lenh, chung khong co tac dung trong phan oi hng. Th du: $echo hello > *.c $ls *.c liet ke cac file co ten ket thuc bang .c $ls \*.c liet ke cac file co ten *.c 9.3.2 Ky t ~(tilde) Ky t ~ thay the ten th muc tiep nhan Hai ky t ~+ thay the ten th muc ang lam viec. Hai ky t ~_ thay the ten th muc ta a trong ngay trc khi chuyen sang th muc hien hanh. Th du: $echo ~ xem ten th muc tiep nhan /users/user1 $cd /etc chuyen en /etc $pwd /etc $cd tr ve th muc tiep nhan $pwd /users/user1 $echo ~_ xem ten th muc lam viec ngay trc khi chuyen en th muc hien hanh /etc $echo ~+ xem ten th muc lam viec /users/user1 9.4 Lay ket qua cua mot lenh: 9.4.1 Lay ket qua cua mot lenh cho vao mot bien Trong shell_script, ket qua cua mot lenh co the the hien bang cach sau:
45
Copyright(c) by Galaxy CD http://www.galaxycd.com `lenh` hoac $(lenh) Ta co the dung cach the hien tren e gan noi dung cho mot bien. Th du: $pwd /users/user1 $YY = `pwd` $echo $YY /users/user1 $var=$(pwd) $echo $var /users/user1 9.4.2 Lay ket qua cua mot lenh di dang cac tham so: Lenh set cho phep lay ket qua cua mot lenh di dang cac thong so nh sau: $1, $2, $3$[n] Th du: $date Tue Jun 6 17:12:40 EET 1991 $set date $echo $2 Jun $echo $6 1991 $set $(ls) $echo ${11} 9.6 Cac quy tac thay the cua Shell 9.5.1 Dung cac dau nhay: Shell khong thc hien phep thay the cac ky t trong dau nhay n Shell thc hien phep thay the trong dau nhay kep cac ky t: $ \ va ` Th du: $NOM=jean $echo nom=$NOM nom=jean thong dch bien $echo nom=$NOM nom=$NOM $ echo nom=$NOM
46
Copyright(c) by Galaxy CD http://www.galaxycd.com nom=jean $echo * file1 file2 thong dch bien
thong dch ky t *
$echo * * hien th khong thong dch Bang tom tat ve thong dch cac ky t ac biet trong cac dau nhay: Dau nhay c Cac ky t ac biet dung trong dau nhay dung ` hoac ) \ $ f n n n n ` hoac $( n f n o o n o f o o Trong o: f = ket thuc xau ky t o = ky t c thong dch (co y ngha ac biet) n = ky t khong c thong dch (bnh thng)
* n o n
Th du cach s dung bang tom tat: - Ky t $ c thong dch nh mot metacharacter khi no trong $() hoac , khi bien c thay the bangh gia tr cua no. Ngc lai, no khong c thong dch khi gia hai dau nhay n. 9.5.2 Thay the up Khi Shell lam thao tac thay the no quet mot lan dong lenh va thay the bien co $ ang trc. Ta co the lam hai lan ong tac quet bang dung lenh eval cua Shell. Nh vay lenh ng sau eval c thay the 2 lan trc khi chay. Th du: Shell_script last_argument hien th oi cuoi cung cua dong lenh: $cat last_argument set -x eval echo $$# $last_argument 1 A Z 3 F G + eval echo $6 + echo G G Bai tap: 1. Hay viet shell_script copy_file e sao chep mot file cua mot ngi s dung khac, sau o oi nhom va ngi s dung cua file sao. Cu phap: 47
Copyright(c) by Galaxy CD http://www.galaxycd.com copy_file file1 file2 user group Gi y: s dung cac lenh cp, chown, chgrp 2. Hay viet shell_script dup_file co chc nang nh copy_file tren nhng ten cac file, ten ngi s dung va ten nhom c vao bang hoi ap. Gi y: s dung lenh read va cac bien can thiet.
48
49
Copyright(c) by Galaxy CD http://www.galaxycd.com 10.3.2 Thc hien mot shell_script trong shell cha: Thc hien mot shell_script trong shell cha cho phep no tha ke s dung toan bo moi trng cua shell cha: Th du: $cat proc echo $var $VAR= ok $proc $.proc nh ngha bien var trong shell mot shell con c tao ra va no khong hieu bien VAR shell t thc hien lenh ma khong tao shell con, bien VAR co trong moi trng cua no.
50
51
Copyright(c) by Galaxy CD http://www.galaxycd.com test test test [file1 [file1 [file1 [-b [-c -w -x -s -ef -nt -ot filename filename filename file2] file2] file2] 0 0 0 0 0 0 0 0 neu file ton tai va ghi c neu file ton tai va chay c file ton tai va khong rong (not empty) file1 va file2 lien ket vi nhau neu file1 mi hn file2 neu file1 cu hn file2 file ton tai va oc ghi theo block file ton tai va oc ghi theo ky t
filename] filename]
+So sanh gia cac so: Cu phap nh sau: test value1 operator value2 Cac toan t so sanh (operator) co the dung: -eq bang (equal to) -ne khong bang (not equal to) -gt ln hn (greater than) -ge ln hn hoac bang (greater or equal to) -lt nho hn (less than) -le nho hn hoac bang (less or equal to) Th du: $test $A -eq $B true neu gia tr cua bien A bang gia tr cua bien B +Kiem tra cac xau ky t: [str1 = str2] test str1 != str2 test -z $A test -n $A Th du: $test $LOGNAME
ung neu str1 bang str2 ung neu str1 khac str2 ung neu xau $A rong ung neu xau $A khong rong != user1
+Ket hp cac ieu kien: Cac toan t so sanh co the ket hp vi: -a va (and) -o hoac (or) ! ao (negation) \(\) gop (grouping) Th du: $test \(-r file1 -o -r file2 \) -a -w file3 ung neu:
52
Copyright(c) by Galaxy CD http://www.galaxycd.com - file1 va file2 ton tai va ch oc c va - file 3 ton tai va ghi c. 11.2 Lap trnh mot cau truc co ieu kien: 11.2.1 Cau truc co ieu kien : a) if then else fi if command1 then command2 else command3 fi Giai thch: Neu gia tr tra ve sau khi thc hien command1 la 0 (ung) th thc hien command2, neu khong th thc hien command3 ket thuc Th du: if test -f file1 then echo file exists else echo file does not exist fi Chu thch: khong bat buoc phai dung else if [-w file1] then echo message >> file1 fi b) Cau truc long (nested) Ta co the long cac cau truc ieu kien vi nhau. Khi o: else if thanh elif Th du: if test -f file1 then echo file exists elif test -d file1 then echo file is a directory fi trong trng hp nay fi la chung. Chu y: cu phap sau cung co the dung c: if then else if then
53
Copyright(c) by Galaxy CD http://www.galaxycd.com else fi c) Cac toan t | | va && Trong trng hp ieu kien n gian, co the dung toan t hoac logic | |, hoac toan t va logic && e lap trnh cau truc. command1 && command2 Neu command1 c thc hien tot, th thc hien command2, neu khong th ra. command1 | | command2 Neu command1 c thc hien tot, th ra, neu khong, th thc hien command2. Chu y: co the dung dau ngoac n e gop cac lenh Th du: test -d demo && echo demo is a directory test -d demo | | echo demo is not a directory (test -d demo && ls -l demo) | | echo demo not ok 11.2.2 Re nhanh trong phep chon mot trong nhieu gia tr: Dung cau truc: case in esac Cau truc tren cho phep chon mot trong nhieu xau ky t va thc hien cac lenh lien quan en xau o. case $variable in string1) cmd1 cmd2 ;; string2) cmd1 cmd2 ;; string3 | string4) commands ;; esac Chu y: co the dung cac metacharacter cua shell e bieu dien xau ky t, | co ngha la hoac 11.3 Lap trnh mot vong lap 11.3.1 Vong lap for a) Cau truc: for in do done Cau truc nay cua for cho phep thc hien mot chuoi lenh nh nhau vi moi mot gia tr trong danh sach a cho. So cac vong lap bang so cac gia tr trong danh sach. for variable in val1 val2 val3
54
done Vi variable co the gan c cac gia tr val1, val2 thc hien cac lenh command1, command2, Th du: WRITE la mot shell_script gi thong bao ti 3 ngi dung user1, user2, user3: $cat WRITE for i in user1 user2 user3 do write $I < message_file done b) Cau truc : for do done Cau truc nay cho phep thc hien mot chuoi lenh nh nhau vi cac oi ($1 $2 ) cua shell_script c goi. for variable do command1 command2 command3 done Vi variable co the gan c cac oi cua shell_scipt thc hien cac lenh command1, command2, Th du: Shell_script copy sao chep cac file trong danh sach oi vao danh muc /users/user8 va oi nhom thanh nhom student, oi ngi s hu thanh user8. $cat copy for i do if [-f $i] then cp $i /users/user8 chgrp student /users/user8/$i chown user8 /users/user8/$i fi done $ls -l total 10 -rw-------rw------$copy file1
file1 file2
55
Copyright(c) by Galaxy CD http://www.galaxycd.com toto is not a file $ls -l /users/user8 total 5 -rw------1 phil animator 56 May 31 14:14:22 file1 -rw------1 phil animator 22 May 31 15:14:22 file2 11.3.2 Vong lap while va until a ) while do done Vong lap while thc hien mot chuoi lenh khi ieu kien van con thoa man. while command1 do command2 command3 command4 done Khi gia tr tra ve cua viec thc hien command1 van thoa man ieu kien (true), shell thc hien tiep chuoi lenh gia do done. Hai lenh thng dung trong vong lap while: true hoac : cho gia tr true(0) sleep[n] i n giay Th du: - shell_script param hien th tat ca cac oi cua lenh. $cat param while test $# -ne 0 do echo $1 shift done - shell_script disp_time hien th so lieu ngay thang theo khoang thi gian 30 giay. $cat disp_time while true hoac while : do date sleep 30 done b) until do done Vong lap until hoat ong ngc lai vi vong lap while until command1 do command2 command3 command4
56
Copyright(c) by Galaxy CD http://www.galaxycd.com done Khi gia tr tra ve cua viec thc hien command1 van khong thoa man ieu kien (false), shell thc hien chuoi lenh gia dodone Lenh false thng hay c dung trong vong lap nay e cho gia tr false. Th du: vong lap until: - ta viet lai shell_script param tren: $cat param until test $# -eq 0 do echo $1 shift done c) cac phep tnh so hoc Lenh let c dung e thc hien cac phep tnh so hoc: Cac toan t co the dung gom: + * / % Th du: $integer i=10 j=2 k l let k=i+j $echo $k 12 Chu y: cu phap let k=i+j tng ng vi ((k=i+j)) hoac k=i+j $((l=k*j)); echo $l 24 Lenh let co the dung vi cac toan t so sanh, ket qua c cha trong bien $?. Cac toan t so sanh co the dung la: <= >= < > == != Th du: $((i<j));echo $? 1 Ta cung co the dung cac toan t logic sau ay vi let: ! && | | d) Lap trnh mot so em Lenh expr cho phep ta thc hien mot thao tac co cu phap nh sau: $expr term1 operator term2 Cac toan t co the dung: cong tr nhan chia lay so d + * / % Th du: shell_script create_file tao cac file file1, file10 $cat create_file count=1 while test $count -le 10
57
$cat create_file2 integer count=1 while let count <10 do >file$count count=count+1 done 11.3.3 Ra khoi mot vong lap: Lenh break cho phep ra khoi cac vong lap for, while, until. Th du: shell_script stock ghi cac dong ky t vao t ban phm len file lines cho ti khi ta go t END: $cat stock while true do echo Enter your line: read answer if test $answer = END then break else echo $answer >> lines fi done Chu y: break[n] cho phep ra khoi n mc cua cac vong lap long. 11.3.4 Bo qua phan tiep theo trong mot vong lap: Lenh continue cho phep bo qua cac lenh con lai, quay ve au vong lap. Th du: shell_script supprim xoa tat ca cac file co trong danh sach oi, tr file save va source: $cat supprim set -x for i do if test $i = save -o $i = source then continue fi echo $i rm $i done $cd $lc titi appli save source toto
58
$supprim * + test titi = save + echo titi titi + rm titi + test save = save + continue + test source = save + continue + test toto = save + echo toto toto + rm toto
-o
titi = source
-o -o -o
$lc save source Bai tap: 1. Dung cac cau truc va re nhanh viet cac shell_script sau: a) writemail message userX Chc nang: - gi thong bao trc tiep cho userX - neu ngi o khong ang trong phien lam viec, gi vao hop th. Gi y: dung lenh write, mail, | | b) fileread filename Chc nang: - kiem tra oi co phai la file hay khong - neu ung, kiem tra co phai la file ch oc (readonly) khong - hien cac thong bao tng ng ket qua c) filesort file1 file2 Chc nang: - oc mot dong t ban phm va ghi len file theo cach sau: + vao cuoi file1 neu dong cha t nhat mot ch (letter) + vao cuoi file2 neu dong cha t nhat mot so (number) va khong cha bat ky mot ch. + vao file khong (null) neu khac hai loai tren - kiem tra so cac oi, neu khac 2, hien th thong bao: command: filesort file1 file2 Gi y: dung cac lenh case, read va cac metacharacter 2. S dung cac vong lap a hoc, viet cac shell_script sau: a) testdir Chc nang: hien th danh sach cac th muc con trong th muc lam viec.
59
Copyright(c) by Galaxy CD http://www.galaxycd.com Gi y: dung cac lenh pwd, for, test b) mkfiles prefix n Chc nang: -tao n file rong (ngam nh la 5) vi ten prefix.n (th du: file.1, file.2, file.3 vi prefix=file va n=3) - hien dong khang nh tao file prefix.n hay khong trong vong lap. Gi y: dung if, while, test, read, expr
60
61
Chu y: - sau khi cho mot tien trnh chay ngam, ta lai co the dung terminal lam viec khac. - khong co thong bao khi tien trnh ngam ket thuc, do o khi chay shell_script ta co the cho them thong bao ket thuc: $(command; echo END)& - so PID cua tien trnh ngam trong bien $! - Co the oi hng vao/ra (i/o) cua tien trnh ngam, tranh nhieu man hnh khi ta lam viec khac. 12.2.2 Quan ly cac tien trnh ngam (job control) Lenh: $set -m cho phep quan ly cac tien trnh ang chay ngam. Th du: $proc1 >> file1 & [1] 478 $proc2 & [2] 481 $proc3 & [3] 490 Hien th trang thai cua cac tien trnh ngam : $jobs -l [3] +490 running proc3 & [2] -481 done proc2 [1] 478 running proc1 >> file1 & trong o: [n] so th t tien trnh + tien trnh chay cuoi cung tien trnh trc tien trnh cuoi 490 so PID cua tien trnh running tien trnh ang thc hien done tien trnh a ket thuc proc3 & ten lenh goi 12.2.3 Tiep tuc tien trnh sau khi ket thuc phien lam viec: Ta co the cho tiep tuc thc hien cac tien trnh ngam sau khi cat lien lac vi terminal bang cach dung lenh nohup. Cac so lieu cua tien trnh a ra stdout va stderr se c ghi len file nohup.out Th du: $nohup uncount&
62
Copyright(c) by Galaxy CD http://www.galaxycd.com [1] 478 sending output to nohup.out $exit 12.2.4 i ket thuc tien trnh Bang cach dung lenh wait vi oi so la PID cua tien trnh: $wait 467 12.2.5 Diet mot tien trnh Dung lenh kill vi oi so la PID cua tien trnh: $kill 467 phat sinh tn hieu 15 (ngam nh) $kill -9 467 phat sinh tn hieu diet tien trnh Ta cung co the diet mot tien trnh theo so th t cua no trong danh sach cac tien trnh ang chay ngam : kill %n Th du: $kill %1 $jobs [1] + done(143) proc >> file1 & [3] + running uncount & $kill [3] -9 + %+ killed
uncount
&
12.3 e quy Tat ca cac shell_script eu co tnh e quy (recursivity). Th du: shell_script dir_tree hien th cay th muc bat au t th muc la oi cua no. $cat dir_tree if test -d $1 then echo $1 is a directory for j in $1/* do $0 $j #$0 ten shell_script done fi $dir_tree /usr /usr is a directory /usr/adm is a directory /usr/adm/acct is a directory /usr/adm/acct/fiscal is a directory /usr/adm/acct/nite is a directory /usr/adm/sa is a directory
63
Copyright(c) by Galaxy CD http://www.galaxycd.com /usr/bin is a directory Bai tap: 1. Hay viet shell_script: LisFileDel file1 file2 Chc nang: - hien th noi dung cac file co ten trong danh sach oi - tiep tuc go phm DEL, bo qua file ang hien th, bat au file tiep - khoi phuc chc nang ngam nh cua phm DEL khi ket thuc. Gi y: Dung trap, continue, signal 2 2. Hay viet shell_script: trap2 Chc nang: - thc hien mot vong lap hien th thong bao: Shutdown in n minutes n co gia tr t 5 en 1 - moi khi go phm DEL, lap tc hien th thong bao tiep theo - xoa bo tac dung cua phm DEL trong phut cuoi cung - khoi phuc chc nang ngam nh cua phm DEL khi ket thuc Gi y: dung trap, continue, for
64