Chu
’
o
’
ng 3
Bash
To
ˆ
´
t go
ˆ
˜
ho
’
n to
ˆ
´
t nu
’
o
´
’
c so
’
n
– ca dao tu
˙
c ngu
˜
’
Vie
ˆ
˙
t Nam
Trong pha
ˆ
`
n này chúng ta se
˜
d
¯
e
ˆ
`
ca
ˆ
˙
p d
¯
e
ˆ
´
n va
ˆ
´
n d
¯
e
ˆ
`
làm vie
ˆ
˙
c vo
´
’
i Linux o
’
’
che
ˆ
´
d
¯
o
ˆ
˙
text, hay còn
d
¯
u
’
o
˙
’
c go
˙
i là console hoa
˘
˙
c terminal. Nhu
˜
’
ng ngu
’
o
`
’
i dùng Linux mo
´
’
i (newbie) thu
’
o
`
’
ng nghı
˜
se
˜
cha
˘
’
ng bao gio
`
’
làm vie
ˆ
˙
c o
’
’
che
ˆ
´
d
¯
o
ˆ
˙
này, vì d
¯
ã có giao die
ˆ
˙
n d
¯
o
ˆ
`
ho
˙
a. Tuy nhiên d
¯
ây là mo
ˆ
˙
t ý kie
ˆ
´
n
sai la
ˆ
`
m, bo
’
’
i vì ra
ˆ
´
t nhie
ˆ
`
u công vie
ˆ
˙
c có the
ˆ
’
thu
˙
’
c hie
ˆ
˙
n nhanh và thua
ˆ
˙
n tie
ˆ
˙
n trong che
ˆ
´
d
¯
o
ˆ
˙
này ho
’
n
là su
’
’
du
˙
ng giao die
ˆ
˙
n d
¯
o
ˆ
`
ho
˙
a. Và dù sao thì che
ˆ
´
d
¯
o
ˆ
˙
text cu
’
a HD
¯
H Linux không pha
’
i là che
ˆ
´
d
¯
o
ˆ
˙
text mo
ˆ
˙
t tie
ˆ
´
n trình cu
’
a MS-DOS. Vì Linux là HD
¯
H d
¯
a tie
ˆ
´
n trình, nên ngay trong che
ˆ
´
d
¯
o
ˆ
˙
text
d
¯
ã có kha
’
na
˘
ng làm vie
ˆ
˙
c trong vài cu
’
’
a so
ˆ
’
. Và d
¯
e
ˆ
’
soa
˙
n tha
’
o mo
ˆ
˙
t ta
ˆ
˙
p tin va
˘
n ba
’
n không nha
ˆ
´
t
thie
ˆ
´
t pha
’
i cha
˙
y các trình soa
˙
n tha
’
o lo
´
’
n và cha
ˆ
˙
m cha
˙
p (d
¯
a
˘
˙
c bie
ˆ
˙
t trên các máy có ca
ˆ
´
u hình pha
ˆ
`
n
cu
´
’
ng tha
ˆ
´
p) cu
’
a môi tru
’
o
`
’
ng d
¯
o
ˆ
`
ho
˙
a.
3.1 He
ˆ
˙
vo
’
là gì?
Chúng ta thu
’
o
`
’
ng nói "ngu
’
o
`
’
i dùng làm vie
ˆ
˙
c vo
´
’
i he
ˆ
˙
d
¯
ie
ˆ
`
u hành". D
¯
ie
ˆ
`
u này không hoàn toàn
d
¯
úng, vì trên thu
˙
’
c te
ˆ
´
"liên he
ˆ
˙
" vo
´
’
i ngu
’
o
`
’
i dùng d
¯
u
’
o
˙
’
c thu
˙
’
c hie
ˆ
˙
n bo
’
’
i mo
ˆ
˙
t chu
’
o
’
ng trình d
¯
a
˘
˙
c bie
ˆ
˙
t.
Có hai da
˙
ng cu
’
a chu
’
o
’
ng trình d
¯
ã d
¯
e
ˆ
`
ca
ˆ
˙
p - he
ˆ
˙
vo
’
, hay shell, d
¯
e
ˆ
’
làm vie
ˆ
˙
c trong che
ˆ
´
d
¯
o
ˆ
˙
text
(giao die
ˆ
˙
n dòng le
ˆ
˙
nh) và giao die
ˆ
˙
n d
¯
o
ˆ
`
ho
˙
a GUI (Graphical User Interface), thu
˙
’
c hie
ˆ
˙
n "liên
he
ˆ
˙
" vo
´
’
i ngu
’
o
`
’
i dùng trong môi tru
’
o
`
’
ng d
¯
o
ˆ
`
ho
˙
a. Ca
ˆ
`
n nói ngay ra
˘
`
ng, ba
ˆ
´
t ky
`
chu
’
o
’
ng trình nào
trong Linux có the
ˆ
’
kho
’
’
i d
¯
o
ˆ
˙
ng tu
`
’
dòng le
ˆ
˙
nh cu
’
a he
ˆ
˙
vo
’
(ne
ˆ
´
u máy chu
’
X d
¯
ã cha
˙
y), cu
˜
ng nhu
’
qua giao die
ˆ
˙
n d
¯
o
ˆ
`
ho
˙
a. Cha
˙
y chu
’
o
’
ng trình tu
`
’
dòng le
ˆ
˙
nh cu
’
a he
ˆ
˙
vo
’
tu
’
o
’
ng d
¯
u
’
o
’
ng vo
´
’
i vie
ˆ
˙
c nháy
(d
¯
úp) chuo
ˆ
˙
t lên bie
ˆ
’
u tu
’
o
˙
’
ng cu
’
a chu
’
o
’
ng trình trong GUI. D
¯
u
’
a các tham so
ˆ
´
cho chu
’
o
’
ng trình
trên dòng le
ˆ
˙
nh tu
’
o
’
ng d
¯
u
’
o
’
ng vo
´
’
i vie
ˆ
˙
c chúng ta kéo và tha
’
cái gì d
¯
ó lên bie
ˆ
’
u tu
’
o
˙
’
ng chu
’
o
’
ng trình
trong môi tru
’
o
`
’
ng d
¯
o
ˆ
`
ho
˙
a. Nhu
’
ng ma
˘
˙
t khác, mo
ˆ
˙
t so
ˆ
´
chu
’
o
’
ng trình không the
ˆ
’
cha
˙
y o
’
’
GUI và chı
’
có the
ˆ
’
thu
˙
’
c hie
ˆ
˙
n tu
`
’
dòng le
ˆ
˙
nh. Nói ngoài le
ˆ
`
mo
ˆ
˙
t chút, tên go
˙
i "he
ˆ
˙
vo
’
" bi
˙
pha
’
n d
¯
o
ˆ
´
i ra
ˆ
´
t nhie
ˆ
`
u.
Theo ý kie
ˆ
´
n cu
’
a mo
ˆ
˙
t so
ˆ
´
chuyên gia ngôn ngu
˜
’
cu
˜
ng nhu
’
chuyên gia Linux thì nên go
˙
i chu
’
o
’
ng
trình này mo
ˆ
˙
t cách d
¯
úng ho
’
n là "trình xu
’
’
lý le
ˆ
˙
nh" hay "trình biên di
˙
ch le
ˆ
˙
nh". Tuy nhiên, tên
go
˙
i "he
ˆ
˙
vo
’
" (shell) d
¯
u
’
o
˙
’
c dùng cho các chu
’
o
’
ng trình dùng d
¯
e
ˆ
’
biên di
˙
ch le
ˆ
˙
nh trong che
ˆ
´
d
¯
o
ˆ
˙
text
trên mo
˙
i he
ˆ
˙
tho
ˆ
´
ng UNIX. Trên các he
ˆ
˙
tho
ˆ
´
ng UNIX d
¯
a
ˆ
`
u tiên có mo
ˆ
˙
t chu
’
o
’
ng trình, go
˙
i là sh,
vie
ˆ
´
t ta
˘
´
t cu
’
a shell. Sau d
¯
ó, vài bie
ˆ
´
n the
ˆ
’
cu
’
a sh d
¯
u
’
o
˙
’
c phát trie
ˆ
’
n và làm to
ˆ
´
t ho
’
n, trong d
¯
ó có
Bourne shell - phiên ba
’
n mo
’
’
ro
ˆ
˙
ng cu
’
a sh, vie
ˆ
´
t bo
’
’
i Steve Bourne. Du
˙
’
án GNU (du
˙
’
án
phát trie
ˆ
’
n chu
’
o
’
ng trình u
´
’
ng du
˙
ng cu
’
a Stollman, xem
sau d
¯
ó cho ra d
¯
o
`
’
i
he
ˆ
˙
vo
’
bash, tên go
˙
i cu
’
a nó d
¯
u
’
o
˙
’
c gia
’
i mã ra là Bourne-again shell, tu
´
’
c là "la
˙
i là he
ˆ
˙
vo
’
28 Bash
cu
’
a Bourne". Trên tie
ˆ
´
ng Anh d
¯
ây là mo
ˆ
˙
t cách cho
’
i chu
˜
’
, vì tu
`
’
Bourne d
¯
o
˙
c gio
ˆ
´
ng vo
´
’
i tu
`
’
borne
(sinh ra, d
¯
e
’
ra), và nhu
’
the
ˆ
´
bash còn có the
ˆ
’
gia
’
i mã là "shell d
¯
u
’
o
˙
’
c sinh ra la
ˆ
`
n hai". Tie
ˆ
´
p theo
chúng ta se
˜
chı
’
xem xét bash, vì the
ˆ
´
o
’
’
du
’
o
´
’
i khi nói d
¯
e
ˆ
´
n he
ˆ
˙
vo
’
, xin nga
ˆ
`
m hie
ˆ
’
u d
¯
ó là bash
Tu
˙
’
mo
ˆ
˙
t mình bash không thu
˙
’
c hie
ˆ
˙
n mo
ˆ
˙
t công vie
ˆ
˙
c u
´
’
ng du
˙
ng nào. Nhu
’
ng nó ho
ˆ
˜
tro
˙
’
vie
ˆ
˙
c thu
˙
’
c
thi mo
˙
i chu
’
o
’
ng trình khác, tu
`
’
vie
ˆ
˙
c tìm kie
ˆ
´
m chu
’
o
’
ng trình d
¯
u
’
o
˙
’
c go
˙
i, cha
˙
y chúng d
¯
e
ˆ
´
n vie
ˆ
˙
c to
ˆ
’
chu
´
’
c du
˜
’
lie
ˆ
˙
u d
¯
a
ˆ
`
u vào/d
¯
a
ˆ
`
u ra. Ngoài ra, he
ˆ
˙
vo
’
chi
˙
u trách nhie
ˆ
˙
m ve
ˆ
`
công vie
ˆ
˙
c vo
´
’
i các bie
ˆ
´
n môi
tru
’
o
`
’
ng và thu
˙
’
c hie
ˆ
˙
n mo
ˆ
˙
t vài bie
ˆ
´
n d
¯
o
ˆ
’
i (the
ˆ
´
, hoán d
¯
o
ˆ
’
i vi
˙
trí) các tham so
ˆ
´
le
ˆ
˙
nh. Nhu
’
ng tính cha
ˆ
´
t
chính cu
’
a he
ˆ
˙
vo
’
, nho
`
’
d
¯
ó d
¯
u
’
a he
ˆ
˙
vo
’
tro
’
’
thành mo
ˆ
˙
t công cu
˙
ma
˙
nh cu
’
a ngu
’
o
`
’
i dùng, d
¯
ó là nó
bao go
ˆ
`
m mo
ˆ
˙
t ngôn ngu
˜
’
la
ˆ
˙
p trình d
¯
o
’
n gia
’
n. Trong toán ho
˙
c tu
`
’
lâu d
¯
ã d
¯
u
’
o
˙
’
c chu
´
’
ng minh ra
˘
`
ng,
ba
ˆ
´
t ky
`
mo
ˆ
˙
t thua
ˆ
˙
t toán nào cu
˜
ng có the
ˆ
’
d
¯
u
’
o
˙
’
c xây du
˙
’
ng tu
`
’
hai (ba) thao tác co
’
ba
’
n và mo
ˆ
˙
t toán
tu
’
’
d
¯
ie
ˆ
`
u kie
ˆ
˙
n. He
ˆ
˙
vo
’
cung ca
ˆ
´
p các toán tu
’
’
d
¯
ie
ˆ
`
u kie
ˆ
˙
n và toán tu
’
’
vòng la
˘
˙
p. Nó su
’
’
du
˙
ng các tie
ˆ
˙
n
ích và chu
’
o
’
ng trình khác (có trong thành pha
ˆ
`
n he
ˆ
˙
d
¯
ie
ˆ
`
u hành, hay d
¯
u
’
o
˙
’
c cài d
¯
a
˘
˙
t riêng) d
¯
e
ˆ
’
làm
các thao tác co
’
ba
’
n cho ngôn ngu
˜
’
la
ˆ
˙
p trình mà nó ho
ˆ
˜
tro
˙
’
. D
¯
o
ˆ
`
ng tho
`
’
i cho phép d
¯
u
’
a các tham
so
ˆ
´
cu
˜
ng nhu
’
ke
ˆ
´
t qua
’
làm vie
ˆ
˙
c cu
’
a mo
ˆ
˙
t chu
’
o
’
ng trình to
´
’
i các chu
’
o
’
ng trình khác hay to
´
’
i ngu
’
o
`
’
i
dùng. Ke
ˆ
´
t qua
’
thu d
¯
u
’
o
˙
’
c là mo
ˆ
˙
t ngôn ngu
˜
’
la
ˆ
˙
p trình ma
˙
nh. D
¯
ây cu
˜
ng là su
´
’
c ma
˙
nh và là mo
ˆ
˙
t
trong các chu
´
’
c na
˘
ng chính cu
’
a he
ˆ
˙
vo
’
. Tru
’
o
´
’
c khi ba
˘
´
t d
¯
a
ˆ
`
u pha
ˆ
`
n này, ba
˙
n d
¯
o
˙
c nên bie
ˆ
´
t các to
ˆ
’
ho
˙
’
p
phím chính, su
’
’
du
˙
ng d
¯
e
ˆ
’
d
¯
ie
ˆ
`
u khie
ˆ
’
n vie
ˆ
˙
c nha
ˆ
˙
p du
˜
’
lie
ˆ
˙
u trên dòng le
ˆ
˙
nh. Nên nho
´
’
ít nha
ˆ
´
t cách su
’
’
du
˙
ng cu
’
a các (to
ˆ
’
ho
˙
’
p) phím <Ctrl>+<C>, <Ctrl>+<D>, <Tab> và các phím có mu
˜
i tên.
3.2 Các ký tu
˙
’
d
¯
a
˘
˙
c bie
ˆ
˙
t
He
ˆ
˙
vo
’
bash su
’
’
du
˙
ng mo
ˆ
˙
t vài ký tu
˙
’
tu
`
’
bo
ˆ
˙
256 ký tu
˙
’
ASCII cho các mu
˙
c d
¯
ính riêng, hoa
˘
˙
c d
¯
e
ˆ
’
bie
ˆ
’
u thi
˙
các thao tác nào d
¯
ó, hoa
˘
˙
c d
¯
e
ˆ
’
bie
ˆ
´
n d
¯
o
ˆ
’
i bie
ˆ
’
u thu
´
’
c. Các ký tu
˙
’
này bao go
ˆ
`
m:
‘ ~ ! @ # $ % ^ & * ( ) _ [ ] { } : ; ’ " / \ > <
và ký tu
˙
’
vo
´
’
i mã 0, ký tu
˙
’
hàng mo
´
’
i (ta
˙
o ra khi nha
ˆ
´
n phím <Enter>) và ký tu
˙
’
khoa
’
ng tra
˘
´
ng. Phu
˙
thuo
ˆ
˙
c vào tình huo
ˆ
´
ng các ký tu
˙
’
d
¯
a
˘
˙
c bie
ˆ
˙
t này có the
ˆ
’
su
’
’
du
˙
ng vo
´
’
i ý nghı
˜
a d
¯
a
˘
˙
c bie
ˆ
˙
t cu
’
a nó hay
su
’
’
du
˙
ng nhu
’
mo
ˆ
˙
t ký tu
˙
’
thông thu
’
o
`
’
ng. Nhu
’
ng trong d
¯
a so
ˆ
´
các tru
’
o
`
’
ng ho
˙
’
p không khuyên dùng
các ký tu
˙
’
vo
´
’
i giá tri
˙
thu
´
’
hai. Tru
’
o
´
’
c he
ˆ
´
t d
¯
ó là vie
ˆ
˙
c su
’
’
du
˙
ng chúng trong tên ta
ˆ
˙
p tin và thu
’
mu
˙
c.
Tuy nhiên các ký tu
˙
’
_, - và . (da
ˆ
´
u ga
˙
ch du
’
o
´
’
i, ga
˙
ch ngang và da
ˆ
´
u cha
ˆ
´
m) thu
’
o
`
’
ng d
¯
u
’
o
˙
’
c su
’
’
du
˙
ng
trong tên ta
ˆ
˙
p tin, và d
¯
ây là mo
ˆ
˙
t ví du
˙
cho tha
ˆ
´
y không pha
’
i lúc nào chúng cu
˜
ng có giá tri
˙
d
¯
a
˘
˙
c
bie
ˆ
˙
t. Trong tên ta
ˆ
˙
p tin chı
’
da
ˆ
´
u cha
ˆ
´
m (.) và ga
˙
ch chéo (/) có giá tri
˙
d
¯
a
˘
˙
c bie
ˆ
˙
t. Ký hie
ˆ
˙
u ga
˙
ch chéo
dùng d
¯
e
ˆ
’
phân chia tên các thu
’
mu
˙
c trong d
¯
u
’
o
`
’
ng da
ˆ
˜
n, còn da
ˆ
´
u cha
ˆ
´
m có giá tri
˙
d
¯
a
˘
˙
c bie
ˆ
˙
t khi nó
là ký tu
˙
’
d
¯
a
ˆ
`
u tiên trong tên ta
ˆ
˙
p tin (cho bie
ˆ
´
t ta
ˆ
˙
p tin là "a
ˆ
’
n"). Vie
ˆ
˙
c d
¯
u
’
a ngay ta
ˆ
´
t ca
’
ý nghı
˜
a d
¯
a
˘
˙
c
bie
ˆ
˙
t cu
’
a nhu
˜
’
ng ký tu
˙
’
này và các tình huo
ˆ
´
ng su
’
’
du
˙
ng chúng ta
˙
m tho
`
’
i không có ích. Chúng ta
se
˜
xem xét chúng da
ˆ
`
n da
ˆ
`
n trong các pha
ˆ
`
n sau, khi ca
ˆ
`
n su
’
’
du
˙
ng d
¯
e
ˆ
´
n. Tuy nhiên, 3 ký hie
ˆ
˙
u có
ý nghı
˜
a lo
´
’
n và ca
ˆ
`
n d
¯
e
ˆ
`
ca
ˆ
˙
p d
¯
e
ˆ
´
n d
¯
a
ˆ
`
u tiên. Ký hie
ˆ
˙
u \ (ga
˙
ch chéo ngu
’
o
˙
’
c) có the
ˆ
’
go
˙
i là "ký hie
ˆ
˙
u
xóa bo
’
ý nghı
˜
a d
¯
a
˘
˙
c bie
ˆ
˙
t" cho ba
ˆ
´
t ky
`
ký tu
˙
’
d
¯
a
˘
˙
c bie
ˆ
˙
t nào, d
¯
u
´
’
ng ngay sau \. Ví du
˙
, ne
ˆ
´
u muo
ˆ
´
n
su
’
’
du
˙
ng khoa
’
ng tra
˘
´
ng trong tên ta
ˆ
˙
p tin, thì chúng ta ca
ˆ
`
n d
¯
a
˘
˙
t tru
’
o
´
’
c ký tu
˙
’
khoa
’
ng tra
˘
´
ng d
¯
ó mo
ˆ
˙
t
da
ˆ
´
u
˙
Ví du
˙
, câu le
ˆ
˙
nh sau:
kênh giao tác
teppi82@teppi:~$ cp lennon_imagine lennon\ imagine
Các ký tu
˙
’
’ và " (ngoa
˘
˙
c d
¯
o
’
n và ngoa
˘
˙
c kép) có the
ˆ
’
go
˙
i là "các ký tu
˙
’
trích da
ˆ
˜
n". Mo
ˆ
˜
i ký tu
˙
’
này luôn luôn d
¯
u
’
o
˙
’
c su
’
’
du
˙
ng trong mo
ˆ
˙
t ca
˘
˙
p vo
´
’
i ba
’
n sao cu
’
a chính nó d
¯
e
ˆ
’
d
¯
óng khung mo
ˆ
˙
t bie
ˆ
’
u
thu
´
’
c nào d
¯
ó, gio
ˆ
´
ng nhu
’
trong các va
˘
n ba
’
n, sách báo, . . . thông thu
’
o
`
’
ng. Ne
ˆ
´
u nhu
’
mo
ˆ
˙
t d
¯
oa
˙
n
3.3 Thu
˙
’
c thi các câu le
ˆ
˙
nh 29
va
˘
n ba
’
n nào d
¯
ó d
¯
a
˘
˙
t trong ngoa
˘
˙
c d
¯
o
’
n, thì ta
ˆ
´
t ca
’
các ký tu
˙
’
na
˘
`
m trong ngoa
˘
˙
c d
¯
o
’
n này có giá
tri
˙
nhu
’
các ký tu
˙
’
thông thu
’
o
`
’
ng, khôn mo
ˆ
˙
t ký tu
˙
’
nào có ý nghı
˜
a d
¯
a
˘
˙
c bie
ˆ
˙
t. Tro
’
’
la
˙
i vo
´
’
i ví du
˙
su
’
’
du
˙
ng khoa
’
ng tra
˘
´
ng trong tên ta
ˆ
˙
p tin o
’
’
trên, có the
ˆ
’
nói, ne
ˆ
´
u muo
ˆ
´
n d
¯
a
˘
˙
t ta
ˆ
˙
p tin cái tên "lennon
imagine" ca
ˆ
`
n d
¯
u
’
a tên d
¯
ó vào da
ˆ
´
u ngoa
˘
˙
c:
kênh giao tác
teppi82@teppi:~$ cp lennon_imagine ’lennon imagine’
Su
˙
’
khác nhau trong cách su
’
’
du
˙
ng ký tu
˙
’
’ và " d
¯
ó là, trong ngoa
˘
˙
c d
¯
o
’
n ma
ˆ
´
t ý nghı
˜
a d
¯
a
˘
˙
c bie
ˆ
˙
t
ta
ˆ
´
t ca
’
các ký tu
˙
’
, còn trong ngoa
˘
˙
c kép - ta
ˆ
´
t ca
’
chúng ngoa
˙
i tru
`
’
$, ’ và \ (da
ˆ
´
u d
¯
ô la, ngoa
˘
˙
c
d
¯
o
’
n và da
ˆ
´
u ga
˙
ch ngu
’
o
˙
’
c).
3.3 Thu
˙
’
c thi các câu le
ˆ
˙
nh
Nhu
’
d
¯
ã nói o
’
’
trên, mo
ˆ
˙
t trong các chu
´
’
c na
˘
ng chính cu
’
a he
ˆ
˙
vo
’
là to
ˆ
’
chu
´
’
c vie
ˆ
˙
c thu
˙
’
c hie
ˆ
˙
n các câu
le
ˆ
˙
nh mà ngu
’
o
`
’
i dùng d
¯
u
’
a vào trên dòng le
ˆ
˙
nh. He
ˆ
˙
vo
’
, nói riêng, cung ca
ˆ
´
p cho ngu
’
o
`
’
i dùng hai
thao tác d
¯
a
˘
˙
c bie
ˆ
˙
t d
¯
e
ˆ
’
to
ˆ
’
chu
´
’
c vie
ˆ
˙
c d
¯
u
’
a các câu le
ˆ
˙
nh trên dòng le
ˆ
˙
nh: ; và &.
3.3.1 Thao tác ;
Ma
˘
˙
c dù ngu
’
o
`
’
i dùng thu
’
o
`
’
ng chı
’
nha
ˆ
˙
p trên dòng le
ˆ
˙
nh tu
`
’
ng câu le
ˆ
˙
nh mo
ˆ
˙
t, nhu
’
ng còn có the
ˆ
’
d
¯
u
’
a
vào dòng le
ˆ
˙
nh d
¯
ó ngay la
ˆ
˙
p tu
´
’
c vài câu le
ˆ
˙
nh, và chúng se
˜
thu
˙
’
c hie
ˆ
˙
n la
ˆ
`
n lu
’
o
˙
’
t tu
`
’
câu le
ˆ
˙
nh này
d
¯
e
ˆ
´
n câu le
ˆ
˙
nh khác. D
¯
e
ˆ
’
làm d
¯
u
’
o
˙
’
c d
¯
ie
ˆ
`
u này ca
ˆ
`
n su
’
’
du
˙
ng ký tu
˙
’
d
¯
a
˘
˙
c bie
ˆ
˙
t - ;. Ne
ˆ
´
u dùng ký tu
˙
’
này
d
¯
e
ˆ
’
phân chia các câu le
ˆ
˙
nh, thì câu le
ˆ
˙
nh tie
ˆ
´
p theo se
˜
d
¯
u
’
o
˙
’
c coi nhu
’
tham so
ˆ
´
cu
’
a le
ˆ
˙
nh phía tru
’
o
´
’
c.
Nhu
’
va
ˆ
˙
y, ne
ˆ
´
u nha
ˆ
˙
p vào dòng le
ˆ
˙
nh cái gì d
¯
ó gio
ˆ
´
ng nhu
’
sau:
kênh giao tác
teppi82@teppi:~$ command1 ; command2
thì he
ˆ
˙
vo
’
d
¯
a
ˆ
`
u tiên se
˜
thu
˙
’
c hie
ˆ
˙
n câu le
ˆ
˙
nh command1, cho
`
’
cho le
ˆ
˙
nh d
¯
ó hoàn thành, sau d
¯
ó
cha
˙
y command2, cho
`
’
le
ˆ
˙
nh hoàn thành, sau d
¯
ó la
˙
i d
¯
u
’
a ra dòng nha
ˆ
˙
p le
ˆ
˙
nh và cho
`
’
các hành d
¯
o
ˆ
˙
ng
tie
ˆ
´
p theo cu
’
a ngu
’
o
`
’
i dùng.
3.3.2 Thao tác &
Thao tác & d
¯
u
’
o
˙
’
c dùng d
¯
e
ˆ
’
to
ˆ
’
chu
´
’
c vie
ˆ
˙
c thu
˙
’
c hie
ˆ
˙
n các câu le
ˆ
˙
nh trong che
ˆ
´
d
¯
o
ˆ
˙
ne
ˆ
`
n sau. Ne
ˆ
´
u d
¯
a
˘
˙
t
da
ˆ
´
u & ngay sau câu le
ˆ
˙
nh, thì he
ˆ
˙
vo
’
se
˜
tra
’
la
˙
i quye
ˆ
`
n d
¯
ie
ˆ
`
u khie
ˆ
’
n cho ngu
’
o
`
’
i dùng ngay sau khi
cha
˙
y câu le
ˆ
˙
nh, mà không d
¯
o
˙
’
i cho câu le
ˆ
˙
nh d
¯
ó hoàn thành. Ví du
˙
, ne
ˆ
´
u nha
ˆ
˙
p vào dòng le
ˆ
˙
nh
"command1 & command2 &", thì he
ˆ
˙
vo
’
cha
˙
y câu le
ˆ
˙
nh command1, ngay la
ˆ
˙
p tu
´
’
c cha
˙
y le
ˆ
˙
nh
command2, và sau d
¯
ó không cha
ˆ
˙
m tre
ˆ
˜
tra
’
la
˙
i dòng nha
ˆ
˙
p le
ˆ
˙
nh cho ngu
’
o
`
’
i dùng.
3.3.3 Thao tác && và ||
Cácthaotác&&và||lánhu
˜
’
ngthaotác d
¯
ie
ˆ
`
ukhie
ˆ
’
n.Ne
ˆ
´
utrêndòng le
ˆ
˙
nhlàcommand1 && command2,
thì command2 se
˜
thu
˙
’
c hie
ˆ
˙
n và chı
’
thu
˙
’
c hie
ˆ
˙
n trong tru
’
o
`
’
ng ho
˙
’
p tra
˙
ng thái thoát ra cu
’
a le
ˆ
˙
nh
command1 ba
˘
`
ng không (0), tu
´
’
c là le
ˆ
˙
nh d
¯
ó thu
˙
’
c hie
ˆ
˙
n thành công. Mo
ˆ
˙
t cách tu
’
o
’
ng tu
˙
’
, ne
ˆ
´
u dòng
le
ˆ
˙
nh có da
˙
ng command1 || command2, thì command2 se
˜
thu
˙
’
c hie
ˆ
˙
n và chı
’
thu
˙
’
c hie
ˆ
˙
n khi
tra
˙
ng thái thoát cu
’
a le
ˆ
˙
nh command1 khác không. Chúng ta se
˜
không xem xét ma
˘
˙
t ky
˜
thua
ˆ
˙
t cu
’
a
30 Bash
vie
ˆ
˙
c thu
˙
’
c hie
ˆ
˙
n mo
ˆ
˙
t câu le
ˆ
˙
nh nào d
¯
ó. Chı
’
có the
ˆ
’
nói nga
˘
´
n go
˙
n ra
˘
`
ng, he
ˆ
˙
vo
’
pha
’
i tìm mã (code)
chu
’
o
’
ng trình, na
˙
p mã d
¯
ó vào bo
ˆ
˙
nho
´
’
, chuye
ˆ
’
n các tham so
ˆ
´
d
¯
ã nha
ˆ
˙
p trên dòng le
ˆ
˙
nh vào cho câu
le
ˆ
˙
nh, và sau khi thu
˙
’
c hie
ˆ
˙
n xong thì theo mo
ˆ
˙
t cách nào d
¯
ó tra
’
la
˙
i ke
ˆ
´
t qua
’
thu
˙
’
c hie
ˆ
˙
n le
ˆ
˙
nh này
cho ngu
’
o
`
’
i dùng hay tie
ˆ
´
n trình khác. Chúng ta se
˜
xem xét qua các bu
’
o
´
’
c này. Bu
’
o
´
’
c d
¯
a
ˆ
`
u tiên -
tìm kie
ˆ
´
m câu le
ˆ
˙
nh. Các câu le
ˆ
˙
nh chia thành hai loa
˙
i: no
ˆ
˙
i trú (mã cu
’
a chúng có trong mã cu
’
a
chính he
ˆ
˙
vo
’
) và ngoa
˙
i trú (mã cu
’
a chúng na
˘
`
m trong mo
ˆ
˙
t ta
ˆ
˙
p tin riêng le
’
trên d
¯
ı
˜
a). He
ˆ
˙
vo
’
luôn
luôn tìm tha
ˆ
´
y le
ˆ
˙
nh no
ˆ
˙
i trú, còn d
¯
e
ˆ
’
tìm các le
ˆ
˙
nh ngoa
˙
i trú ngu
’
o
`
’
i dùng, theo nguyên ta
˘
´
c, pha
’
i
chı
’
cho he
ˆ
˙
vo
’
d
¯
u
’
o
`
’
ng da
ˆ
˜
n d
¯
a
ˆ
`
y d
¯
u
’
to
´
’
i ta
ˆ
˙
p tin tu
’
o
’
ng u
´
’
ng. Tuy nhiên d
¯
e
ˆ
’
go
˜
’
"gánh na
˘
˙
ng" cho ngu
’
o
`
’
i
dùng he
ˆ
˙
vo
’
bie
ˆ
´
t cách tìm le
ˆ
˙
nh ngoa
˙
i trú trong các thu
’
mu
˙
c, mà d
¯
u
’
o
˙
’
c lie
ˆ
˙
t kê trong d
¯
u
’
o
`
’
ng da
ˆ
˜
n
tìm kie
ˆ
´
m. Chı
’
khi (he
ˆ
˙
vo
’
) không the
ˆ
’
tìm tha
ˆ
´
y ta
ˆ
˙
p tin ca
ˆ
`
n thie
ˆ
´
t trong các thu
’
mu
˙
c d
¯
ó, nó mo
´
’
i
quye
ˆ
´
t d
¯
i
˙
nh ra
˘
`
ng ngu
’
o
`
’
i dùng d
¯
ã nha
ˆ
`
m khi nha
ˆ
˙
p tên le
ˆ
˙
nh. Ve
ˆ
`
cách thêm thu
’
mu
˙
c vào d
¯
u
’
o
`
’
ng
da
ˆ
˜
n tìm kie
ˆ
´
m chúng ta se
˜
nói d
¯
e
ˆ
´
n o
’
’
du
’
o
´
’
i, còn bây gio
`
’
chúng ta se
˜
xem xét cách he
ˆ
˙
vo
’
to
ˆ
’
chu
´
’
c
vie
ˆ
˙
c d
¯
u
’
a du
˜
’
lie
ˆ
˙
u vào cho câu le
ˆ
˙
nh d
¯
ang thu
˙
’
c hie
ˆ
˙
n và vie
ˆ
˙
c d
¯
u
’
a ke
ˆ
´
t qua
’
to
´
’
i cho ngu
’
o
`
’
i dùng.
3.4 D
¯
a
ˆ
`
u vào/d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n
3.4.1 Dòng du
˜
’
lie
ˆ
˙
u vào-ra
Khi mo
ˆ
˙
t chu
’
o
’
ng trình d
¯
u
’
o
˙
’
c thu
˙
’
c hie
ˆ
˙
n, nó d
¯
u
’
o
˙
’
c cung ca
ˆ
´
p ba dòng du
˜
’
lie
ˆ
˙
u (hay còn go
˙
i là
kênh):
• d
¯
a
ˆ
`
u vào tiêu chua
ˆ
’
n (standard input hay stdin). Qua kênh này du
˜
’
lie
ˆ
˙
u d
¯
u
’
o
˙
’
c d
¯
u
’
a vào cho
chu
’
o
’
ng trình;
• d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n (standard output hay stdout). Qua kênh này chu
’
o
’
ng trình d
¯
u
’
a ra ke
ˆ
´
t
qua
’
làm vie
ˆ
˙
c cu
’
a mình;
• kênh thông báo lo
ˆ
˜
i tiêu chua
ˆ
’
n (standard error hay stderr). Qua kênh này chu
’
o
’
ng trình
d
¯
u
’
a ra thông tin ve
ˆ
`
lo
ˆ
˜
i.
Tu
`
’
d
¯
a
ˆ
`
u vào tiêu chua
ˆ
’
n chu
’
o
’
ng trình chı
’
có the
ˆ
’
d
¯
o
˙
c, còn hai d
¯
a
ˆ
`
u ra và kênh thông báo lo
ˆ
˜
i
d
¯
u
’
o
˙
’
c chu
’
o
’
ng trình su
’
’
du
˙
ng chı
’
d
¯
e
ˆ
’
ghi. Theo ma
˘
˙
c d
¯
i
˙
nh d
¯
a
ˆ
`
u vào có liên ke
ˆ
´
t
1
vo
´
’
i bàn phím, còn
d
¯
a
ˆ
`
u ra và kênh báo lo
ˆ
˜
i hu
’
o
´
’
ng d
¯
e
ˆ
´
n terminal cu
’
a ngu
’
o
`
’
i dùng. Nói cách khác, toàn bo
ˆ
˙
thông tin
cu
’
a le
ˆ
˙
nh hay chu
’
o
’
ng trình mà ngu
’
o
`
’
i dùng d
¯
ã cha
˙
y, và ta
ˆ
´
t ca
’
nhu
˜
’
ng thông báo lo
ˆ
˜
i, d
¯
u
’
o
˙
’
c d
¯
u
’
a
ra cu
’
’
a so
ˆ
’
terminal. Tuy nhiên, chúng ta se
˜
tha
ˆ
´
y o
’
’
du
’
o
´
’
i, có the
ˆ
’
chuye
ˆ
’
n hu
’
o
´
’
ng thông báo d
¯
a
ˆ
`
u
ra (ví du
˙
, vào ta
ˆ
˙
p tin). D
¯
e
ˆ
’
cho tha
ˆ
´
y kênh thông báo lo
ˆ
˜
i tiêu chua
ˆ
’
n làm vie
ˆ
˙
c nhu
’
the
ˆ
´
nào, hãy
thu
˙
’
c hie
ˆ
˙
n câu le
ˆ
˙
nh ls vo
´
’
i mo
ˆ
˙
t tham so
ˆ
´
không d
¯
úng, ví du
˙
dùng tham so
ˆ
´
là mo
ˆ
˙
t tên ta
ˆ
˙
p tin
không to
ˆ
`
n ta
˙
i. Trong tru
’
o
`
’
ng ho
˙
’
p này, ls d
¯
u
’
a mo
ˆ
˙
t tin nha
˘
´
n báo lo
ˆ
˜
i ra kênh thông báo lo
ˆ
˜
i tiêu
chua
ˆ
’
n. Tuy nhiên, d
¯
o
ˆ
´
i vo
´
’
i ngu
’
o
`
’
i dùng thì trong tru
’
o
`
’
ng ho
˙
’
p này kênh thông báo lo
ˆ
˜
i tiêu chua
ˆ
’
n
không khác gì vo
´
’
i d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n, bo
’
’
i vì chúng ta cu
˜
ng tha
ˆ
´
y thông báo lo
ˆ
˜
i d
¯
ó trên cu
’
’
a so
ˆ
’
terminal. Làm vie
ˆ
˙
c vo
´
’
i d
¯
a
ˆ
`
u vào và d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n d
¯
u
’
o
˙
’
c minh ho
˙
a to
ˆ
´
t nha
ˆ
´
t qua ví du
˙
các
le
ˆ
˙
nh echo và cat.
3.4.2 Le
ˆ
˙
nh echo
Câu le
ˆ
˙
nh echo dùng d
¯
e
ˆ
’
chuye
ˆ
’
n to
´
’
i d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n dòng ký tu
˙
’
, mà d
¯
u
’
o
˙
’
c d
¯
u
’
a vào làm tham
so
ˆ
´
cho nó. Sau d
¯
ó le
ˆ
˙
nh này d
¯
u
’
a ra tín hie
ˆ
˙
u chuye
ˆ
’
n dòng và hoàn ta
ˆ
´
t công vie
ˆ
˙
c. Hãy thu
’
’
thu
˙
’
c
hie
ˆ
˙
n câu le
ˆ
˙
nh sau:
1
gio
ˆ
´
ng liên ke
ˆ
´
t hóa ho
˙
c
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 31
kênh giao tác
[user]$ echo ’xin chao cac ban!’
Tôi nghı
˜
ra
˘
`
ng lo
`
’
i gia
’
i thích se
˜
là thu
`
’
a thãi (chı
’
xin hãy su
’
’
du
˙
ng da
ˆ
´
u ngoa
˘
˙
c d
¯
o
’
n, ne
ˆ
´
u không
ke
ˆ
´
t qua
’
có the
ˆ
’
se
˜
khác. Ne
ˆ
´
u ba
˙
n d
¯
o
˙
c chú ý thì có the
ˆ
’
gia
’
i thích ta
˙
i sao la
˙
i khác).
3.4.3 Le
ˆ
˙
nh cat
Chúng ta se
˜
xem xét le
ˆ
˙
nh cat o
’
’
d
¯
ây vì le
ˆ
˙
nh này thu
’
o
`
’
ng làm vie
ˆ
˙
c vo
´
’
i d
¯
a
ˆ
`
u vào và d
¯
a
ˆ
`
u ra tiêu
chua
ˆ
’
n. Theo ma
˘
˙
c d
¯
i
˙
nh ke
ˆ
´
t qua
’
làm vie
ˆ
˙
c cu
’
a le
ˆ
˙
nh cat hu
’
o
´
’
ng to
´
’
i d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n. D
¯
e
ˆ
’
chu
´
’
ng
minh là le
ˆ
˙
nh này theo ma
˘
˙
c d
¯
i
˙
nh tie
ˆ
´
p nha
ˆ
˙
n dòng du
˜
’
lie
ˆ
˙
u nha
ˆ
˙
p vào, hãy cha
˙
y le
ˆ
˙
nh cat không
có tham so
ˆ
´
. Ke
ˆ
´
t qua
’
là con tro
’
chuye
ˆ
’
n to
´
’
i mo
ˆ
˙
t dòng mo
´
’
i, và ho
’
n nu
˜
’
a có ve
’
nhu
’
không có gì
xa
’
y ra. Lúc này câu le
ˆ
˙
nh cho
`
’
các ký tu
˙
’
d
¯
e
ˆ
´
n tu
`
’
d
¯
a
ˆ
`
u vào tiêu chua
ˆ
’
n. Hãy nha
ˆ
˙
p ba
ˆ
´
t ky
`
ký tu
˙
’
nào,
và nó se
˜
xua
ˆ
´
t hie
ˆ
˙
n ngay la
ˆ
˙
p tu
´
’
c trên màn hình, tu
´
’
c là chu
’
o
’
ng trình ngay la
ˆ
˙
p tu
´
’
c d
¯
u
’
a chúng to
´
’
i
d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n. Có the
ˆ
’
tie
ˆ
´
p tu
˙
c nha
ˆ
˙
p các ký tu
˙
’
, và chúng cu
˜
ng se
˜
xua
ˆ
´
t hie
ˆ
˙
n trên màn hình.
Thông thu
’
o
`
’
ng bàn phím d
¯
u
’
o
˙
’
c ca
ˆ
´
u hình d
¯
e
ˆ
’
nha
ˆ
˙
p vào theo tu
`
’
ng dòng, vì the
ˆ
´
ne
ˆ
´
u ba
˙
n nha
ˆ
´
n phím
<Enter>, dòng ký tu
˙
’
ba
˙
n vu
`
’
a nha
ˆ
˙
p se
˜
d
¯
u
’
o
˙
’
c d
¯
u
’
a to
´
’
i le
ˆ
˙
nh cat, và le
ˆ
˙
nh này se
˜
la
˙
i d
¯
u
’
a du
˜
’
lie
ˆ
˙
u ra
màn hình thông qua d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n. Nhu
’
va
ˆ
˙
y, mo
ˆ
˜
i dòng ký tu
˙
’
nha
ˆ
˙
p vào se
˜
d
¯
u
’
o
˙
’
c hie
ˆ
˙
n ra
hay la
ˆ
`
n: mo
ˆ
˙
t la
ˆ
`
n khi gõ và la
ˆ
`
n thu
´
’
hai bo
’
’
i câu le
ˆ
˙
nh cat. Ne
ˆ
´
u nha
ˆ
´
n to
ˆ
’
ho
˙
’
p phím <Ctrl>+<D>,
mà dùng d
¯
e
ˆ
’
ngu
`
’
ng vie
ˆ
˙
c nha
ˆ
˙
p du
˜
’
lie
ˆ
˙
u, chúng ta se
˜
qua la
˙
i dòng nha
ˆ
˙
p le
ˆ
˙
nh. Cu
˜
ng có the
ˆ
’
su
’
’
du
˙
ng to
ˆ
’
ho
˙
’
p phím <Ctrl>+<C>, mà là câu le
ˆ
˙
nh trong he
ˆ
˙
vo
’
d
¯
e
ˆ
’
du
`
’
ng chu
’
o
’
ng trình d
¯
ang cha
˙
y.
Ne
ˆ
´
u d
¯
u
’
a tên mo
ˆ
˙
t ta
ˆ
˙
p tin vào làm tham so
ˆ
´
cho le
ˆ
˙
nh cat, thì no
ˆ
˙
i dung cu
’
a le
ˆ
˙
nh này se
˜
d
¯
u
’
o
˙
’
c
d
¯
u
’
a to
´
’
i d
¯
a
ˆ
`
u vào tiêu chua
ˆ
’
n, tu
`
’
d
¯
ó le
ˆ
˙
nh cat se
˜
d
¯
o
˙
c no
ˆ
˙
i dung này và d
¯
u
’
a to
´
’
i d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n
(xem so
’
d
¯
o
ˆ
`
).
No
ˆ
˙
i dung ta
ˆ
˙
p tin -> D
¯
a
ˆ
`
u vào tiêu chua
ˆ
’
n (stdin) cat > d
¯
a
ˆ
`
u ra
tiêu chua
ˆ
’
n (stdout)
D
¯
ây chı
’
là mo
ˆ
˙
t tru
’
o
`
’
ng ho
˙
’
p riêng cu
’
a vie
ˆ
˙
c chuye
ˆ
’
n hu
’
o
´
’
ng du
˜
’
lie
ˆ
˙
u d
¯
a
ˆ
`
u vào, mo
ˆ
˙
t co
’
che
ˆ
´
ra
ˆ
´
t
có ích cu
’
a he
ˆ
˙
vo
’
. Và ta
ˆ
´
t nhiên chúng ta ca
ˆ
`
n xem xét ky
˜
ho
’
n co
’
che
ˆ
´
này.
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
Ma
˘
˙
c dù, nhu
’
d
¯
ã nói o
’
’
trên, thông thu
’
o
`
’
ng d
¯
a
ˆ
`
u vào/d
¯
a
ˆ
`
u ra cu
’
a mo
ˆ
˙
t chu
’
o
’
ng trình liên ke
ˆ
´
t vo
´
’
i
các d
¯
a
ˆ
`
u vào/d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n, trong he
ˆ
˙
vo
’
còn có các môi tru
’
o
`
’
ng d
¯
a
˘
˙
c bie
ˆ
˙
t cho phép chuye
ˆ
’
n
hu
’
o
´
’
ng d
¯
a
ˆ
`
u vào/d
¯
a
ˆ
`
u ra.
3.5.1 Su
’
’
du
˙
ng >, < và >>
D
¯
e
ˆ
’
chuye
ˆ
’
n hu
’
o
´
’
ng d
¯
a
ˆ
`
u vào/ra, su
’
’
du
˙
ng các ký hie
ˆ
˙
u ">", "<" và ">>". Thu
’
o
`
’
ng su
’
’
du
˙
ng vie
ˆ
˙
c
chuye
ˆ
’
n hu
’
o
´
’
ng d
¯
u
˜
’
lie
ˆ
˙
u ra cu
’
a câu le
ˆ
˙
nh vào ta
ˆ
˙
p tin. Du
’
o
´
’
i d
¯
ây là mo
ˆ
˙
t ví du
˙
tu
’
o
’
ng u
´
’
ng:
kênh giao tác
maikhai@fpt:/some/where$ ls -l > /home/maikhai/ls.txt
Theo le
ˆ
˙
nh này danh sách ta
ˆ
˙
p tin và thu
’
mu
˙
c con cu
’
a thu
’
mu
˙
c, mà tu
`
’
d
¯
ó ngu
’
o
`
’
i dùng
thu
˙
’
c hie
ˆ
˙
n le
ˆ
˙
nh ls
2
se
˜
d
¯
u
’
o
˙
’
c ghi vào ta
ˆ
˙
p tin /home/maikhai/ls.txt; khi này ne
ˆ
´
u ta
ˆ
˙
p tin
2
thu
’
mu
˙
c hie
ˆ
˙
n tho
`
’
i
32 Bash
ls.txt không to
ˆ
`
n ta
˙
i, thì nó se
˜
d
¯
u
’
o
˙
’
c ta
˙
o ra; ne
ˆ
´
u ta
ˆ
˙
p tin d
¯
ã có, thì no
ˆ
˙
i dung cu
’
a nó se
˜
bi
˙
xóa và ghi d
¯
è bo
’
’
i danh sách nói trên. Ne
ˆ
´
u ba
˙
n không muo
ˆ
´
n xóa no
ˆ
˙
i dung cu
˜
mà ghi thêm
du
˜
’
lie
ˆ
˙
u d
¯
a
ˆ
`
u ra vào cuo
ˆ
´
i ta
ˆ
˙
p tin, thì ca
ˆ
`
n su
’
’
du
˙
ng ký hie
ˆ
˙
u >> thay cho >. Khi này khoa
’
ng
tra
˘
´
ng tru
’
o
´
’
c và sau các ký hie
ˆ
˙
u > hay >> không có ý nghı
˜
a và chı
’
dùng vo
´
’
i mu
˙
c d
¯
ích thua
ˆ
˙
n
tie
ˆ
˙
n, de
ˆ
˜
nhìn. Ba
˙
n có the
ˆ
’
chuye
ˆ
’
n hu
’
o
´
’
ng không chı
’
vào ta
ˆ
˙
p tin, mà còn to
´
’
i d
¯
a
ˆ
`
u vào cu
’
a mo
ˆ
˙
t
câu le
ˆ
˙
nh khác hay to
´
’
i mo
ˆ
˙
t thie
ˆ
´
t bi
˙
nào d
¯
ó (ví du
˙
, máy in). Ví du
˙
, d
¯
e
ˆ
’
d
¯
u
’
a no
ˆ
˙
i dung ta
ˆ
˙
p tin
/home/maikhai/ls.txt vu
`
’
a ta
˙
o o
’
’
trên to
´
’
i cu
’
’
a so
ˆ
’
terminal thu
´
’
hai
3
có the
ˆ
’
su
’
’
du
˙
ng le
ˆ
˙
nh
sau:
kênh giao tác
maikhai@fpt:/sw$ cat /home/maikhai/ls.txt > /dev/tty2
Nhu
’
ba
˙
n tha
ˆ
´
y, > dùng d
¯
e
ˆ
’
chuye
ˆ
’
n hu
’
o
´
’
ng du
˜
’
lie
ˆ
˙
u cu
’
a d
¯
a
ˆ
`
u ra. Chu
´
’
c na
˘
ng tu
’
o
’
ng tu
˙
’
d
¯
o
ˆ
´
i vo
´
’
i
d
¯
a
ˆ
`
u vào d
¯
u
’
o
˙
’
c thu
˙
’
c hie
ˆ
˙
n bo
’
’
i <. Ví du
˙
, có the
ˆ
’
d
¯
e
ˆ
´
m so
ˆ
´
tu
`
’
trong ta
ˆ
˙
p tin ls.txt nhu
’
sau (chú ý,
d
¯
ây chı
’
là mo
ˆ
˙
t ví du
˙
minh ho
˙
a, trên thu
˙
’
c te
ˆ
´
thu
’
o
`
’
ng su
’
’
du
˙
ng câu le
ˆ
˙
nh d
¯
o
’
n gia
’
n ho
’
n):
kênh giao tác
maikhai@fpt:/sw$ wc -w < /home/maikhai/ls.txt
Cách chuye
ˆ
’
n hu
’
o
´
’
ng này thu
’
o
`
’
ng d
¯
u
’
o
˙
’
c su
’
’
du
˙
ng trong các script, cho các câu le
ˆ
˙
nh mà thu
’
o
`
’
ng
tie
ˆ
´
p nha
ˆ
˙
n (hay cho
`
’
) du
˜
’
lie
ˆ
˙
u vào tu
`
’
bàn phím. Trong script dùng d
¯
e
ˆ
’
tu
˙
’
d
¯
o
ˆ
˙
ng hóa mo
ˆ
˙
t thao tác
nào d
¯
ó, có the
ˆ
’
d
¯
u
’
a các thông tin ca
ˆ
`
n thie
ˆ
´
t cho câu le
ˆ
˙
nh tu
`
’
ta
ˆ
˙
p tin: trong ta
ˆ
˙
p tin này ghi sa
˘
˜
n
nhu
˜
’
ng gì ca
ˆ
`
n d
¯
e
ˆ
’
thu
˙
’
c hie
ˆ
˙
n le
ˆ
˙
nh d
¯
ó. Bo
’
’
i vì các ký hie
ˆ
˙
u <, > và >> làm vie
ˆ
˙
c vo
´
’
i các kênh tiêu
chua
ˆ
’
n (d
¯
a
ˆ
`
u vào hoa
˘
˙
c d
¯
a
ˆ
`
u ra), chúng không chı
’
d
¯
u
’
o
˙
’
c dùng theo các cách quen thuo
ˆ
˙
c, thu
’
o
`
’
ng
dùng, mà còn có the
ˆ
’
theo cách khác, "la
˙
ma
˘
´
t" ho
’
n. Ví du
˙
, các câu le
ˆ
˙
nh sau là tu
’
o
’
ng d
¯
u
’
o
’
ng:
kênh giao tác
[user]$ cat > file
[user]$ cat>file
[user]$ >file cat
[user]$ > file cat
Tuy nhiên, tu
˙
’
chúng (không có mo
ˆ
˙
t le
ˆ
˙
nh nào, tu
´
’
c là không có kênh tiêu chua
ˆ
’
n nào cho
le
ˆ
˙
nh) các ký tu
˙
’
chuye
ˆ
’
n hu
’
o
´
’
ng này không the
ˆ
’
d
¯
u
’
o
˙
’
c su
’
’
du
˙
ng, nhu
’
the
ˆ
´
không the
ˆ
’
, ví du
˙
, nha
ˆ
˙
p
vào dòng le
ˆ
˙
nh sau:
kênh giao tác
[user]$ file1 > file2
mà thu d
¯
u
’
o
˙
’
c ba
’
n sao cu
’
a mo
ˆ
˙
t ta
ˆ
˙
p tin nào d
¯
ó. Nhu
’
ng d
¯
ie
ˆ
`
u này không làm gia
’
m giá tri
˙
cu
’
a
co
’
che
ˆ
´
này, bo
’
’
i vì các kênh tiêu chua
ˆ
’
n có cho mo
˙
i câu le
ˆ
˙
nh. Khi này, có the
ˆ
’
chuye
ˆ
’
n hu
’
o
´
’
ng
không chı
’
d
¯
a
ˆ
`
u vào và d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n, mà còn các kênh khác. D
¯
e
ˆ
’
làm d
¯
u
’
o
˙
’
c d
¯
ie
ˆ
`
u này, ca
ˆ
`
n
d
¯
a
˘
˙
t tru
’
o
´
’
c ký hie
ˆ
˙
u chuye
ˆ
’
n hu
’
o
´
’
ng so
ˆ
´
cu
’
a kênh muo
ˆ
´
n chuye
ˆ
’
n. D
¯
a
ˆ
`
u vào tiêu chua
ˆ
’
n stdin có so
ˆ
´
0,
d
¯
a
ˆ
`
u ra tiêu chua
ˆ
’
n stdout - so
ˆ
´
1, kênh thông báo lo
ˆ
˜
i stderr - so
ˆ
´
2. Tu
´
’
c là le
ˆ
˙
nh chuye
ˆ
’
n hu
’
o
´
’
ng có
da
˙
ng d
¯
a
ˆ
`
y d
¯
u
’
nhu
’
sau (xin d
¯
u
’
o
˙
’
c nha
˘
´
c la
˙
i, khoa
’
ng tra
˘
´
ng ca
˙
nh > là không nha
ˆ
´
t thie
ˆ
´
t):
command N > M
3
ba
˙
n ca
ˆ
`
n dùng to
ˆ
’
ho
˙
’
p phím <Ctrl>+<Alt>+<F2> d
¯
e
ˆ
’
chuye
ˆ
’
n to
´
’
i cu
’
’
a so
ˆ
’
terminal này và d
¯
a
˘
ng nha
ˆ
˙
p tru
’
o
´
’
c