Professional Documents
Culture Documents
com
Muc luc:
PHAN 1: UNIX C S
1
Copyright(c) by Galaxy CD http://www.galaxycd.com
2
Copyright(c) by Galaxy CD http://www.galaxycd.com
3
Copyright(c) by Galaxy CD http://www.galaxycd.com
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.
$wc -l /etc/passwd
32 etc/passwd
4
Copyright(c) by Galaxy CD http://www.galaxycd.com
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>
5
Copyright(c) by Galaxy CD http://www.galaxycd.com
uname<CR>
who | wc<CR>
10. Ket thuc phien lam viec:
Ctrl D (gi phm Ctrl va go D) hoac exit<CR>
6
Copyright(c) by Galaxy CD http://www.galaxycd.com
Noi dung: Cac khai niem c ban ve file cua UNIX, to chc cua cac file tren a, cac
thao tac vi file.
user1 user2
7
Copyright(c) by Galaxy CD http://www.galaxycd.com
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
8
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
$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.
9
Copyright(c) by Galaxy CD http://www.galaxycd.com
CONSOLE stderr
2>
Hnh 2 : oi hng au vao/ra chuan
$rm text_file
$rm -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
Copyright(c) by Galaxy CD http://www.galaxycd.com
Noi dung : mo ta c che bao ve file cua UNIX : ngi s dung, nhom ngi s dung,
cac quyen tham nhap file
$cat /etc/passwd | pg
root : RKgSspHwm.PB.:0:3:0000-Admin000,,,:/:
date::18:1::/:/bin/date
tty::19:1::/:/bin/tty
user1::3000:300::/users/user1:
user2::3001:300::/users/user2:
$/etc/defuser | pg
USER UID GID HOMEDIR SHELL
root 0 3 /
daemon 1 12 /
bin 2 2 /bin
sys 3 3 /usr
adm 4 4 /usr/adm
date 18 1 / /bin/date
tty 19 1 / /bin/tty
sync 20 1 / /bin/sync
securadm 11 11 /etc/secure/bin
lp 71 2 /usr/spool/lp
user1 3000 300 /users/user1 /bin/ksh
12
Copyright(c) by Galaxy CD http://www.galaxycd.com
$cat /etc/group
public :: 100 : invite
animator :: 200 :
stagiaires :: 300 :
$/etc/defgrp
GRP GID USERS
root 0 root
other 1 date
sync
shut
bin 2 root
bin
daemon
lp
sys 3 root
bin
sys
adm
adm 4 root
adm
daemon
uucp 5 uucp
daemon
13
Copyright(c) by Galaxy CD http://www.galaxycd.com
nuucp
mail 6 root
14
Copyright(c) by Galaxy CD http://www.galaxycd.com
15
Copyright(c) by Galaxy CD http://www.galaxycd.com
16
Copyright(c) by Galaxy CD http://www.galaxycd.com
$> titi
$ll titi
-rw------- 1 user1 other 0 Mar 11 10:11 titi
$umask 333
$>toto
$ll toto
-r--r--r-- 1 user1 other 0 Mar 11 20:11 toto
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 6 Apr 5 14:06 file1
$cat file1
Hello
$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
18
Copyright(c) by Galaxy CD http://www.galaxycd.com
Noi dung: cac thao tac, cac lenh thng dung vi file
Th du:
$pwd
/users/user2
$ls -l
total 2
drwxrwxr-x 2 user2 stagiair 32 Apr 5 16:31 copie
drwxrwxr-x 2 user2 stagiair 96 Apr 5 16:31 source
$cd source
$ls -l
total 3
-rw-rw-r-- 1 user2 stagiair 16 Apr 5 16:25 original1
-rw-rw-r-- 1 user2 stagiair 17 Apr 5 16:26 original2
-rw-rw-r-- 1 user2 stagiair 18 Apr 5 16:27 original3
$ls -l ../copie
total 0
$ls -l ../copie
total 1
-rw-rw-r-- 1 user2 stagiair 16 Apr 5 16:25 original1.copie
$cp * ../copie
19
Copyright(c) by Galaxy CD http://www.galaxycd.com
$cd ../copie
$ls -l
total 4
-rw-rw-r-- 1 user2 stagiair 16 Apr 5 16:25 original1
-rw-rw-r-- 1 user2 stagiair 16 Apr 5 16:25 original1.copie
-rw-rw-r-- 1 user2 stagiair 17 Apr 5 16:26 original2
-rw-rw-r-- 1 user2 stagiair 18 Apr 5 16:27 original3
Th du:
$pwd
/users/user2/source
$ls -l
total 3
-rw-rw-r-- 1 user2 stagiair 16 Apr 5 16:25 original1
-rw-rw-r-- 1 user2 stagiair 17 Apr 5 16:26 original2
-rw-rw-r-- 1 user2 stagiair 18 Apr 5 16:27 original3
$ls -l
total 3
-rw-rw-r-- 1 user2 stagiair 16 Apr 5 16:25 original1.bis
-rw-rw-r-- 1 user2 stagiair 17 Apr 5 16:26 original2
-rw-rw-r-- 1 user2 stagiair 18 Apr 5 16:27 original3
$cd ..
20
Copyright(c) by Galaxy CD http://www.galaxycd.com
$pwd
/users/user2
$ls -l
total 2
drwxrwxr-x 2 user2 stagiair 96 Apr 4 10:20 copie
drwxrwxr-x 2 user2 stagiair 96 Apr 4 10:21 source
$ls -l
total 2
drwxrwxr-x 2 user2 stagiair 96 Apr 4 10:20 copie
drwxrwxr-x 2 user2 stagiair 96 Apr 4 10:21 replace
$ls -l replace
total 3
-rw-rw-r-- 1 user2 stagiair 16 Apr 5 16:25 original1.bis
-rw-rw-r-- 1 user2 stagiair 17 Apr 5 16:26 original2
-rw-rw-r-- 1 user2 stagiair 18 Apr 5 16:27 original3
$ls -l
total 2
drwxrwxr-x 2 user2 stagiair 96 Apr 4 10:20 appli
drwxrwxr-x 2 user2 stagiair 96 Apr 4 10:21 source
$ls -l appli
total 1
-rw-rw-r-- 1 user2 stagiair 71 Apr 5 17:05 file1
21
Copyright(c) by Galaxy CD http://www.galaxycd.com
$ls -l appli
total 1
-rw-rw-r-- 2 user2 stagiair 71 Apr 5 17:05 file1
$ls -l file.link
total 1
-rw-rw-r-- 2 user2 stagiair 71 Apr 5 17:05 file.link
$ls -i /unix
2810 -r-xr--r-- 2 bin bin 508516 Mar 10 1989 /unix
$pwd
/users/user1
22
Copyright(c) by Galaxy CD http://www.galaxycd.com
/users/user1/file1
$ll
total 3
-rw-rw-r-- 1 user1 stagiair 75 Oct 18 11:41 res1
-rw-rw-r-- 1 user1 stagiair 75 Oct 18 11:42 res
-rw-rw-r-- 1 user1 stagiair 75 Oct 18 11:43 file1
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
Copyright(c) by Galaxy CD http://www.galaxycd.com
Noi dung: gii thieu cac lenh dung e truyen va nhan tin mail, write
$mail user3
you can read my files
CTRL-D
$
- nhan th
bmw
Welcom on DPX/2
login : user3
B.O.S
you have mail
$mail
From user2 Fri Mar 7 12:07 EET 1992
you can read my files
?h
usage
q quit
x exit without changing mail
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.
$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
Copyright(c) by Galaxy CD http://www.galaxycd.com
Noi dung: gii thieu chng trnh soan thao vi, cung cap mot so kien thc c s e co
the soan thao c van ban hay chng trnh.
26
Copyright(c) by Galaxy CD http://www.galaxycd.com
27
Copyright(c) by Galaxy CD http://www.galaxycd.com
^D xuong na ca so
^U len na ca so
^F xuong mot ca so (-2 dong)
^B len mot ca so (2 dong)
28
Copyright(c) by Galaxy CD http://www.galaxycd.com
- tm day ky t:
/ ky hieu chieu tm xuoi.
? ky hieu chieu tm ngc.
- thay the t:
cw<text><ESC> thay mot t bang text. T c thay the tnh t cursor
en ky t $.
c2w<text><ESC> thay 2 t.
C hoac c$ thay the cuoi dong
c/string thay the en het string
6.2.5 Xoa hoac lap lai lenh:
- Xoa lenh
u xoa tac dung cua lenh cuoi cung
29
Copyright(c) by Galaxy CD http://www.galaxycd.com
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
/Dupont Pierre/
chuyen cursor ti ky t p cua Pierre
iJean-<ESC>
5. Hay vao ten mnh vao dong trc dong Dupont au tien:
:1
/Dupont/
Oname<ESC>
6. Hay vao biet hieu hoac mot ten bat ky vao sau dong Dupont cuoi cung:
G
?Dupont?
oname<ESC>
7. Ghi file va ra khoi vi:
:wq hoac
ZZ
8. Vao lai vi va soan thao file edition. at va bo che o hien th so dong.
vi edition
:set nu
:set nonu
9. Hay sa Dupont Jean thanh Martin Jean:
31
Copyright(c) by Galaxy CD http://www.galaxycd.com
32
Copyright(c) by Galaxy CD http://www.galaxycd.com
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
Hien th $
oc lenh
Hien th $
33
Copyright(c) by Galaxy CD http://www.galaxycd.com
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
34
Copyright(c) by Galaxy CD http://www.galaxycd.com
$sh -x proc
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
36
Copyright(c) by Galaxy CD http://www.galaxycd.com
Noi dung: cac luong d lieu vao/ra chuan va cac thao tac oi hng chung.
37
Copyright(c) by Galaxy CD http://www.galaxycd.com
$cat file1
aa
bb
$
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
Copyright(c) by Galaxy CD http://www.galaxycd.com
Noi dung: cach thao tac vi cac tham so cua shell_script, cac bien trong Shell, cac ky
t ac biet c thong dch khi viet trong cau lenh shell.
$# so cac tham so
$* tat ca cac tham so
$$ PID cua shell_script
Th du:
$cat param
echo Name of shell_script: $0
echo First parameter : $1
echo Third parameter : $3
echo Number of parameters: $#
echo List of all the param: $*
$
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
$
41
Copyright(c) by Galaxy CD http://www.galaxycd.com
$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
$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
45
Copyright(c) by Galaxy CD http://www.galaxycd.com
$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}
$echo nom=$NOM
nom=$NOM hien th khong thay the
$ echo nom=$NOM
46
Copyright(c) by Galaxy CD http://www.galaxycd.com
$echo *
file1 file2 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 n
` hoac $( n f n o o o
n o f o o n
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)
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
48
Copyright(c) by Galaxy CD http://www.galaxycd.com
Noi dung: cac lp bien cua Shell, cach truyen bien cho tien trnh.
49
Copyright(c) by Galaxy CD http://www.galaxycd.com
$.proc shell t thc hien lenh ma khong tao shell con, bien VAR
co trong moi trng cua no.
50
Copyright(c) by Galaxy CD http://www.galaxycd.com
Noi dung: cac phep th, so sanh, cac phep tnh so hoc trong Shell, lap trnh cac cau
truc co ieu kien, lap trnh cac vong lap.
$cat file
I am a file
$echo $?
0
Chu thch: lenh exit[n] cho phep ra khoi mot shell_script vi gia tr tra lai la n.
11.1.2 S dung lenh test:
+ Lenh test c dung e lap trnh mot ieu kien trong cau truc hoac trong vong lap:
Co 3 trng hp dung lenh test:
- kiem tra tnh chat cua cac file
- so sanh gia cac so
- kiem tra cac xau ky t
+ Cu phap lenh test:
test expression
hoac
[expression]
Trong cac th du sau ay, hai cach dung tren eu c s dung nh nhau.
51
Copyright(c) by Galaxy CD http://www.galaxycd.com
52
Copyright(c) by Galaxy CD http://www.galaxycd.com
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
54
Copyright(c) by Galaxy CD http://www.galaxycd.com
do command1
command2
command3
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------- 1 phil animator 56 May 31 14:14:22 file1
-rw------- 1 phil animator 22 May 31 15:14:22 file2
55
Copyright(c) by Galaxy CD http://www.galaxycd.com
$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
Copyright(c) by Galaxy CD http://www.galaxycd.com
do >file$count
count=expr $count+1
done
$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 appli
$lc
titi save source toto
58
Copyright(c) by Galaxy CD http://www.galaxycd.com
$supprim *
+ test titi = save -o titi = source
+ echo titi
titi
+ rm titi
+ test save = save -o save = source
+ continue
+ test source = save -o source = source
+ continue
+ test toto = save -o toto = source
+ echo toto
toto
+ rm toto
$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
60
Copyright(c) by Galaxy CD http://www.galaxycd.com
Noi dung: Cac tn hieu cua he thong, cach dung tn hieu e ieu khien va ong bo cac
tien trnh.
61
Copyright(c) by Galaxy CD http://www.galaxycd.com
$uncount&
[1] 467
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 -9 %+
[3] + 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