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

Lịch sử và các bản phân phối HĐH Linux từ trước đến nay phần 7 potx

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 (48.14 KB, 6 trang )

3.7 Khai trie
ˆ

n bie
ˆ

u thu
´

c 39
kênh giao tác
[user]$ export name=value
Trong tru

o
`

ng ho
˙

p này, ta
ˆ
´
t ca

các chu

o

ng trình cha
˙


y tu
`

he
ˆ
˙
vo

(ke
ˆ

ca

ba

n sao thu
´

hai cu

a
chính he
ˆ
˙
vo

) se
˜
có quye
ˆ

`
n truy ca
ˆ
˙
p to
´

i các bie
ˆ
´
n d
¯
u

o
˙

c gán nhu

va
ˆ
˙
y, tu
´

c là su


du
˙

ng giá tri
˙
cu

a
chúng qua tên.
3.7 Khai trie
ˆ

n bie
ˆ

u thu
´

c
Hay he
ˆ
˙
vo

d
¯
o
˙
c các câu le
ˆ
˙
nh nhu


the
ˆ
´
nào? Khi he
ˆ
˙
vo

nha
ˆ
˙
n d
¯
u

o
˙

c mo
ˆ
˙
t dòng
le
ˆ
˙
nh này d
¯
ó ca
ˆ
`

n thu
˙

c hie
ˆ
˙
n, nó (he
ˆ
˙
vo

) tru

o
´

c khi cha
˙
y câu le
ˆ
˙
nh thu
˙

c hie
ˆ
˙
n vie
ˆ
˙

c "phân tích ngu
˜

pháp" dòng le
ˆ
˙
nh này (gio
ˆ
´
ng trong ngôn ngu
˜

, phân tích chu

ngu
˜

, vi
˙
ngu
˜

). Mo
ˆ
˙
t trong nhu
˜

ng
bu


o
´

c cu

a su
˙

phân tích này là phép mo


hay khai trie
ˆ

n bie
ˆ

u thu
´

c (expansion). Trong bash có
ba

y loa
˙
i khai trie
ˆ

n bie

ˆ

u thu
´

c:
• Khai trie
ˆ

n da
ˆ
´
u ngoa
˘
˙
c (brace expansion);
• Thay the
ˆ
´
da
ˆ
´
u ngã (tilde expansion);
• Phép the
ˆ
´
các tham bie
ˆ
´
n và bie

ˆ
´
n so
ˆ
´
;
• Phép the
ˆ
´
các câu le
ˆ
˙
nh;
• Phép the
ˆ
´
so
ˆ
´
ho
˙
c (thu
˙

c hie
ˆ
˙
n tu
`


trái sang pha

i);
• Phép chia tu
`

(word splitting);
• Khai trie
ˆ

n các ma
ˆ
˜
u tên ta
ˆ
˙
p tin và thu

mu
˙
c (pathname expansion).
Các thao tác này d
¯
u

o
˙

c thu
˙


c hie
ˆ
˙
n theo d
¯
úng thu
´

tu
˙

lie
ˆ
˙
t kê trên. Chúng ta se
˜
xem xét chúng
theo tu
´

tu
˙

này.
3.7.1 Khai trie
ˆ

n da
ˆ

´
u ngoa
˘
˙
c
Khai trie
ˆ

n da
ˆ
´
u ngoa
˘
˙
c to
ˆ
´
t nha
ˆ
´
t minh ho
˙
a trên ví du
˙
. Gia

thie
ˆ
´
t, chúng ta ca

ˆ
`
n ta
˙
o thu

mu
˙
c con
trong mo
ˆ
˙
t thu

mu
˙
c nào d
¯
ó, hoa
˘
˙
c thay d
¯
o
ˆ

i ngu

o
`


i dùng so


hu
˜

u cu

a vài ta
ˆ
˙
p tin cùng mo
ˆ
˙
t lúc. Có
the
ˆ

thu
˙

c hie
ˆ
˙
n d
¯
ie
ˆ
`

u này nho
`

các câu le
ˆ
˙
nh sau:
kênh giao tác
[user]$ mkdir /usr/src/unikey/{old,new,dist,bugs}
[root]# chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}
Trong tru

o
`

ng ho
˙

p d
¯
a
ˆ
`
u, trong thu

mu
˙
c /usr/src/unikey/ se
˜
ta

˙
o ra các thu

mu
˙
c con
old,new,dist, và bugs. Trong tru

o
`

ng ho
˙

p thu
´

hai, ngu

o
`

i dùng so


hu
˜

u cu


a các ta
ˆ
˙
p tin sau
se
˜
thay d
¯
o
ˆ

i (thành root):
• /usr/ucb/ex
• /usr/lib/ex?.?
40 Bash
• /usr/ucb/edit
• /usr/lib/ex?.?
• /usr/ucb/ex
• /usr/lib/how_ex
• /usr/ucb/edit
• /usr/lib/how_ex
Tu
´

c là vo
´

i mo
ˆ
˜

i ca
˘
˙
p da
ˆ
´
u ngoa
˘
˙
c se
˜
ta
˙
o ra vài dòng riêng re
˜
(so
ˆ
´
nhu
˜

ng dòng này ba
˘
`
ng so
ˆ
´
tu
`


na
˘
`
ng trong da
ˆ
´
u ngoa
˘
˙
c) ba
˘
`
ng cách ghi thêm vào tru

o
´

c mo
ˆ
˜
i tu
`

trong ngoa
˘
˙
c nhu
˜

ng gì d

¯
u
´

ng tru

o
´

c
da
ˆ
´
u ngoa
˘
˙
c, và ghi thêm vào sau mo
ˆ
˜
i tu
`

này nhu
˜

ng gì d
¯
u
´


ng sau da
ˆ
´
u ngoa
˘
˙
c. Mo
ˆ
˙
t ví du
˙
khác:
dòng a{d,c,b}e khi khai trie
ˆ

n se
˜
thu d
¯
u

o
˙

c ba tu
`

"ade ace abe". Khai trie
ˆ


n da
ˆ
´
u ngoa
˘
˙
c
d
¯
u

o
˙

c thu
˙

c hie
ˆ
˙
n tru

o
´

c các da
˙
ng khai trie
ˆ


n khác trong dòng le
ˆ
˙
nh, ho

n nu
˜

a ta
ˆ
´
t ca

các ký tu
˙

d
¯
a
˘
˙
c
bie
ˆ
˙
t có trong dòng le
ˆ
˙
nh, ke
ˆ


ca

nhu
˜

ng ký tu
˙

na
˘
`
m trong da
ˆ
´
u ngoa
˘
˙
c, se
˜
d
¯
u

o
˙

c giu
˜


không thay d
¯
o
ˆ

i
(chúng se
˜
d
¯
u

o
˙

c biên di
˙
ch o


các bu

o
´

c phía sau).
3.7.2 Thay the
ˆ
´
da

ˆ
´
u ngã (Tilde Expansion)
Ne
ˆ
´
u nhu

tu
`

ba
˘
´
t d
¯
a
ˆ
`
u vo
´

i ký tu
˙

da
ˆ
´
u ngã (’∼’), ta
ˆ

´
t ca

các ký tu
˙

d
¯
u
´

ng tru

o
´

c da
ˆ
´
u ga
˙
ch chéo d
¯
a
ˆ
`
u tiên
(hay ta
ˆ
´

t ca

các ký tu
˙

ne
ˆ
´
u nhu

không có da
ˆ
´
u ga
˙
ch chéo) se
˜
d
¯
u

o
˙

c hie
ˆ

u là tên ngu

o

`

i dùng (login
name). Ne
ˆ
´
u nhu

tên này là mo
ˆ
˙
t dòng ro
ˆ
˜
ng (tu
´

c là da
ˆ
´
u ga
˙
ch chéo d
¯
u
´

ng ngay phía sau da
ˆ
´

u ngã),
thì da
ˆ
´
u ngã se
˜
d
¯
u

o
˙

c thay the
ˆ
´
bo


i giá tri
˙
cu

a bie
ˆ
´
n HOME. Và ne
ˆ
´
u giá tri

˙
cu

a bie
ˆ
´
n HOME không
d
¯
u

o
˙

c gán thì da
ˆ
´
u ngã se
˜
d
¯
u

o
˙

c thay the
ˆ
´
bo



i d
¯
u

o
`

ng da
ˆ
˜
n d
¯
a
ˆ
`
u d
¯
u

d
¯
e
ˆ
´
n thu

mu
˙

c cá nhân cu

a ngu

o
`

i
dùng, mà d
¯
ã cha
˙
y he
ˆ
˙
vo

. Ne
ˆ
´
u nhu

ngay sau da
ˆ
´
u ngã (và tru

o
´


c da
ˆ
´
u ga
˙
ch chéo) là mo
ˆ
˙
t tu
`

trùng
vo
´

i tên cu

a mo
ˆ
˙
t ngu

o
`

i dùng ho
˙

p pháp, thì da
ˆ

´
u ngã co
ˆ
˙
ng vo
´

i tên ngu

o
`

i dùng d
¯
u

o
˙

c thay the
ˆ
´
bo


i
d
¯
u


o
`

ng da
ˆ
˜
n d
¯
a
ˆ
`
y d
¯
u

d
¯
e
ˆ
´
n thu

mu
˙
c cá nhân cu

a ngu

o
`


i dùng này. Ne
ˆ
´
u nhu

tu
`

d
¯
u
´

ng sau da
ˆ
´
u ngã
không pha

i là tên cu

a mo
ˆ
˙
t ngu

o
`


i dùng (và không ro
ˆ
˜
ng), thì tu
`

không bi
˙
thay d
¯
o
ˆ

i. Ne
ˆ
´
u nhu

sau
da
ˆ
´
u ngã là ’+’, hay ký hie
ˆ
˙
u này se
˜
d
¯
u


o
˙

c thay the
ˆ
´
bo


i tên d
¯
a
ˆ
`
u d
¯
u

cu

a thu

mu
˙
c hie
ˆ
˙
n tho
`


i (tu
´

c là
giá tri
˙
cu

a bie
ˆ
´
n PWD). Ne
ˆ
´
u du
´

ng sau da
ˆ
´
u ngã là ’-’, thì thay the
ˆ
´
giá tri
˙
cu

a bie
ˆ

´
n OLDPWD (thu

mu
˙
c "cu
˜
").
3.7.3 Phép the
ˆ
´
các tham bie
ˆ
´
n và bie
ˆ
´
n so
ˆ
´
Ký tu
˙

$ d
¯
u

o
˙


c su


du
˙
ng cho các thao tác the
ˆ
´
tham bie
ˆ
´
n, the
ˆ
´
các câu le
ˆ
˙
nh và the
ˆ
´
các bie
ˆ

u thu
´

c
so
ˆ
´

ho
˙
c. Bie
ˆ

u thu
´

c hay tên d
¯
u
´

ng sau $ có the
ˆ

d
¯
u

o
˙

c d
¯
u

a vào ngoa
˘
˙

c, không nha
ˆ
´
t thie
ˆ
´
t, nhu

ng
ra
ˆ
´
t tie
ˆ
˙
n, vì da
ˆ
´
u ngoa
˘
˙
c phân cách bie
ˆ

u thu
´

c vo
´


i các tu
`

hay ký tu
˙

d
¯
u
´

ng sau. Nhu

va
ˆ
˙
y, d
¯
e
ˆ

go
˙
i
giá tri
˙
cu

a tham bie
ˆ

´
n nói chung cu
˜
ng nhu

bie
ˆ
´
n môi tru

o
`

ng nói riêng trong dòng le
ˆ
˙
nh, ca
ˆ
`
n d
¯
a
˘
˙
t
bie
ˆ

u thu
´


c da
˙
ng $parameter. Da
ˆ
´
u ngoa
˘
˙
c chı

ca
ˆ
`
n thie
ˆ
´
t, ne
ˆ
´
u tên cu

a tham bie
ˆ
´
n có chu
´

a vài chu
˜


so
ˆ
´
, hoa
˘
˙
c khi theo sau tên còn có các ký tu
˙

khác, mà chúng ta không muo
ˆ
´
n he
ˆ
˙
vo

"hie
ˆ

u la
ˆ
`
m"
chúng là mo
ˆ
˙
t pha
ˆ

`
n cu

a tên tham bie
ˆ
´
n. Trong ta
ˆ
´
t ca

các giá tri
˙
cu

a bie
ˆ
´
n so
ˆ
´
xa

y ra phép the
ˆ
´
da
ˆ
´
u

ngã (∼), su
˙

khai trie
ˆ

n tham bie
ˆ
´
n và bie
ˆ
´
n so
ˆ
´
, phép the
ˆ
´
các câu le
ˆ
˙
nh, phép the
ˆ
´
các bie
ˆ

u thu
´


c so
ˆ
´
ho
˙
c, cu
˜
ng nhu

xóa các ký tu
˙

trích da
ˆ
˜
n (xem du

o
´

i). Su
˙

phân chia tu
`

không xa

y ra, tru
`


tru

o
`

ng
ho
˙

p "$" (lo
`

i gia

i thích xem o


ba

ng so
ˆ
´
3). Su
˙

khai trie
ˆ

n các ma

ˆ
˜
u tên ta
ˆ
˙
p tin và thu

mu
˙
c cu
˜
ng
không d
¯
u

o
˙

c thu
˙

c hie
ˆ
˙
n.
3.7 Khai trie
ˆ

n bie

ˆ

u thu
´

c 41
3.7.4 Phép the
ˆ
´
các câu le
ˆ
˙
nh
Phép the
ˆ
´
các câu le
ˆ
˙
nh là mo
ˆ
˙
t công cu
˙
ra
ˆ
´
t ma
˙
ng cu


a bash. Ý nghı
˜
a cu

a nó na
˘
`
m o


cho
ˆ
˜
thay the
ˆ
´
tên các câu le
ˆ
˙
nh bo


i ke
ˆ
´
t qua

thu
˙


c hie
ˆ
˙
n cu

a chúng. Có hai da
˙
ng phép the
ˆ
´
le
ˆ
˙
nh: $(command)
và ‘command‘ Ne
ˆ
´
u u
´

ng du
˙
ng da
˙
ng thu
´

hai (chú ý o



d
¯
ây su


du
˙
ng da
ˆ
´
u "ngoa
˘
˙
c d
¯
o

n ngu

o
˙

c",
phím cho nó thu

o
`

ng na

˘
`
m trên phím Tab), thì da
ˆ
´
u ga
˙
ch ngu

o
˙

c (\) o


trong da
ˆ
´
u ngoa
˘
˙
c se
˜
có chu
´

c
na
˘
ng nhu


mo
ˆ
˙
t ký tu
˙

thông thu

o
`

ng, tru
`

tru

o
`

ng ho
˙

p, khi d
¯
u
´

ng sau nó (da
ˆ

´
u ga
˙
ch ngu

o
˙

c) là mo
ˆ
˙
t
$, ‘, hay mo
ˆ
˙
t \. Ne
ˆ
´
u nhu

su


du
˙
ng da
˙
ng $(command), thì ta
ˆ
´

t ca

các ký tu
˙

d
¯
u
´

ng trong ngoa
˘
˙
c ta
˙
o
thành mo
ˆ
˙
t câu le
ˆ
˙
nh, không có ký tu
˙

nào có ý nghı
˜
a d
¯
a

˘
˙
c bie
ˆ
˙
t. Ne
ˆ
´
u phép the
ˆ
´
câu le
ˆ
˙
nh xa

y ra
phía trong ngoa
˘
˙
c kép, thì trong ke
ˆ
´
t qua

cu

a phép the
ˆ
´

se
˜
không thu
˙

c hie
ˆ
˙
n phép phân chia tu
`


su
˙

khai trie
ˆ

n ma
ˆ
˜
u tên ta
ˆ
˙
p tin và thu

mu
˙
c.
3.7.5 Phép the

ˆ
´
so
ˆ
´
ho
˙
c (Arithmetic Expansion)
Phép the
ˆ
´
so
ˆ
´
ho
˙
c cho phép tính giá tri
˙
cu

a mo
ˆ
˙
t bie
ˆ

u thu
´

c so

ˆ
´
ho
˙
c và thay the
ˆ
´
nó (bie
ˆ

u thu
´

c)
bo


i ke
ˆ
´
t qua

thu d
¯
u

o
˙

c. Có hai da

˙
ng phép the
ˆ
´
so
ˆ
´
ho
˙
c: $[expression] ((expression))
Trong d
¯
ó expression d
¯
u

o
˙

c hie
ˆ

u (d
¯
u

o
˙

c bash d

¯
o
˙
c) nhu

khi d
¯
u
´

ng trong ngoa
˘
˙
c kép, nhu

ng
nhu
˜

ng da
ˆ
´
u ngoa
˘
˙
c kép o


trong expression la
˙

i d
¯
u

o
˙

c d
¯
o
˙
c nhu

mo
ˆ
˙
t ký tu
˙

thu

o
`

ng. Phía trong
expression có thu
˙

c hie
ˆ

˙
n các phép the
ˆ
´
tham bie
ˆ
´
n và the
ˆ
´
câu le
ˆ
˙
nh. Cú pháp cu

a bie
ˆ

u thu
´

c
expression tu

o

ng tu
˙

nhu


cú pháp cu

a bie
ˆ

u thu
´

c so
ˆ
´
ho
˙
c cu

a ngôn ngu
˜

C, cu
˙
the
ˆ

ho

n ve
ˆ
`
va

ˆ
´
n
d
¯
e
ˆ
`
này có the
ˆ

d
¯
o
˙
c trong pha
ˆ
`
n ARITHMETIC EVALUATION cu

a trang man cu

a bash. Ví
du
˙
, câu le
ˆ
˙
nh
kênh giao tác

[user]$ echo $((2 + 3 * 5))
cho ke
ˆ
´
t qua

ba
˘
`
ng "17". Ne
ˆ
´
u bie
ˆ

u thu
´

c không chính xác, bash se
˜
d
¯
u

a ra thông báo lo
ˆ
˜
i.
3.7.6 Phân chia tu
`


(word splitting)
Sau khi thu
˙

c hie
ˆ
˙
n xong các phép the
ˆ
´
tham bie
ˆ
´
n, the
ˆ
´
le
ˆ
˙
nh, và the
ˆ
´
các bie
ˆ

u thu
´

c so

ˆ
´
ho
˙
c, he
ˆ
˙
vo

la
˙
i
phân tích dòng le
ˆ
˙
nh mo
ˆ
˙
t la
ˆ
`
n nu
˜

a (nhu

ng o


da

˙
ng thu d
¯
u

o
˙

c sau các phép the
ˆ
´
nói trên) và thu
˙

c
hie
ˆ
˙
n vie
ˆ
˙
c phân chia tu
`

(word splitting). Thao tác này na
˘
`
m o



cho
ˆ
˜
, he
ˆ
˙
vo

tìm trong dòng le
ˆ
˙
nh
ta
ˆ
´
t ca

các ký tu
˙

phân chia, xác d
¯
i
˙
nh bo


i bie
ˆ
´

n IFS (xem trên), và nho
`

d
¯
ó chia nho

dòng le
ˆ
˙
nh
thành các tu
`

riêng re
˜
trong các cho
ˆ
˜
tu

o

ng u
´

ng. Ne
ˆ
´
u giá tri

˙
cu

a IFS ba
˘
`
ng mo
ˆ
˙
t dòng tro
ˆ
´
ng, thì
vie
ˆ
˙
c phân chia tu
`

se
˜
không xa

y ra. Ne
ˆ
´
u trong dòng le
ˆ
˙
nh không thu

˙

c hie
ˆ
˙
n phép the
ˆ
´
nào trong
các phép the
ˆ
´
ke
ˆ

trên, thì phân chia tu
`

cu
˜
ng không xa

y ra.
3.7.7 Khai trie
ˆ

n các ma
ˆ
˜
u tên ta

ˆ
˙
p tin và thu

mu
˙
c (Pathname Expansion)
Phép the
ˆ
´
tên d
¯
u

o
`

ng da
ˆ
˜
n và ta
ˆ
˙
p tin (Pathname expansion) su


du
˙
ng d
¯

e
ˆ

chı

nho
`

mo
ˆ
˙
t ma
ˆ
˜
u nho

go
˙
n mà có the
ˆ

chı

ra vài ta
ˆ
˙
p tin (hay thu

mu
˙

c), tu

o

ng u
´

ng vo
´

i ma
ˆ
˜
u này. Sau khi phân chia tu
`

,
và ne
ˆ
´
u nhu

không d
¯
u

a ra tùy cho
˙
n -f, thì bash se
˜

tìm kie
ˆ
´
m trong tu
`

ng tu
`

cu

a dòng le
ˆ
˙
nh các
ký tu
˙

*, ?, và [. Ne
ˆ
´
u tìm tha
ˆ
´
y tu
`

vo
´


i mo
ˆ
˙
t hay vài ký tu
˙

nhu

va
ˆ
˙
y, thì tu
`

này se
˜
d
¯
u

o
˙

c xem
nhu

mo
ˆ
˙
t ma

ˆ
˜
u, và ca
ˆ
`
n thay the
ˆ
´
bo


i các tu
`

trong danh sách d
¯
u

o
`

ng da
ˆ
˜
n, tu

o

ng u
´


ng vo
´

i ma
ˆ
˜
u này.
Ne
ˆ
´
u nhu

không tìm tha
ˆ
´
y tên tu

o

ng u
´

ng vo
´

i ma
ˆ
˜
u, và bie

ˆ
´
n nullglob không d
¯
u

o
˙

c d
¯
u

a ra, thì tu
`

se
˜
không thay d
¯
o
ˆ

i, tu
´

c là các ký tu
˙

d

¯
a
˘
˙
c bie
ˆ
˙
t bi
˙
ma
ˆ
´
t giá tri
˙
và hie
ˆ

u nhu

các ký tu
˙

thu

o
`

ng. Ne
ˆ
´

u
nhu

bie
ˆ
´
n này d
¯
u

o
˙

c xác d
¯
i
˙
nh, mà d
¯
u

o
`

ng da
ˆ
˜
n tu

o


ng u
´

ng vo
´

i ma
ˆ
˜
u không tìm tha
ˆ
´
y, thì tu
`

se
˜
bi
˙
xóa kho

i dòng le
ˆ
˙
nh. Các ký tu
˙

dùng d
¯

e
ˆ

ta
˙
o ma
ˆ
˜
u có các giá tri
˙
trong ba

ng
3.4
42 Bash
Ba

ng 3.4: Các ký tu
˙

ta
˙
o ma
ˆ
˜
u
Ký tu
˙

Quy lua

ˆ
˙
t thay the
ˆ
´
* Tu

o

ng u
´

ng vo
´

i ba
ˆ
´
t ky
`
dòng ký tu
˙

nào, ke
ˆ

ca

dòng ro
ˆ

˜
ng. Ví du
˙
, v*.txt
se
˜
d
¯
u

o
˙

c thay the
ˆ
´
bo


i vnoss.txt, vnlinux.txt và vntex.txt
(ne
ˆ
´
u các ta
ˆ
˙
p tin này to
ˆ
`
n ta

˙
i), và *.png se
˜
tu

o

ng u
´

ng ta
ˆ
´
t ca

các ta
ˆ
˙
p tin có
pha
ˆ
`
n mo


ro
ˆ
˙
ng png (ta
ˆ

˙
p tin d
¯
o
ˆ
`
ho
˙
a hai chie
ˆ
`
u).
? Tu

o

ng u
´

ng ba
ˆ
´
t ký mo
ˆ
˙
t ký tu
˙

d
¯

o

n nào. Ví du
˙
, ma
ˆ
˜
u
file?.txt se
˜
d
¯
u

o
˙

c thaythe
ˆ
´
bo


i các tên te
ˆ
˙
p sau
file1.txt, file2.txt, file3.txt, và filea.txt
(ne
ˆ

´
u chúng to
ˆ
`
n ta
˙
i), nhu

ng file23.txt thì không.
[ ] Tu

o

ng u
´

ng ba
ˆ
´
t ky
`
ký tu
˙

nào trong so
ˆ
´
các ký tu
˙


na
˘
`
m trong da
ˆ
´
u ngoa
˘
˙
c
vuông này. Ca
˘
˙
p ký tu
˙

, phân cách nhau bo


i da
ˆ
´
u tru
`

(-), ví du
˙
c-f, bie
ˆ


u
thi
˙
mo
ˆ
˙
t dãy; ba
ˆ
´
t ký ký tu
˙

nào, theo tu
`

d
¯
ie
ˆ

n, na
˘
`
m giu
˜

a hai ký tu
˙

này, ke

ˆ

ca

hai ký tu
˙

ta
˙
o ra dãy (c và f trong ví du
˙
) cu
˜
ng tu

o

ng u
´

ng vo
´

i ma
ˆ
˜
u. Ne
ˆ
´
u

ký tu
˙

d
¯
a
ˆ
`
u tiên trong ngoa
˘
˙
c vuông là hay
ˆ
, thì ma
ˆ
˜
u (o


vi
˙
trí này) se
˜
tu

o

ng
u
´


ng ta
ˆ
´
t ca

các ký tu
˙

, không d
¯
u

o
˙

c chı

ra trong ngo
Ma
ˆ
˜
u tên ta
ˆ
˙
p tin ra
ˆ
´
t thu


o
`

ng xuyên su


du
˙
ng trong dòng le
ˆ
˙
nh có chu
´

a ls. Hãy tu

o


ng tu

o
˙

ng
là ba
˙
n muo
ˆ
´

n xem thông tin cu

a mo
ˆ
˙
t thu

mu
˙
c, trong d
¯
ó có chu
´

a mo
ˆ
˙
t so
ˆ
´
lu

o
˙

ng lo
´

n các ta
ˆ

˙
p tin
d
¯
u

các da
˙
ng, ví du
˙
, ta
ˆ
˙
p tin hình a

nh, phim vo
´

i da
˙
ng gif, jpeg, avi, v.v. . . . D
¯
e
ˆ

thu d
¯
u

o

˙

c thông
tin chı

cu

a ta
ˆ
˙
p tin da
˙
ng jpeg, có the
ˆ

dùng câu le
ˆ
˙
nh
kênh giao tác
[user]$ ls *.jpg
Ne
ˆ
´
u trong thu

mu
˙
c có nhie
ˆ

`
u ta
ˆ
˙
p tin, mà tên cu

a chúng là các so
ˆ
´
go
ˆ
`
m bo
ˆ
´
n chu
˜

so
ˆ
´
(thu

mu
˙
c
/proc là mo
ˆ
˙
t ví du

˙
+), thì le
ˆ
˙
nh sau chı

d
¯
u

a ra danh sách các ta
ˆ
˙
p tin có so
ˆ
´
tu
`

0500 d
¯
e
ˆ
´
n 0999:
kênh giao tác
[user]$ ls -l 0[5-9]??
3.7.8 Xóa các ký tu
˙


d
¯
a
˘
˙
c bie
ˆ
˙
t
Sau khi làm xong ta
ˆ
´
t ca

các phép the
ˆ
´
, các ký tu
˙

\, ‘ và " còn la
˙
i trong dòng le
ˆ
˙
nh (chúng
d
¯
u


o
˙

c su


du
˙
ng d
¯
e
ˆ

huy

bo

giá tri
˙
d
¯
a
˘
˙
c bie
ˆ
˙
t cu

a các ký tu

˙

khác) se
˜
bi
˙
xóa he
ˆ
´
t.
3.8 Shell - mo
ˆ
˙
t ngôn ngu
˜

la
ˆ
˙
p trình
Nhu

d
¯
ã nói o


trên, d
¯
e

ˆ

có the
ˆ

xây du
˙

ng ba
ˆ
´
t ky
`
gia

i thua
ˆ
˙
t nào, cu
˜
ng ca
ˆ
`
n có các toán tu


kie
ˆ

m tra

d
¯
ie
ˆ
`
u kie
ˆ
˙
n. He
ˆ
˙
vo

bash ho
ˆ
˜
tro
˙

các toán tu


lu
˙

a cho
˙
n if then else và case, cu
˜
ng

nhu

các toán tu


vòng la
˘
˙
p for, while, until, nho
`

d
¯
ó nó (bash) tro


thành mo
ˆ
˙
t ngôn
ngu
˜

la
ˆ
˙
p trình ma
˙
nh.
3.8.1 Toàn tu



if và test (hoa
˘
˙
c [ ])
Ca
ˆ
´
u trúc cu

a toán tu


d
¯
ie
ˆ
`
u kie
ˆ
˙
n có da
˙
ng thu go
˙
n nhu

sau: if list1 then list2 else list3
fi trong d

¯
ó, list1, list2, và list3 là các chuo
ˆ
˜
i câu le
ˆ
˙
nh, phân cách nhau bo


i da
ˆ
´
u
3.8 Shell - mo
ˆ
˙
t ngôn ngu
˜

la
ˆ
˙
p trình 43
pha

y và ke
ˆ
´
t thúc bo



i mo
ˆ
˙
t da
ˆ
´
u cha
ˆ
´
m pha
ˆ

y hay ký tu
˙

dòng mo
´

i. Ngoài ra, các chuo
ˆ
˜
i này có the
ˆ

d
¯
u


o
˙

c d
¯
u

a vào da
ˆ
´
u ngoa
˘
˙
c nho
˙
n: list. Toán tu


if kie
ˆ

m tra giá tri
˙
d
¯
u

o
˙


c tra

la
˙
i bo


i các câu le
ˆ
˙
nh
tu
`

list1. Ne
ˆ
´
u trong danh sách có vài câu le
ˆ
˙
nh, thì kie
ˆ

m tra giá tri
˙
d
¯
u

o

˙

c tra

la
˙
i bo


i câu le
ˆ
˙
nh
cuo
ˆ
´
i cùng cu

a danh sách. Ne
ˆ
´
u giá tri
˙
này ba
˘
`
ng 0, thì se
˜
thu
˙


c hie
ˆ
˙
n các le
ˆ
˙
nh tu
`

list2; còn
ne
ˆ
´
u giá tri
˙
này khác không, thì se
˜
thu
˙

c hie
ˆ
˙
n nhu
˜

ng le
ˆ
˙

nh tu
`

list3. Giá tri
˙
d
¯
u

o
˙

c tra

la
˙
i bo


i
toán tu


if nhu

va
ˆ
˙
y, trùng vo
´


i giá tri
˙
mà chuo
ˆ
˜
i le
ˆ
˙
nh thu
˙

c hie
ˆ
˙
n (list2 hoa
˘
˙
c list3) d
¯
u

a ra.
Da
˙
ng d
¯
a
ˆ
`

y d
¯
u

cu

a le
ˆ
˙
nh if nhu

sau:
if list then list [ elif list then list ] [ else list ] fi
(o


d
¯
ây da
ˆ
´
u ngoa
˘
˙
c vuông chı

có nghı
˜
a là, nhu
˜


ng gì na
˘
`
m trong nó, ngoa
˘
˙
c vuông, không nha
ˆ
´
t
thie
ˆ
´
t pha

i có). Bie
ˆ

u thu
´

c d
¯
u
´

ng sau if hay elif thu

o

`

ng là câu le
ˆ
˙
nh test, mà có the
ˆ

d
¯
u

o
˙

c
bie
ˆ

u thi
˙
bo


i da
ˆ
´
u ngoa
˘
˙

c vuông [ ]. Le
ˆ
˙
nh test thu
˙

c hie
ˆ
˙
n phép tính mo
ˆ
˙
t bie
ˆ

u thu
´

c nào d
¯
ó, và
tra

la
˙
i giá tri
˙
0, ne
ˆ
´

u bie
ˆ

u thu
´

c là d
¯
úng, và 1 trong tru

o
`

ng ho
˙

p ngu

o
˙

c la
˙
i. Bie
ˆ

u thu
´

c d

¯
u

o
˙

c d
¯
u

a
to
´

i chu

o

ng trình test nhu

mo
ˆ
˙
t tham so
ˆ
´
cu

a chu


o

ng trình. Thay vì gõ
test expression
có the
ˆ

d
¯
u

a bie
ˆ

u thu
´

c expression vào ngoa
˘
˙
c vuông:
[ expression ]
Ca
ˆ
`
n chú ý ra
˘
`
ng, test và [ d
¯

ó là hai tên cu

a cu

a cùng mo
ˆ
˙
t chu

o

ng trình, chu
´

không pha

i
là mo
ˆ
˙
t phép bie
ˆ
´
n hóa tha
ˆ
`
n thông nào d
¯
ó cu


a he
ˆ
˙
vo

bash (chı

là cú pháp cu

a [ d
¯
òi ho

i pha

i có
da
ˆ
´
u d
¯
óng ngoa
˘
˙
c). Và cu
˜
ng ca
ˆ
`
n chú ý ra

˘
`
ng o


cho
ˆ
˜
cu

a test trong ca
ˆ
´
u trúc if có the
ˆ

su


du
˙
ng
ba
ˆ
´
t ky
`
chu

o


ng trình nào. D
¯
e
ˆ

ke
ˆ
´
t thúc mu
˙
c này, chúng ta d
¯
u

a ra ví du
˙
su


du
˙
ng if:
kênh giao tác
if [ -x /usr/bin/unicode_start ] ; then
unicode_start
else
echo "hello world"
fi
Ve

ˆ
`
toán tu


test (hay [ ]) ca
ˆ
`
n d
¯
i sâu ho

n.
3.8.2 Toán tu


test và d
¯
ie
ˆ
`
u kie
ˆ
˙
n cu

a bie
ˆ

u thu

´

c
Bie
ˆ

u thu
´

c d
¯
ie
ˆ
`
u kie
ˆ
˙
n, su


du
˙
ng trong toán tu


test, d
¯
u

o

˙

c xây du
˙

ng trên co

so


kie
ˆ

m tra thuo
ˆ
˙
c
tính ta
ˆ
˙
p tin, so sánh các dòng và các so sánh so
ˆ
´
ho
˙
c thông thu

o
`


ng. Bie
ˆ

u thu
´

c phu
´

c ta
˙
p ho

n
d
¯
u

o
˙

c ta
˙
o ra tu
`

các thao tác d
¯
o


n và kép sau ("nhu
˜

ng viên ga
˙
ch co

so


"):
• -a file
D
¯
úng ne
ˆ
´
u ta
ˆ
˙
p tin có tên file to
ˆ
`
n ta
˙
i.
• -b file
D
¯
úng ne

ˆ
´
u file to
ˆ
`
n ta
˙
i, và là mo
ˆ
˙
t ta
ˆ
˙
p tin thie
ˆ
´
t bi
˙
kho
ˆ
´
i (block device) d
¯
a
˘
˙
c bie
ˆ
˙
t.

• -c file
D
¯
úng ne
ˆ
´
u file to
ˆ
`
n ta
˙
i, và là mo
ˆ
˙
t ta
ˆ
˙
p tin thie
ˆ
´
t bi
˙
ký tu
˙

(charater device) d
¯
a
˘
˙

c bie
ˆ
˙
t.
• -d file
D
¯
úng ne
ˆ
´
u file to
ˆ
`
n ta
˙
i và là mo
ˆ
˙
t thu

mu
˙
c.
• -e file
D
¯
úng ne
ˆ
´
u ta

ˆ
˙
p tin có tên file to
ˆ
`
n ta
˙
i.
44 Bash
• -f file
D
¯
úng ne
ˆ
´
u ta
ˆ
˙
p tin có tên file to
ˆ
`
n ta
˙
i và là mo
ˆ
˙
t ta
ˆ
˙
p tin thông thu


o
`

ng.
• -g file
D
¯
úng ne
ˆ
´
u ta
ˆ
˙
p tin có tên file to
ˆ
`
n ta
˙
i và d
¯
u

o
˙

c d
¯
a
˘

˙
t bit thay d
¯
o
ˆ

i nhóm.
• -h file hay -L file
D
¯
úng ne
ˆ
´
u ta
ˆ
˙
p tin có tên file to
ˆ
`
n ta
˙
i và là liên ke
ˆ
´
t me
ˆ
`
m (liên ke
ˆ
´

t tu

o
˙

ng tru

ng).
• -k file
D
¯
úng ne
ˆ
´
u ta
ˆ
˙
p tin có tên file to
ˆ
`
n ta
˙
i và d
¯
u

o
˙

c d

¯
a
˘
˙
t bit sticky.
• -p file
D
¯
úng ne
ˆ
´
u ta
ˆ
˙
p tin có tên file to
ˆ
`
n ta
˙
i và là tên cu

a mo
ˆ
˙
t o
ˆ
´
ng (kênh FIFO).
• -p file
D

¯
úng ne
ˆ
´
u ta
ˆ
˙
p tin có tên file to
ˆ
`
n ta
˙
i và là tên cu

a mo
ˆ
˙
t o
ˆ
´
ng (kênh FIFO).
• -r file
D
¯
úng ne
ˆ
´
u ta
ˆ
˙

p tin có tên file to
ˆ
`
n ta
˙
i và có quye
ˆ
`
n d
¯
o
˙
c.
• -s file
D
¯
úng ne
ˆ
´
u ta
ˆ
˙
p tin có tên file to
ˆ
`
n ta
˙
i và kích thu

o

´

c lo
´

n ho

n không.
• -t fd
D
¯
úng ne
ˆ
´
u bo
ˆ
˙
mô ta

cu

a ta
ˆ
˙
p tin (fd) mo


và chı

lên terminal.

• -u file
D
¯
úng ne
ˆ
´
u ta
ˆ
˙
p tin có tên file to
ˆ
`
n ta
˙
i và d
¯
u

o
˙

c d
¯
a
˘
˙
t bit thay d
¯
o
ˆ


i ngu

o
`

i dùng.
• -w file
D
¯
úng ne
ˆ
´
u ta
ˆ
˙
p tin có tên file to
ˆ
`
n ta
˙
i và có quye
ˆ
`
n ghi.
• -x file
D
¯
úng ne
ˆ

´
u ta
ˆ
˙
p tin có tên file to
ˆ
`
n ta
˙
i và có quye
ˆ
`
n thu
˙

c thi.
• -0 file
D
¯
úng, ne
ˆ
´
u ta
ˆ
˙
p tin có tên file và chu

so



hu
˜

u cu

a nó là ngu

o
`

i dùng mà ID có hie
ˆ
˙
u lu
˙

c
chı

d
¯
e
ˆ
´
n.
• -G file
D
¯
úng, ne
ˆ

´
u ta
ˆ
˙
p tin có tên file to
ˆ
`
n ta
˙
i và thuo
ˆ
˙
c ve
ˆ
`
nhóm, xác d
¯
i
˙
nh bo


i ID nhóm có hie
ˆ
˙
u
lu
˙

c.

• -S file
D
¯
úng, ne
ˆ
´
u ta
ˆ
˙
p tin có tên file to
ˆ
`
n ta
˙
i và là socket.
• -N file
D
¯
úng, ne
ˆ
´
u ta
ˆ
˙
p tin có tên file to
ˆ
`
n ta
˙
i và thay d

¯
o
ˆ

i tu
`

la
ˆ
`
n d
¯
u

o
˙

c d
¯
o
˙
c cuo
ˆ
´
i cùng.
• file1 -nt file2
D
¯
úng, ne
ˆ

´
u ta
ˆ
˙
p tin file1 có tho
`

i gian su


a d
¯
o
ˆ

i muo
ˆ
˙
n ho

n file2.

×