Tải bản đầy đủ (.pdf) (10 trang)

Chuong 3 Bash ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (79.53 KB, 10 trang )

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

This is trial version
www.adultpdf.com
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
This is trial version
www.adultpdf.com
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
This is trial version
www.adultpdf.com
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
This is trial version
www.adultpdf.com
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
This is trial version
www.adultpdf.com
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
This is trial version
www.adultpdf.com
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á
This is trial version
www.adultpdf.com
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
This is trial version
www.adultpdf.com
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ùng vo
´

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
This is trial version
www.adultpdf.com
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
This is trial version
www.adultpdf.com

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×