3.5 Chuye
ˆ
’
n hu
’
o
´
’
ng d
¯
a
ˆ
`
u vào/d
¯
a
ˆ
`
u ra, d
¯
u
’
o
`
’
ng o
ˆ
´
ng và d
¯
a
ˆ
`
u lo
˙
c 33
Trong d
¯
ó, N và M - so
ˆ
´
cu
’
a kênh tiêu chua
ˆ
’
n (0, 1, và 2) hoa
˘
˙
c tên ta
ˆ
˙
p tin. Trong mo
ˆ
˙
t vài
tru
’
o
`
’
ng ho
˙
’
p có su
’
’
du
˙
ng các ký hie
ˆ
˙
u <, > và >> mà không chı
’
ra so
ˆ
´
kênh hay tên ta
ˆ
˙
p tin, vì
vào cho
ˆ
˜
còn thie
ˆ
´
u se
˜
d
¯
a
˘
˙
t, theo ma
˘
˙
c d
¯
i
˙
nh, 1 ne
ˆ
´
u dùng >, tu
´
’
c là d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n, hoa
˘
˙
c 0 ne
ˆ
´
u
dùng <, tu
´
’
c là d
¯
a
ˆ
`
u vào tiêu chua
ˆ
’
n. Nhu
’
the
ˆ
´
, khi không có so
ˆ
´
nào chı
’
ra, > se
˜
d
¯
u
’
o
˙
’
c biên di
˙
ch
là 1 >, còn < se
˜
d
¯
u
’
o
˙
’
c biên di
˙
ch là 0 <. Ngoài vie
ˆ
˙
c chuye
ˆ
’
n hu
’
o
´
’
ng các kênh tiêu chua
ˆ
’
n d
¯
o
’
n
gia
’
n nhu
’
va
ˆ
˙
y, còn có kha
’
na
˘
ng không nhu
˜
’
ng chuye
ˆ
’
n hu
’
o
´
’
ng du
˜
’
lie
ˆ
˙
u vào kênh này hay kênh
khác, mà còn sao chép no
ˆ
˙
i dung cu
’
a các kênh tiêu chua
ˆ
’
n d
¯
ó. Ký hie
ˆ
˙
u & dùng d
¯
e
ˆ
’
thu
˙
’
c hie
ˆ
˙
n
d
¯
ie
ˆ
`
u này, khi d
¯
a
˘
˙
t nó (&) tru
’
o
´
’
c so
ˆ
´
cu
’
a kênh se
˜
chuye
ˆ
’
n du
˜
’
lie
ˆ
˙
u d
¯
e
ˆ
´
n:
command N > &M
Le
ˆ
˙
nh này có nghı
˜
a là, d
¯
a
ˆ
`
u ra cu
’
a kênh vo
´
’
i so
ˆ
´
N d
¯
u
’
o
˙
’
c gu
’
’
i d
¯
e
ˆ
´
n ca
’
d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n, và sao
chép to
´
’
i kênh có so
ˆ
´
M. Ví du
˙
, d
¯
e
ˆ
’
sao chép thông báo lo
ˆ
˜
i vào d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n, ca
ˆ
`
n dùng le
ˆ
˙
nh
2>&1, còn 1>&2 sao chép stdout vào stderr. Kha
’
na
˘
ng này d
¯
a
˘
˙
c bie
ˆ
˙
t có ích khi muo
ˆ
´
n ghi d
¯
a
ˆ
`
u
ra vào ta
ˆ
˙
p tin, vì khi d
¯
ó chúng ta vu
`
’
a có the
ˆ
’
nhìn tha
ˆ
´
y thông báo trên màn hình, vu
`
’
a ghi chúng
vào ta
ˆ
˙
p tin. Ví du
˙
, tru
’
o
`
’
ng ho
˙
’
p sau thu
’
o
`
’
ng d
¯
u
’
o
˙
’
c u
´
’
ng du
˙
ng trong các script cha
˙
y khi kho
’
’
i d
¯
o
ˆ
˙
ng
Linux:
kênh giao tác
teppi82@teppi:~$ cat hiho > /dev/null
cat: hiho: No such file or directory
teppi82@teppi:~$ cat hiho > /dev/null 2>&1
3.5.2 Su
’
’
du
˙
ng |
Mo
ˆ
˙
t tru
’
o
`
’
ng ho
˙
’
p d
¯
a
˘
˙
c bie
ˆ
˙
t cu
’
a chuye
ˆ
’
n hu
’
o
´
’
ng d
¯
a
ˆ
`
u ra là su
˙
’
to
ˆ
’
chu
´
’
c các d
¯
u
’
o
`
’
ng o
ˆ
´
ng (ha y còn có
the
ˆ
’
go
˙
i là kênh giu
˜
’
a các chu
’
o
’
ng trình, hoa
˘
˙
c ba
˘
ng chuye
ˆ
`
n). Hai hay vài câu le
ˆ
˙
nh, mà d
¯
a
ˆ
`
u ra
cu
’
a le
ˆ
˙
nh tru
’
o
´
’
c dùng làm d
¯
a
ˆ
`
u vào cho le
ˆ
˙
nh sau, liên ke
ˆ
´
t vo
´
’
i nhau (có the
ˆ
’
nói phân cách nhau,
ne
ˆ
´
u muo
ˆ
´
n) bo
’
’
i ký hie
ˆ
˙
u ga
˙
ch tha
˘
’
ng d
¯
u
´
’
ng - "|". Khi này d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n cu
’
a le
ˆ
˙
nh d
¯
u
´
’
ng bên
trái so vo
´
’
i | du
’
o
˙
’
c chuye
ˆ
’
n d
¯
e
ˆ
´
n d
¯
a
ˆ
`
u vào tiêu chua
ˆ
’
n cu
’
a chu
’
o
’
ng trình, du
´
’
ng bên pha
’
i so vo
´
’
i |.
Ví du
˙
:
kênh giao tác
maikhai@fpt:/sw$ cat ls.txt | grep knoppix | wc -l
Dòng này có nghı
˜
a là ke
ˆ
´
t qua
’
cu
’
a le
ˆ
˙
nh cat, tu
´
’
c là no
ˆ
˙
i dung ta
ˆ
˙
p tin ls.txt, se
˜
d
¯
u
’
o
˙
’
c chuye
ˆ
’
n
d
¯
e
ˆ
´
n d
¯
a
ˆ
`
u vào cu
’
a le
ˆ
˙
nh grep, le
ˆ
˙
nh này se
˜
phân chia no
ˆ
˙
i dung nói trên và chı
’
la
ˆ
´
y ra nhu
˜
’
ng
dòng nào có chu
´
’
a tu
`
’
knoppix. D
¯
e
ˆ
´
n lu
’
o
˙
’
t mình, ke
ˆ
´
t qu
’
a cu
’
a le
ˆ
˙
nh grep d
¯
u
’
o
˙
’
c chuye
ˆ
’
n to
´
’
i d
¯
a
ˆ
`
u
vào cu
’
a le
ˆ
˙
nh wc -l, mà tính so
ˆ
´
nhu
˜
’
ng dòng thu d
¯
u
’
o
˙
’
c. D
¯
u
’
o
`
’
ng o
ˆ
´
ng su
’
’
du
˙
ng d
¯
e
ˆ
’
ke
ˆ
´
t ho
˙
’
p vài
chu
’
o
’
ng trình nho
’
la
˙
i vo
´
’
i nhau (mo
ˆ
˜
i chu
’
o
’
ng trình thu
˙
’
c hie
ˆ
˙
n mo
ˆ
˙
t bie
ˆ
´
n d
¯
o
ˆ
’
i xác d
¯
i
˙
nh nào d
¯
ó trên
d
¯
a
ˆ
`
u vào) ta
˙
o thành mo
ˆ
˙
t le
ˆ
˙
nh to
ˆ
’
ng quát, mà ke
ˆ
´
t qua
’
cu
’
a nó se
˜
là mo
ˆ
˙
t bie
ˆ
´
n d
¯
o
ˆ
’
i phu
´
’
c ta
˙
p. Ca
ˆ
`
n
chú ý ra
˘
`
ng, he
ˆ
˙
vo
’
go
˙
i và thu
˙
’
c hie
ˆ
˙
n ta
ˆ
´
t ca
’
các câu le
ˆ
˙
nh có trong d
¯
u
’
o
`
’
ng o
ˆ
´
ng cùng mo
ˆ
˙
t lúc, cha
˙
y
mo
ˆ
˜
i le
ˆ
˙
nh d
¯
ó trong mo
ˆ
˙
t ba
’
n sao he
ˆ
˙
vo
’
riêng. Vì the
ˆ
´
ngay khi chu
’
o
’
ng trình thu
´
’
nha
ˆ
´
t ba
˘
´
t d
¯
a
ˆ
`
u d
¯
u
’
a
ke
ˆ
´
t qua
’
o
’
’
d
¯
a
ˆ
`
u ra, chu
’
o
’
ng trình tie
ˆ
´
p theo ba
˘
´
t d
¯
a
ˆ
`
u xu
’
’
lý ke
ˆ
´
t qua
’
này. Cu
˜
ng y nhu
’
va
ˆ
˙
y, các le
ˆ
˙
nh
tie
ˆ
´
p theo thu
˙
’
c hie
ˆ
˙
n các công vie
ˆ
˙
c cu
’
a mình: cho
`
’
du
˜
’
lie
ˆ
˙
u tu
`
’
le
ˆ
˙
nh tru
’
o
´
’
c và d
¯
u
’
a ke
ˆ
´
t qua
’
cho le
ˆ
˙
nh
tie
ˆ
´
p theo, gio
ˆ
´
ng nhu
’
mo
ˆ
˙
t dây chuye
ˆ
`
n sa
’
n xua
ˆ
´
t. Ne
ˆ
´
u nhu
’
muo
ˆ
´
n mo
ˆ
˙
t le
ˆ
˙
nh nào d
¯
ó ke
ˆ
´
t thúc hoàn
toàn, tru
’
o
´
’
c khi thu
˙
’
c hie
ˆ
˙
n le
ˆ
˙
nh tie
ˆ
´
p theo, ba
˙
n có the
ˆ
’
su
’
e
’
du
˙
ng trên mo
ˆ
˙
t dòng ca
’
ký hie
ˆ
˙
u dây
chuye
ˆ
`
n |, cu
˜
ng nhu
’
da
ˆ
´
u cha
ˆ
´
p pha
ˆ
’
y ;. Tru
’
o
´
’
c mo
ˆ
˜
i da
ˆ
´
u cha
ˆ
´
m pha
ˆ
’
y, he
ˆ
˙
vo
’
se
˜
du
`
’
ng la
˙
i và cho
`
’
cho d
¯
e
ˆ
´
n khi thu
˙
’
c hie
ˆ
˙
n xong ta
ˆ
´
t ca
’
các câu le
ˆ
˙
nh tru
’
o
´
’
c cu
’
a d
¯
u
’
o
`
’
ng o
ˆ
´
ng. Tra
˙
ng thái thoát ra (giá
34 Bash
tri
˙
lôgíc, mà d
¯
u
’
o
˙
’
c tra
’
la
˙
i sau khi thu
˙
’
c hie
ˆ
˙
n xong chu
’
o
’
ng trình) cu
’
a mo
ˆ
˙
t d
¯
u
’
o
`
’
ng o
ˆ
´
ng se
˜
trùng
vo
´
’
i tra
˙
ng thái thoát ra cu
’
a câu le
ˆ
˙
nh sau cùng trong d
¯
u
’
o
`
’
ng o
ˆ
´
ng. O
’
’
tru
’
o
´
’
c câu le
ˆ
˙
nh d
¯
a
ˆ
`
u tiên cu
’
a
d
¯
u
’
o
`
’
ng o
ˆ
´
ng có the
ˆ
’
d
¯
a
˘
˙
t ký hie
ˆ
˙
u "!", khi d
¯
ó tra
˙
ng thái thoát ra cu
’
a d
¯
u
’
o
`
’
ng o
ˆ
´
ng se
˜
là phu
’
d
¯
i
˙
nh
lôgíc cu
’
a tra
˙
ng thát thoát ra cu
’
a le
ˆ
˙
nh cuo
ˆ
´
i cùng trong d
¯
u
’
o
`
’
ng o
ˆ
´
ng. Tu
´
’
c là ne
ˆ
´
u tra
˙
ng thái thoát
ra cu
’
a le
ˆ
˙
nh cuo
ˆ
´
i cùng ba
˘
`
ng 0 thì tra
˙
ng thái thoát ra cu
’
a d
¯
u
’
o
`
’
ng o
ˆ
´
ng se
˜
ba
˘
`
ng 1 và ngu
’
o
˙
’
c la
˙
i. He
ˆ
˙
vo
’
cho
`
’
cho ta
ˆ
´
t ca
’
các câu le
ˆ
˙
nh ke
ˆ
´
t thúc ro
ˆ
`
i mo
´
’
i xác d
¯
i
˙
nh và d
¯
u
’
a ra giá tri
˙
này.
3.5.3 D
¯
a
ˆ
`
u lo
˙
c
Ví du
˙
cuo
ˆ
´
i cùng o
’
’
trên (ví du
˙
vo
´
’
i câu le
ˆ
˙
nh grep) có the
ˆ
’
dùng d
¯
e
ˆ
’
minh ho
˙
a cho mo
ˆ
˙
t khái nie
ˆ
˙
m
qua tro
˙
ng khác, d
¯
ó là, d
¯
a
ˆ
`
u lo
˙
c chu
’
o
’
ng trình. D
¯
a
ˆ
`
u lo
˙
c - d
¯
ó là le
ˆ
˙
nh (hay chu
’
o
’
ng trình), mà tie
ˆ
´
p
nha
ˆ
˙
n du
˜
’
lie
ˆ
˙
u vào, thu
˙
’
c hie
ˆ
˙
n mo
ˆ
˙
t vài bie
ˆ
´
n d
¯
o
ˆ
’
i trên du
˜
’
lie
ˆ
˙
u này và d
¯
u
’
a ra ke
ˆ
´
t qua
’
o
’
’
d
¯
a
ˆ
`
u ra tiêu
chua
ˆ
’
n (tu
`
’
d
¯
ây còn có the
ˆ
’
chuye
ˆ
’
n d
¯
e
ˆ
´
n no
’
i nào d
¯
ó theo ý muo
ˆ
´
n cu
’
a ngu
’
o
`
’
i dùng). Các câu le
ˆ
˙
nh
- d
¯
a
ˆ
`
u lo
˙
c bao go
ˆ
`
m các le
ˆ
˙
nh d
¯
ã nói d
¯
e
ˆ
´
n o
’
’
trên cat, more, less, wc, cmp, diff,
và ca
’
nhu
˜
’
ng câu le
ˆ
˙
nh có trong ba
’
ng
3.1
Ba
’
ng 3.1: Các câu le
ˆ
˙
nh d
¯
a
ˆ
`
u lo
˙
c
Le
ˆ
˙
nh Mô ta
’
nga
˘
´
n go
˙
n
grep, fgrep, egrep Tìm trong ta
ˆ
˙
p tin hay du
˜
’
lie
ˆ
˙
u d
¯
a
ˆ
`
u vào các dòng có chu
´
’
a ma
ˆ
˜
u va
˘
n ba
’
n
d
¯
u
’
o
˙
’
c chı
’
ra và d
¯
u
’
a các dòng này to
´
’
i d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n
tr Trong du
˜
’
lie
ˆ
˙
u d
¯
a
ˆ
`
u vào thay the
ˆ
´
các ký tu
˙
’
o
’
’
ô thu
´
’
nha
ˆ
´
t bo
’
’
i các ký tu
˙
’
tu
’
o
’
ng
u
´
’
ng o
’
’
ô thu
´
’
hai. Hãy thu
’
’
gõ le
ˆ
˙
nh tr abc ABC ro
ˆ
`
i gõ vài dòng chu
´
’
a
các ký tu
˙
’
abc!
comm So sánh hai ta
ˆ
˙
p tin theo tu
`
’
ng dòng mo
ˆ
˙
t và d
¯
u
’
a vào d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n 3
co
ˆ
˙
t : mo
ˆ
˙
t - nhu
˜
’
ng dòng chı
’
ga
˘
˙
p o
’
’
ta
ˆ
˙
p tin thu
´
’
nha
ˆ
´
t, hai - nhu
˜
’
ng dòng chı
’
ga
˘
˙
p o
’
’
ta
ˆ
˙
p tin thu
´
’
hai, và ba - nhu
˜
’
ng dòng có trong ca
’
hai ta
ˆ
˙
p tin.
pr D
¯
i
˙
nh da
˙
ng ta
ˆ
˙
p tin hay no
ˆ
˙
i dung cu
’
a d
¯
a
ˆ
`
u tiêu chua
ˆ
’
n d
¯
e
ˆ
’
in a
ˆ
´
n.
sed Trình soa
˙
n tha
’
o ta
ˆ
˙
p tin theo dòng, su
’
’
du
˙
ng d
¯
e
ˆ
’
thu
˙
’
c hie
ˆ
˙
n mo
ˆ
˙
t vài bie
ˆ
´
n d
¯
o
ˆ
’
i
trên du
˜
’
lie
ˆ
˙
u d
¯
a
ˆ
`
u vào (la
ˆ
´
y tu
`
’
ta
ˆ
˙
p tin hay d
¯
a
ˆ
`
u vào tiêu chua
ˆ
’
n)
Mo
ˆ
˙
t d
¯
a
ˆ
`
u lo
˙
c d
¯
a
˘
˙
c bie
ˆ
˙
t, câu le
ˆ
˙
nh tee, nhân d
¯
ôi du
˜
’
lie
ˆ
˙
u d
¯
a
ˆ
`
u vào, mo
ˆ
˙
t ma
˘
˙
t gu
’
’
i du
˜
’
lie
ˆ
˙
u này
d
¯
e
ˆ
´
n d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n, ma
˘
˙
t khác ghi nó (du
˜
’
lie
ˆ
˙
u) vào ta
ˆ
˙
p tin (ngu
’
o
`
’
i dùng ca
ˆ
`
n d
¯
a
˘
˙
t tên). De
ˆ
˜
tha
ˆ
´
y
ra
˘
`
ng theo chu
´
’
c na
˘
ng cu
’
a mình le
ˆ
˙
nh tee tu
’
o
’
ng tu
˙
’
nhu
’
nhóm ký tu
˙
’
chuye
ˆ
’
n hu
’
o
´
’
ng 1>&file.
Kha
’
na
˘
ng cu
’
a d
¯
a
ˆ
`
u lo
˙
c có the
ˆ
’
mo
’
’
ro
ˆ
˙
ng vo
´
’
i vie
ˆ
˙
c su
’
’
du
˙
ng các bie
ˆ
’
u thu
´
’
c chính quy (d
¯
ie
ˆ
`
u khie
ˆ
’
n),
cho phép, ví du
˙
, to
ˆ
’
chu
´
’
c tìm kie
ˆ
´
m theo các ma
ˆ
˜
u tìm kie
ˆ
´
m tu
`
’
d
¯
o
’
n gia
’
n d
¯
e
ˆ
´
n phu
´
’
c ta
˙
p và ra
ˆ
´
t
phu
´
’
c ta
˙
p. Ne
ˆ
´
u muo
ˆ
´
n, chúng ta có the
ˆ
’
nói ra
ˆ
´
t nhie
ˆ
`
u ve
ˆ
`
chuye
ˆ
’
n hu
’
o
´
’
ng và d
¯
a
ˆ
`
u lo
˙
c. Nhu
’
ng no
ˆ
˙
i
dung này có trong pha
ˆ
`
n lo
´
’
n các cuo
ˆ
´
n sách ve
ˆ
`
UNIX và Linux (xem pha
ˆ
`
n lo
`
’
i ke
ˆ
´
t). Vì va
ˆ
˙
y,
chúng ta se
˜
du
`
’
ng o
’
’
d
¯
ây và chuye
ˆ
’
n sang mo
ˆ
˙
t pha
ˆ
`
n khác, d
¯
u
’
o
˙
’
c go
˙
i là "môi tru
’
o
`
’
ng và các bie
ˆ
´
n
môi tru
’
o
`
’
ng" ta
˙
o bo
’
’
i he
ˆ
˙
vo
’
.
3.6 Tham bie
ˆ
´
n và các bie
ˆ
´
n so
ˆ
´
. Môi tru
’
o
`
’
ng cu
’
a he
ˆ
˙
vo
’
Khái nie
ˆ
˙
m tham bie
ˆ
´
n trong he
ˆ
˙
vo
’
bash tu
’
o
’
ng u
´
’
ng vo
´
’
i khái nie
ˆ
˙
m bie
ˆ
´
n so
ˆ
´
trong các ngôn ngu
˜
’
la
ˆ
˙
p trình thông thu
’
o
`
’
ng. Tên go
˙
i (hay ID) cu
’
a tham bie
ˆ
´
n có the
ˆ
’
là mo
ˆ
˙
t tu
`
’
bao go
ˆ
`
m các ký tu
˙
’
ba
’
ng chu
˜
’
cái, chu
˜
’
so
ˆ
´
, da
ˆ
´
u ga
˙
ch du
’
o
´
’
i (chı
’
ký tu
˙
’
d
¯
a
ˆ
`
u tiên cu
’
a tu
`
’
này không d
¯
u
’
o
˙
’
c là chu
˜
’
so
ˆ
´
), và
ca
’
nhu
˜
’
ng ký tu
˙
’
sau: , , #, , - (ga
˙
ch ngang), $,, 0, _ (ga
˙
ch du
’
o
´
’
i). Chúng ta nói ra
˘
`
ng, tham bie
ˆ
´
n
3.6 Tham bie
ˆ
´
n và các bie
ˆ
´
n so
ˆ
´
. Môi tru
’
o
`
’
ng cu
’
a he
ˆ
˙
vo
’
35
d
¯
u
’
o
˙
’
c xác d
¯
i
˙
nh hay d
¯
u
’
o
˙
’
c d
¯
a
˘
˙
t ra, ne
ˆ
´
u ngu
’
o
`
’
i dùng ga
˘
´
n cho nó mo
ˆ
˙
t giá tri
˙
. Giá tri
˙
có the
ˆ
’
là mo
ˆ
˙
t
dòng tro
ˆ
´
ng ro
ˆ
˜
ng. D
¯
e
ˆ
’
nhìn tha
ˆ
´
y giá tri
˙
cu
’
a tham bie
ˆ
´
n, ngu
’
o
`
’
i ta su
’
’
du
˙
ng ký tu
˙
’
$ o
’
’
tru
’
o
´
’
c tên cu
’
a
nó. Nhu
’
va
ˆ
˙
y, le
ˆ
˙
nh:
kênh giao tác
maikhai@fpt:/sm$ echo parameter
hie
ˆ
’
n thi
˙
tu
`
’
parameter, còn le
ˆ
˙
nh
kênh giao tác
maikhai@fpt:/sm$ echo $parameter
hie
ˆ
’
n thi
˙
giá tri
˙
cu
’
a tham bie
ˆ
´
n parameter (ta
ˆ
´
t nhiên ne
ˆ
´
u nhu
’
tham bie
ˆ
´
n d
¯
ó du
’
o
˙
’
c xác d
¯
i
˙
nh).
3.6.1 Các da
˙
ng tham bie
ˆ
´
n khác nhau
Tham bie
ˆ
´
n chia thành ba da
˙
ng: tham bie
ˆ
´
n vi
˙
trí, tham bie
ˆ
´
n d
¯
a
˘
˙
c bie
ˆ
˙
t (các ký tu
˙
’
d
¯
a
˘
˙
c bie
ˆ
˙
t d
¯
ã nói
o
’
’
trên chính là tên cu
’
a nhu
˜
’
ng tham bie
ˆ
´
n này) và các bie
ˆ
´
n so
ˆ
´
cu
’
a he
ˆ
˙
vo
’
. Tên (ID) cu
’
a tham
bie
ˆ
´
n vi
˙
trí go
ˆ
`
m mo
ˆ
˙
t hay vài chu
˜
’
so
ˆ
´
(nhu
’
ng không có tham bie
ˆ
´
n vi
˙
trí 0). Giá tri
˙
cu
’
a tham bie
ˆ
´
n
vi
˙
trí là các tham so
ˆ
´
cho le
ˆ
˙
nh, d
¯
u
’
o
˙
’
c d
¯
u
’
a ra khi cha
˙
y he
ˆ
˙
vo
’
(tham so
ˆ
´
d
¯
a
ˆ
`
u tiên là giá tri
˙
cu
’
a tham
bie
ˆ
´
n 1, tham so
ˆ
´
thu
´
’
hai - tham bie
ˆ
´
n 2, v.v. . .). Có the
ˆ
’
dùng câu le
ˆ
˙
nh set d
¯
e
ˆ
’
thay d
¯
o
ˆ
’
i giá tri
˙
cu
’
a tham bie
ˆ
´
n vi
˙
trí. Giá tri
˙
cu
’
a các tham bie
ˆ
´
n này cu
˜
ng thay d
¯
o
ˆ
’
i trong khi he
ˆ
˙
vo
’
thu
˙
’
c hie
ˆ
˙
n
mo
ˆ
˙
t trong các hàm so
ˆ
´
(chúng ta se
˜
xem xét va
ˆ
´
n d
¯
e
ˆ
`
này o
’
’
du
’
o
´
’
i). Các tham bie
ˆ
´
n d
¯
a
˘
˙
c bie
ˆ
˙
t không
gì khác ho
’
n là các ma
ˆ
˜
u, mà su
˙
’
thay the
ˆ
´
(phép the
ˆ
´
, phép hoán d
¯
o
ˆ
’
i) chúng d
¯
u
’
o
˙
’
c thu
˙
’
c hie
ˆ
˙
n nhu
’
trong ba
’
ng
3.2:
Các tham bie
ˆ
´
n d
¯
a
˘
˙
c bie
ˆ
˙
t, d
¯
u
’
o
˙
’
c lie
ˆ
˙
t kê o
’
’
ba
’
ng trên, có mo
ˆ
˙
t d
¯
ie
ˆ
’
m khác bie
ˆ
˙
t d
¯
ó là chı
’
có the
ˆ
’
"nha
˘
´
c" d
¯
e
ˆ
´
n chúng, không the
ˆ
’
gán các giá tri
˙
cho các tham bie
ˆ
´
n này. Bie
ˆ
´
n môi tru
’
o
`
’
ng, nhìn
tu
`
’
phía he
ˆ
˙
vo
’
, d
¯
ó là các tham bie
ˆ
´
n d
¯
u
’
o
˙
’
c d
¯
a
˘
˙
t tên. Giá tri
˙
cu
’
a bie
ˆ
´
n môi tru
’
o
`
’
ng d
¯
u
’
o
˙
’
c gán nho
`
’
thao tác có da
˙
ng sau:
kênh giao tác
[user]$ name=value
Trong d
¯
ó, name - tên cu
’
a bie
ˆ
´
n, còn value - giá tri
˙
muo
ˆ
´
n gán cho bie
ˆ
´
n (có the
ˆ
’
là mo
ˆ
˙
t
dòng tro
ˆ
´
ng). Tên cu
’
a bie
ˆ
´
n môi tru
’
o
`
’
ng chı
’
có the
ˆ
’
bao go
ˆ
`
m các chu
˜
’
so
ˆ
´
, chu
˜
’
cái và không d
¯
u
’
o
˙
’
c
ba
˘
´
t d
¯
a
ˆ
`
u bo
’
’
i mo
ˆ
˙
t chu
˜
’
so
ˆ
´
. (Tin ra
˘
`
ng sau khi d
¯
o
˙
c d
¯
oa
˙
n vie
ˆ
´
t ve
ˆ
`
tham bie
ˆ
´
n vi
˙
trí thì các ba
˙
n d
¯
ã hie
ˆ
’
u
ta
˙
i sao mo
ˆ
˙
t bie
ˆ
´
n môi tru
’
o
`
’
ng không the
ˆ
’
ba
˘
´
t d
¯
a
ˆ
`
u bo
’
’
i mo
ˆ
˙
t chu
˜
’
so
ˆ
´
.) Giá tri
˙
có the
ˆ
’
là ba
ˆ
´
t ky
`
mo
ˆ
˙
t
dòng va
˘
n ba
’
n nào. Ne
ˆ
´
u giá tri
˙
có chu
´
’
a nhu
˜
’
ng ký tu
˙
’
d
¯
a
˘
˙
c bie
ˆ
˙
t, thì ca
ˆ
`
n d
¯
a
˘
˙
t nó (giá tri
˙
) vào da
ˆ
´
u
ngoa
˘
˙
c. Giá tri
˙
ta
ˆ
´
t nhiên se
˜
không chu
´
’
a các da
ˆ
´
u ngoa
˘
˙
c này. Ne
ˆ
´
u mo
ˆ
˙
t bie
ˆ
´
n môi tru
’
òng d
¯
u
’
o
˙
’
c xác
d
¯
i
˙
nh, thì cu
˜
ng có the
ˆ
’
bi
˙
xóa bo
’
ba
˘
`
ng le
ˆ
˙
nh no
ˆ
˙
i trú unset. Ta
ˆ
˙
p ho
˙
’
p ta
ˆ
´
t ca
’
các bie
ˆ
´
n này cùngvo
´
’
i
các giá tri
˙
d
¯
ã gán cho chúng go
˙
i là môi tru
’
o
`
’
ng (enviroment) cu
’
a he
ˆ
˙
vo
’
. Có the
ˆ
’
xem nó (môi
tru
’
o
`
’
ng) nho
`
’
le
ˆ
˙
nh set khi không có tham so
ˆ
´
(có the
ˆ
’
ca
ˆ
`
n dùng d
¯
u
’
o
`
’
ng o
ˆ
´
ng ’set | less",
ne
ˆ
´
u môi tru
’
o
`
’
ng lo
´
’
n, có nhie
ˆ
`
u bie
ˆ
´
n). D
¯
e
ˆ
’
xem giá tri
˙
cu
’
a mo
ˆ
˙
t bie
ˆ
´
n môi tru
’
o
`
’
ng cu
˙
the
ˆ
’
, thay vì
dùng le
ˆ
˙
nh set (khi này ca
ˆ
`
n tìm trong ke
ˆ
´
t qua
’
cu
’
a nó bie
ˆ
´
n muo
ˆ
´
n xem), có the
ˆ
’
su
’
’
du
˙
ng le
ˆ
˙
nh
echo:
kênh giao tác
[user]$ echo $name
36 Bash
Ba
’
ng 3.2: Thay the
ˆ
´
các tham bie
ˆ
´
n d
¯
a
˘
˙
c bie
ˆ
˙
t
Tham bie
ˆ
´
n Quy lua
ˆ
˙
t thay the
ˆ
´
* Thay the
ˆ
´
bo
’
’
i các tham bie
ˆ
´
n vi
˙
trí, ba
˘
´
t d
¯
a
ˆ
`
u tu
`
’
tham bie
ˆ
´
n thu
´
’
nha
ˆ
´
t. Ne
ˆ
´
u su
˙
’
thay the
ˆ
´
thu
˙
’
c hie
ˆ
˙
n trong da
ˆ
´
u ngoa
˘
˙
c kép, thì tham bie
ˆ
´
n này se
˜
d
¯
u
’
o
˙
’
c thay
bo
’
’
i mo
ˆ
˙
t tu
`
’
duy nha
ˆ
´
t, mà ta
˙
o ra tu
`
’
ta
ˆ
´
t ca
’
các tham bie
ˆ
´
n vi
˙
trí, phân cách
nhau bo
’
’
i ký tu
˙
’
d
¯
a
ˆ
`
u tiên cu
’
a bie
ˆ
´
n so
ˆ
´
IFS (se
˜
nói d
¯
e
ˆ
´
n o
’
’
sau). Tu
´
’
c là "$"
tu
’
o
’
ng d
¯
u
’
o
’
ng vo
´
’
i "$1c$2c. . . ", trong d
¯
ó c - ký tu
˙
’
d
¯
a
ˆ
`
u tiên trong giá tri
˙
cu
’
a bie
ˆ
´
n so
ˆ
´
IFS. Ne
ˆ
´
u giá tri
˙
cu
’
a IFS tro
ˆ
´
ng, hoa
˘
˙
c không d
¯
u
’
o
˙
’
c xác d
¯
i
˙
nh
giá tri
˙
, thì tham bie
ˆ
´
n phân cách nhau bo
’
’
i các khoa
’
ng tra
˘
´
ng.
@ Thay the
ˆ
´
bo
’
’
i tham bie
ˆ
´
n vi
˙
trí, ba
˘
´
t d
¯
a
ˆ
`
u tu
`
’
tham bie
ˆ
´
n thu
´
’
nha
ˆ
´
t. Ne
ˆ
´
u thay the
ˆ
´
thu
˙
’
c hie
ˆ
˙
n trong ngoa
˘
˙
c kép, thì mo
ˆ
˜
i tham bie
ˆ
´
n se
˜
d
¯
u
’
o
˙
’
c thay the
ˆ
´
bo
’
’
i mo
ˆ
˙
t
tu
`
’
riêng bie
ˆ
˙
t. Tu
´
’
c là, "$@" tu
’
o
’
ng d
¯
u
’
o
’
ng vo
´
’
i "$1" "$2" . . . Ne
ˆ
´
u không có
tham bie
ˆ
´
n vi
˙
trí, thì giá tri
˙
se
˜
không d
¯
u
’
o
˙
’
c thie
ˆ
´
t la
ˆ
˙
p (tham bie
ˆ
´
n se
˜
bi
˙
x
# Thay the
ˆ
´
bo
’
’
i giá tri
˙
tha
ˆ
˙
p phân cu
’
a các tham bie
ˆ
´
n vi
˙
trí.
? Thay the
ˆ
´
bo
’
’
i tra
˙
ng thái thoát ra cu
’
a câu le
ˆ
˙
nh cuo
ˆ
´
i cùng trong d
¯
u
’
o
`
’
ng o
ˆ
´
ng,
mà d
¯
u
’
o
˙
’
c thu
˙
’
c hie
ˆ
˙
n trong che
ˆ
´
d
¯
o
ˆ
˙
ne
ˆ
`
n tru
’
o
´
’
c.
- (ga
˙
ch ngang) Thay the
ˆ
´
bo
’
’
i giá tri
˙
các co
`
’
, flag, d
¯
u
’
o
˙
’
c d
¯
a
˘
˙
t bo
’
’
i le
ˆ
˙
nh no
ˆ
˙
i trú set hay trong
khi cha
˙
y he
ˆ
˙
vo
’
.
$ Thay the
ˆ
´
bo
’
’
i so
ˆ
´
cu
’
a tie
ˆ
´
n trình (PID - process identificator)
Thay the
ˆ
´
bo
’
’
i so
ˆ
´
cu
’
a tie
ˆ
´
n trình (PID) cuo
ˆ
´
i cùng trong so
ˆ
´
các câu le
ˆ
˙
nh thu
˙
’
c
hie
ˆ
˙
n trong ne
ˆ
`
n sau.
0 Thay the
ˆ
´
bo
’
’
i tên he
ˆ
˙
vo
’
hay tên cu
’
a script d
¯
ang cha
˙
y. Ne
ˆ
´
u bash cha
˙
y
mo
ˆ
˙
t ta
ˆ
˙
p tin le
ˆ
˙
nh nào d
¯
ó, thì $0 có giá tri
˙
ba
˘
`
ng tên cu
’
a ta
ˆ
˙
p tin này. Trong
tru
’
o
`
’
ng ho
˙
’
p ngu
’
o
˙
’
c la
˙
i giá tri
˙
này ba
˘
`
ng d
¯
u
’
o
`
’
ng da
ˆ
˜
n d
¯
a
ˆ
`
u d
¯
u
’
d
¯
e
ˆ
´
n he
ˆ
˙
vo
’
(ví
du
˙
, /bin/bash
_ (ga
˙
ch du
’
o
´
’
i) Thay the
ˆ
´
bo
’
’
i tham so
ˆ
´
cuo
ˆ
´
i cùng cu
’
a câu le
ˆ
˙
nh tru
’
o
´
’
c trong so
ˆ
´
các câu le
ˆ
˙
nh
d
¯
ã d
¯
u
’
o
˙
’
c thu
˙
’
c hie
ˆ
˙
n (ne
ˆ
´
u d
¯
ó la
˙
i là mo
ˆ
˙
t tham bie
ˆ
´
n hay bie
ˆ
´
n so
ˆ
´
, thì se
˜
su
’
’
du
˙
ng giá tri
˙
cu
’
a n
Trong d
¯
ó, ca
ˆ
`
n thay name bo
’
’
i tên bie
ˆ
´
n (nhu
’
va
ˆ
˙
y, trong tru
’
o
`
’
ng ho
˙
’
p này, ba
˙
n la
˙
i ca
ˆ
`
n pha
’
i
bie
ˆ
´
t tên cu
’
a bie
ˆ
´
n muo
ˆ
´
n xem). Trong so
ˆ
´
các bie
ˆ
´
n, mà ba
˙
n se
˜
tha
ˆ
´
y trong ke
ˆ
´
t qua
’
cu
’
a le
ˆ
˙
nh set,
có nhu
˜
’
ng bie
ˆ
´
n ra
ˆ
´
t thú vi
˙
. Xin hãy chú ý d
¯
e
ˆ
´
n, ví du
˙
, bie
ˆ
´
n RANDOM. Ne
ˆ
´
u thu
’
’
cha
˙
y vài la
ˆ
`
n liên
tie
ˆ
´
p câu le
ˆ
˙
nh sau:
kênh giao tác
maikhai@fpt:/sw$ echo $RANDOM
thì mo
ˆ
˜
i la
ˆ
`
n ba
˙
n se
˜
nha
ˆ
˙
n d
¯
u
’
o
˙
’
c mo
ˆ
˙
t giá tri
˙
mo
´
’
i. Nguyên nhân là vì bie
ˆ
´
n này tra
’
la
˙
i mo
ˆ
˙
t giá
tri
˙
nga
ˆ
˜
u nhiên
4
trong khoa
’
ng 0 - 32 768.
3.6.2 Da
ˆ
´
u nha
˘
´
c cu
’
a he
ˆ
˙
vo
’
Mo
ˆ
˙
t trong các bie
ˆ
´
n ra
ˆ
´
t quan tro
˙
ng có tên PS1. Bie
ˆ
´
n này cho bie
ˆ
´
t da
˙
ng cu
’
a da
ˆ
´
u nha
˘
´
c, mà bash
d
¯
u
’
a ra trong khi cho
`
’
ngu
’
o
`
’
i dùng nha
ˆ
˙
p câu le
ˆ
˙
nh tie
ˆ
´
p theo. Theo ma
˘
˙
c d
¯
i
˙
nh thì bie
ˆ
´
n này d
¯
u
’
o
˙
’
c
gán giá tri
˙
"\s-\v\$ , tuy nhiên trên các ba
’
n phân pho
ˆ
´
i khác nhau thu
’
o
`
’
ng có các script
4
random là tu
`
’
tie
ˆ
´
ng Anh có nghı
˜
a nga
ˆ
˜
u nhiên
3.6 Tham bie
ˆ
´
n và các bie
ˆ
´
n so
ˆ
´
. Môi tru
’
o
`
’
ng cu
’
a he
ˆ
˙
vo
’
37
kho
’
’
i d
¯
o
ˆ
˙
ng (hay script d
¯
a
˘
ng nha
ˆ
˙
p) xác d
¯
i
˙
nh la
˙
i bie
ˆ
´
n này. Nói chung thì trong bash có ta
ˆ
´
t ca
’
bo
ˆ
´
n da
ˆ
´
u nha
˘
´
c, d
¯
u
’
o
˙
’
c su
’
’
du
˙
ng trong các tru
’
o
`
’
ng ho
˙
’
p khác nhau. Bie
ˆ
´
n PS1 d
¯
u
’
a ra da
˙
ng cu
’
a da
ˆ
´
u
nha
˘
´
c khi he
ˆ
˙
vo
’
cho
`
’
nha
ˆ
˙
p le
ˆ
˙
nh. Da
ˆ
´
u nha
˘
´
c thu
´
’
hai, xác d
¯
i
˙
nh bo
’
’
i bie
ˆ
´
n PS2, xua
ˆ
´
t hie
ˆ
˙
n khi he
ˆ
˙
vo
’
cho
`
’
ngu
’
o
`
’
i dùng nha
ˆ
˙
p thêm mo
ˆ
˙
t vài du
˜
’
lie
ˆ
˙
u ca
ˆ
`
n thie
ˆ
´
t nào d
¯
ó d
¯
e
ˆ
’
có the
ˆ
’
tie
ˆ
´
p tu
˙
c cha
˙
y câu le
ˆ
˙
nh
(chu
’
o
’
ng trình) d
¯
ã go
˙
i. Theo ma
˘
˙
c d
¯
i
˙
nh bie
ˆ
´
n PS2 có giá tri
˙
">". Ra
ˆ
´
t có the
ˆ
’
ba
˙
n d
¯
ã nhìn tha
ˆ
´
y
da
ˆ
´
u nha
˘
´
c này, khi cha
˙
y le
ˆ
˙
nh cat d
¯
e
ˆ
’
d
¯
u
’
a du
˜
’
lie
ˆ
˙
u vào tu
`
’
bàn phím vào ta
ˆ
˙
p tin. Mo
ˆ
˙
t ví du
˙
khác
- le
ˆ
˙
nh ftp, sau khi cha
˙
y le
ˆ
˙
nh này da
ˆ
´
u nha
˘
´
c se
˜
có da
˙
ng nhu
’
d
¯
ã nói. Da
ˆ
´
u nha
˘
´
c, xác d
¯
i
˙
nh bo
’
’
i
bie
ˆ
´
n PS3, su
’
’
du
˙
ng trong le
ˆ
˙
nh select. Da
ˆ
´
u nha
˘
´
c, xác d
¯
i
˙
nh bo
’
’
i bie
ˆ
´
n PS4, d
¯
u
’
o
˙
’
c d
¯
u
’
a ra tru
’
o
´
’
c
mo
ˆ
˜
i câu le
ˆ
˙
nh, trong lúc bash theo dõi quá trình thu
˙
’
c hie
ˆ
˙
n. Giá tri
˙
theo ma
˘
˙
c d
¯
i
˙
nh - "+". Ne
ˆ
´
u
có mong muo
ˆ
´
n, ba
˙
n có the
ˆ
’
thay d
¯
o
ˆ
’
i các bie
ˆ
´
n PS1 và PS2. Khi này có the
ˆ
’
su
’
’
du
˙
ng ba
ˆ
´
t ky
`
ký
tu
˙
’
nào nha
ˆ
˙
p tu
`
’
bàn phím, cu
˜
ng nhu
’
mo
ˆ
˙
t vài ký tu
˙
’
chuyên dùng d
¯
e
ˆ
’
xác d
¯
i
˙
nh da
˙
ng da
ˆ
´
u nha
˘
´
c
nhu
’
trong ba
’
ng
3.3 (chı
’
d
¯
u
’
a ra mo
ˆ
˙
t vài trong so
ˆ
´
chúng làm ví du
˙
, danh sách d
¯
a
ˆ
`
y d
¯
u
’
xem trong
trang man cu
’
a bash - gõ le
ˆ
˙
nh "man bash").
Ba
’
ng 3.3: Ký tu
˙
’
xác d
¯
i
˙
nh da
˙
ng da
ˆ
´
u nha
˘
´
c
Cu
˙
m ký tu
˙
’
Giá tri
˙
(ke
ˆ
´
t qua
’
thu d
¯
u
’
o
˙
’
c)
\a Tín hie
ˆ
˙
u âm thanh (mã ASCII 07)
\d Tho
`
’
i gian o
’
’
da
˙
ng "Thu
´
’
, tháng, ngày", ví du
˙
, Sun, Dec, 26.
\h Tên máy (hostname) d
¯
e
ˆ
´
n da
ˆ
´
u cha
ˆ
´
m d
¯
a
ˆ
`
u tiên.
\H Tên máy d
¯
a
ˆ
`
y d
¯
u
’
, ví du
˙
teppi.phanthinh.com
\t Tho
`
’
i gian hie
ˆ
˙
n tho
`
’
i o
’
’
da
˙
ng 24 gio
`
’
: HH:MM:SS (gio
`
’
:phút:giây)
\T Tho
`
’
i gian hie
ˆ
˙
n tho
`
’
i o
’
’
da
˙
ng 12 gio
`
’
: HH:MM:SS
\@ Tho
`
’
i gian hie
ˆ
˙
n tho
`
’
i o
’
’
da
˙
ng 12 gio
`
’
am/pm (sáng/chie
ˆ
`
u)
\u Tên ngu
’
o
`
’
i dùng d
¯
ã cha
˙
y he
ˆ
˙
vo
’
, ví du
˙
teppi
\w Tên d
¯
a
ˆ
`
y d
¯
u
’
cu
’
a thu
’
mu
˙
c làm vie
ˆ
˙
c hie
ˆ
˙
n tho
`
’
i (ba
˘
´
t d
¯
a
ˆ
`
u tu
`
’
go
ˆ
´
c), ví du
˙
/home/teppi82/project/l4u
\W Thu
’
mu
˙
c hie
ˆ
˙
n tho
`
’
i (không có d
¯
u
’
o
`
’
ng da
ˆ
˜
n)
\$ Ký tu
˙
’
#, ne
ˆ
´
u he
ˆ
˙
vo
’
d
¯
u
’
o
˙
’
c cha
˙
y bo
’
’
i ngu
’
o
`
’
i dùng root, và ký tu
˙
’
$, ne
ˆ
´
u he
ˆ
˙
vo
’
d
¯
u
’
o
˙
’
c cha
˙
y bo
’
’
i ngu
’
o
`
’
i dùng thu
’
o
`
’
ng.
\nnn Ký tu
˙
’
có mã he
ˆ
˙
tám nnn
\n Dòng mo
´
’
i (chuye
ˆ
’
n dòng)
\s Tên he
ˆ
˙
vo
’
\# So
ˆ
´
hie
ˆ
˙
n tho
`
’
i cu
’
a câu le
ˆ
˙
nh
\\ Da
ˆ
´
u ga
˙
ch ngu
’
o
˙
’
c (backslash)
\[ Sau ký tu
˙
’
này ta
ˆ
´
t ca
’
các ký tu
˙
’
se
˜
không d
¯
u
’
o
˙
’
c in ra.
\] Ke
ˆ
´
t thúc chuo
ˆ
˜
i các ký tu
˙
’
không d
¯
u
’
o
˙
’
c in ra.
\! So
ˆ
´
thu
´
’
tu
˙
’
cu
’
a le
ˆ
˙
nh hie
ˆ
˙
n tho
`
’
i trong li
˙
ch su
’
’
các câu le
ˆ
˙
nh d
¯
ã dùng.
So
ˆ
´
cu
’
a le
ˆ
˙
nh (so
ˆ
´
thu
´
’
tu
˙
’
cu
’
a le
ˆ
˙
nh d
¯
ang thu
˙
’
c hie
ˆ
˙
n trong buo
ˆ
’
i làm vie
ˆ
˙
c hie
ˆ
˙
n tho
`
’
i) có the
ˆ
’
khác
vo
´
’
i so
ˆ
´
cu
’
a chính nó trong danh sách "li
˙
ch su
’
’
các câu le
ˆ
˙
nh", bo
’
’
i vì danh sách còn chu
´
’
a ca
’
nhu
˜
’
ng câu le
ˆ
˙
nh d
¯
ã d
¯
u
’
o
˙
’
c ghi la
˙
i trong ta
ˆ
˙
p tin li
˙
ch su
’
’
. Sau khi giá tri
˙
cu
’
a bie
ˆ
´
n d
¯
u
’
o
˙
’
c he
ˆ
˙
vo
’
d
¯
o
˙
c
xong, se
˜
xa
’
y ra su
˙
’
thay the
ˆ
´
theo các quy lua
ˆ
˙
t mo
’
’
ro
ˆ
˙
ng trong ba
’
ng trên, d
¯
o
ˆ
`
ng tho
`
’
i còn xa
’
y ra
su
˙
’
thay the
ˆ
´
trong tên các câu le
ˆ
˙
nh, trong các bie
ˆ
’
u thu
´
’
c so
ˆ
´
ho
˙
c, và su
˙
’
chia tu
`
’
(word splitting).
Chúng ta se
˜
nói d
¯
e
ˆ
´
n nhu
˜
’
ng su
˙
’
thay the
ˆ
´
này o
’
’
du
’
o
´
’
i.Ví du
˙
, sau khi thu
˙
’
c hie
ˆ
˙
n le
ˆ
˙
nh (vì trong dòng
va
˘
n ba
’
n có khoa
’
ng tro
ˆ
´
ng, nên nha
ˆ
´
t thie
ˆ
´
t pha
’
i có da
ˆ
´
u ngoa
˘
˙
c):
kênh giao tác
[user/root]$ PS1="[\u@\h \W]\$"
38 Bash
thì trong da
ˆ
´
u nha
˘
´
c se
˜
có da
ˆ
´
u mo
’
’
ngoa
˘
˙
c vuông, tên ngu
’
o
`
’
i dùng, ký hie
ˆ
˙
u , tên máy, khoa
’
ng
tra
˘
´
ng, tên cu
’
a thu
’
mu
˙
c hie
ˆ
˙
n tho
`
’
i (không có d
¯
u
’
o
`
’
ng da
ˆ
˜
n), da
ˆ
´
u d
¯
óng ngoa
˘
˙
c vuông, và ký hie
ˆ
˙
u
$ (ne
ˆ
´
u trên he
ˆ
˙
vo
’
d
¯
ang làm vie
ˆ
˙
c ngu
’
o
`
’
i dùng bình thu
’
o
`
’
ng) hay #(ne
ˆ
´
u he
ˆ
˙
vo
’
cha
˙
y du
’
o
´
’
i ngu
’
o
`
’
i
dùng root).
3.6.3 Bie
ˆ
´
n môi tru
’
o
`
’
ng PATH
Còn mo
ˆ
˙
t bie
ˆ
´
n cu
˜
ng quan tro
˙
ng nu
˜
’
a có tên PATH. Bie
ˆ
´
n này d
¯
u
’
a ra danh sách d
¯
u
’
o
`
’
ng da
ˆ
˜
n
d
¯
e
ˆ
´
n các thu
’
mu
˙
c, mà bash se
˜
tìm kie
ˆ
´
m ta
ˆ
˙
p tin (tru
’
o
`
’
ng ho
˙
’
p riêng là các ta
ˆ
˙
p tin le
ˆ
˙
nh)
trong tru
’
o
`
’
ng ho
˙
’
p, d
¯
u
’
o
`
’
ng da
ˆ
˜
n d
¯
a
ˆ
`
y d
¯
u
’
d
¯
e
ˆ
´
n ta
ˆ
˙
p tin không d
¯
u
’
o
˙
’
c d
¯
u
’
a ra. Các thu
’
mu
˙
c trong
danh sách này phân cách nhau bo
’
’
i da
ˆ
´
u hai cha
ˆ
´
m (:). Theo ma
˘
˙
c d
¯
i
˙
nh bie
ˆ
´
n PATH chu
´
’
a
các thu
’
mu
˙
c /usr/local/bin, /bin, /usr/bin, /usr/X11R6/bin, tu
´
’
c là có
da
˙
ng: /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin: D
¯
e
ˆ
’
thêm thu
’
mu
˙
c
vào danh sách này, ca
ˆ
`
n thu
˙
’
c hie
ˆ
˙
n câu le
ˆ
˙
nh sau:
kênh giao tác
[user]$ PATH=$PATH:new_path
Khi tìm kie
ˆ
´
m, he
ˆ
˙
vo
’
"lu
˙
c lo
˙
i" các thu
’
mu
˙
c theo d
¯
úng thu
´
’
tu
˙
’
d
¯
ã lie
ˆ
˙
t kê trong bie
ˆ
´
n PATH.
Mo
ˆ
˙
t chú ý nho
’
, có the
ˆ
’
d
¯
u
’
a vào danh sách này thu
’
mu
˙
c hie
ˆ
˙
n tho
`
’
i, khi thêm vào bie
ˆ
´
n PATH
mo
ˆ
˙
t da
ˆ
´
u cha
ˆ
´
m (.). Tuy nhiên, d
¯
ây là d
¯
ie
ˆ
`
u không khuyên làm vo
´
’
i lý do ba
’
o ma
ˆ
˙
t: ngu
’
o
`
’
i có ác
ý có the
ˆ
’
d
¯
a
˘
˙
t vào thu
’
mu
˙
c dùng chung mo
ˆ
˙
t chu
’
o
’
ng trình nào d
¯
ó, có cùng tên vo
´
’
i mo
ˆ
˙
t trong so
ˆ
´
nhu
˜
’
ng câu le
ˆ
˙
nh thu
’
o
`
’
ng dùng bo
’
’
i root, nhu
’
ng thu
˙
’
c hie
ˆ
˙
n nhu
˜
’
ng chu
´
’
c na
˘
ng khác hoàn toàn (d
¯
a
˘
˙
c
bie
ˆ
˙
t nguy hie
ˆ
’
m ne
ˆ
´
u thu
’
mu
˙
c hie
ˆ
˙
n tho
`
’
i d
¯
u
´
’
ng o
’
’
d
¯
a
ˆ
`
u danh sách tìm kie
ˆ
´
m).
3.6.4 Bie
ˆ
´
n môi tru
’
o
`
’
ng IFS
Bie
ˆ
´
n này xác d
¯
i
˙
nh ký tu
˙
’
(cu
˙
m ký tu
˙
’
) phân cách (Internal Field Separator), su
’
’
du
˙
ng trong thao
tác phân chia tu
`
’
ngu
˜
’
khi bie
ˆ
´
n d
¯
o
ˆ
’
i dòng le
ˆ
˙
nh, mà he
ˆ
˙
vo
’
thu
˙
’
c hie
ˆ
˙
n tru
’
o
´
’
c khi cha
˙
y mo
ˆ
˙
t câu le
ˆ
˙
nh nào
d
¯
ó(xemdu
’
o
´
’
i).Giátri
˙
theoma
˘
˙
cd
¯
i
˙
nhcu
’
abie
ˆ
´
nnày-"<Khoa
’
ng_tra
˘
´
ng><Tab><Ký_tu
˙
’
_hàng_mo
´
’
i>".
Ne
ˆ
´
u thu
’
’
gõ le
ˆ
˙
nh "echo $IFS", ba
˙
n se
˜
nha
ˆ
˙
n d
¯
u
’
o
˙
’
c mo
ˆ
˙
t nga
˙
c nhiên nho
’
.
3.6.5 Thu
’
mu
˙
c hie
ˆ
˙
n tho
`
’
i và thu
’
mu
˙
c cá nhân
Tên cu
’
a thu
’
mu
˙
c hie
ˆ
˙
n tho
`
’
i ghi trong bie
ˆ
´
n môi tru
’
o
`
’
ng vo
´
’
i tên PWD, và giá tri
˙
cu
’
a bie
ˆ
´
n này thay
d
¯
o
ˆ
’
i sau mo
ˆ
˜
i la
ˆ
`
n cha
˙
y chu
’
o
’
ng trình cd (cu
˜
ng nhu
’
mo
ˆ
˜
i la
ˆ
`
n thay d
¯
o
ˆ
’
i thu
’
mu
˙
c hie
ˆ
˙
n tho
`
’
i theo ba
ˆ
´
t
ky
`
cách nào, ví du
˙
, qua Midnight Commander). Tu
’
o
’
ng tu
˙
’
nhu
’
va
ˆ
˙
y tên d
¯
a
ˆ
`
y d
¯
u
’
(go
ˆ
`
m ca
’
d
¯
u
’
o
`
’
ng
da
ˆ
˜
n) cu
’
a thu
’
mu
˙
c cá nhân cu
’
a ngu
’
o
`
’
i dùng, cha
˙
y tie
ˆ
´
n trình d
¯
ã cho, ghi trong bie
ˆ
´
n HOME.
3.6.6 Câu le
ˆ
˙
nh export
Khi he
ˆ
˙
vo
’
cha
˙
y mo
ˆ
˙
t chu
’
o
’
ng trình hay câu le
ˆ
˙
nh nào d
¯
ó, nó (he
ˆ
˙
vo
’
) cung ca
ˆ
´
p cho chúng mo
ˆ
˙
t
pha
ˆ
`
n bie
ˆ
´
n môi tru
’
o
`
’
ng. D
¯
e
ˆ
’
có the
ˆ
’
cung ca
ˆ
´
p bie
ˆ
´
n môi tru
’
o
`
’
ng cho tie
ˆ
´
n trình cha
˙
y tu
`
’
he
ˆ
˙
vo
’
, ca
ˆ
`
n
gán giá tri
˙
cho bie
ˆ
´
n này vo
´
’
i le
ˆ
˙
nh export, tu
´
’
c là thay vì
kênh giao tác
[user]$ name=value
ca
ˆ
`
n gõ: