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 8 doc

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

3.8 Shell - mo
ˆ
˙
t ngôn ngu
˜

la
ˆ
˙
p trình 45
• file1 -ot file2
D
¯
úng, ne
ˆ
´
u ta
ˆ
˙
p tin file1 "già" ho

n file1 (tru

o
`

ng ho
˙

p ngu


o
˙

c la
˙
i cu

a tru

o
`

ng ho
˙

p trên).
• file1 -ef file2
D
¯
úng, ne
ˆ
´
u ta
ˆ
˙
p tin file1 và file2 có cùng mo
ˆ
˙
t so
ˆ

´
thie
ˆ
´
t bi
˙
và chı

so
ˆ
´
mô ta

inode.
• -o optname
D
¯
úng, ne
ˆ
´
u tùy cho
˙
n optname cu

a he
ˆ
˙
vo

d

¯
u

o
˙

c kích hoa
˙
t. Chi tie
ˆ
´
t xin xem trên trang
man bash.
• -z string
D
¯
úng, ne
ˆ
´
u d
¯
o
ˆ
˙
dài cu

a chuo
ˆ
˜
i string ba

˘
`
ng không.
• -n string
D
¯
úng, ne
ˆ
´
u d
¯
o
ˆ
˙
dài cu

a chuo
ˆ
˜
i khác không.
• string1 == string2
D
¯
úng, ne
ˆ
´
u hai chuo
ˆ
˜
i trùng nhau. Có the

ˆ

thay hai == ba
˘
`
ng mo
ˆ
˙
t =.
• string1 !== string2
D
¯
úng, ne
ˆ
´
u hai chuo
ˆ
˜
i không trùng nhau.
• string1 < string2
D
¯
úng, ne
ˆ
´
u chuo
ˆ
˜
i string1, theo tu
`


d
¯
ie
ˆ

n, d
¯
u
´

ng tru

o
´

c chuo
ˆ
˜
i string2 (d
¯
o
ˆ
´
i vo
´

i ngôn
ngu
˜


hie
ˆ
˙
n tho
`

i).
• string1 > string2
D
¯
úng, ne
ˆ
´
u chuo
ˆ
˜
i string1, theo tu
`

d
¯
ie
ˆ

n, d
¯
u
´


ng sau chuo
ˆ
˜
i string2 (d
¯
o
ˆ
´
i vo
´

i ngôn ngu
˜

hie
ˆ
˙
n tho
`

i).
• arg1 OP arg2
O


d
¯
ây OP là mo
ˆ
˙

t trong các phép so sánh so
ˆ
´
ho
˙
c: -eq (ba
˘
`
ng), -ne (khác, không ba
˘
`
ng),
-lt (nho

ho

n), -le (nho

ho

n hoa
˘
˙
c ba
˘
`
ng), -gt (lo
´

n ho


n), -ge (lo
´

n ho

n hoa
˘
˙
c ba
˘
`
ng).
O


cho
ˆ
˜
các tham so
ˆ
´
arg1 và arg2 có the
ˆ

su


du
˙

ng các so
ˆ
´
nguyên (âm hoa
˘
˙
c du

o

ng).
Tu
`

các bie
ˆ

u thu
´

c d
¯
ie
ˆ
`
u kie
ˆ
˙
n co


ba

n này có the
ˆ

xây du
˙

ng các bie
ˆ

u thu
´

c phu
´

c ta
˙
p theo ý
muo
ˆ
´
n nho
`

các phép lôgíc thông thu

o
`


ng PHU

D
¯
I
˙
NH, VÀ (co
ˆ
˙
ng) và HOA
˘
˙
C:
• !(expression)
Phép phu

d
¯
i
˙
nh. D
¯
úng, ne
ˆ
´
u bie
ˆ

u thu

´

c sai.
• expression1 -a expression2
Phép co
ˆ
˙
ng lôgic AND. D
¯
úng ne
ˆ
´
u ca

hai bie
ˆ

u thu
´

c d
¯
e
ˆ
`
u d
¯
úng.
• expression1 -o expression2
Phép lôgíc hoa

˘
˙
c OR. D
¯
úng ne
ˆ
´
u mo
ˆ
˙
t trong hai bie
ˆ

u thu
´

c d
¯
úng.
46 Bash
3.8.3 Toán tu


case
Da
˙
ng cu

a toán tu



case nhu

sau:
case word in [ [(] pattern [ | pattern ] ) list ;; ] + esac
Câu le
ˆ
˙
nh case d
¯
a
ˆ
`
u tiên khai trie
ˆ

n tu
`

word, và so sánh nó (word) vo
´

i mo
ˆ
˜
i tu
`

trong ma
ˆ

˜
u
pattern theo thu
´

tu
˙

. Sau khi tìm tha
ˆ
´
y su
˙

trùng nhau d
¯
a
ˆ
`
u tiên thì du
`

ng vie
ˆ
˙
c so sánh la
˙
i, và
thu
˙


c hie
ˆ
˙
n danh sách list các câu le
ˆ
˙
nh d
¯
u
´

ng sau ma
ˆ
˜
u d
¯
ã tìm tha
ˆ
´
y. Giá tri
˙
tra

la
˙
i bo


i toán tu



này, ba
˘
`
ng 0, ne
ˆ
´
u không tìm tha
ˆ
´
y su
˙

trùng nhau nào. Trong tru

o
`

ng ho
˙

p ngu

o
˙

c la
˙
i, tra


la
˙
i giá tri
˙
mà câu le
ˆ
˙
nh cuo
ˆ
´
i cùng trong danh sách list d
¯
u

a ra. Ví du
˙
su


du
˙
ng toán tu


case sau la
ˆ
´
y tu
`


script /etc/rc.d/rc.sysinit (FreeBSD-style):
kênh giao tác
case "$UTC" in
yes|true)
CLOCKFLAGS="$CLOCKFLAGS -u";
CLOCKDEF="$CLOCKDEF (utc)";
;;
no|false)
CLOCKFLAGS="$CLOCKFLAGS localtime";
CLOCKDEF="$CLOCKDEF (localtime)";
;;
esac
Ne
ˆ
´
u bie
ˆ
´
n so
ˆ
´
(UTC) nha
ˆ
˙
n giá tri
˙
yes hoa
˘
˙

c true, thì se
˜
thu
˙

c hie
ˆ
˙
n ca
˘
˙
p le
ˆ
˙
nh thu
´

nha
ˆ
´
t, nha
ˆ
˙
n
giá tri
˙
no hoa
˘
˙
c false - ca

˘
˙
p thu
´

hai.
3.8.4 Toán tu


select
Toán tu


select cho phép to
ˆ

chu
´

c ho
ˆ
˙
i thoa
˙
i vo
´

i ngu

o

`

i dùng. Nó có da
˙
ng sau:
select name [ in word; ] do list; done
Lúc d
¯
a
ˆ
`
u tu
`

ma
ˆ
˜
u word hình thành mo
ˆ
˙
t danh sách nhu
˜

ng tu
`

tu

o


ng u
´

ng vo
´

i ma
ˆ
˜
u này. Ta
ˆ
˙
p
ho
˙

p nhu
˜

ng tu
`

này d
¯
u

o
˙

c d

¯
u

a vào kênh thông báo lo
ˆ
˜
i tiêu chua
ˆ

n, ho

n nu
˜

a mo
ˆ
˜
i tu
`

d
¯
u

o
˙

c d
¯
i kèm

vo
´

i mo
ˆ
˙
t so
ˆ
´
thu
´

tu
˙

. Ne
ˆ
´
u ma
ˆ
˜
u word bi
˙
bo

qua (không có trong toán tu


select), thì se
˜

d
¯
u

a vào
các tham bie
ˆ
´
n vi
˙
trí (xem trên) theo mo
ˆ
˙
t cách tu

o

ng tu
˙

. Sau d
¯
ó, da
ˆ
´
u nha
˘
´
c PS3 d
¯

u

o
˙

c d
¯
u

a ra,
và he
ˆ
˙
vo

cho
`

chuo
ˆ
˜
i nha
ˆ
˙
p vào trên d
¯
a
ˆ
`
u vào tiêu chua

ˆ

n. Ne
ˆ
´
u chuo
ˆ
˜
i nha
ˆ
˙
p vào có chu
´

a so
ˆ
´
, tu

o

ng
u
´

ng vo
´

i mo
ˆ

˙
t trong các so
ˆ
´
d
¯
ã hie
ˆ
˙
n ra, thì bie
ˆ
´
n name se
˜
d
¯
u

o
˙

c gán giá tri
˙
ba
˘
`
ng tu
`

d

¯
i kèm vo
´

i so
ˆ
´
này. Ne
ˆ
´
u nha
ˆ
˙
p vào mo
ˆ
˙
t dòng ro
ˆ
˜
ng, thì so
ˆ
´
và tu
`

se
˜
d
¯
u


o
˙

c hie
ˆ
˙
n ra them mo
ˆ
˙
t la
ˆ
`
n nu
˜

a. Ne
ˆ
´
u nha
ˆ
˙
p
vào ba
ˆ
´
t ky
`
mo
ˆ

˙
t giá tri
˙
nào khác, thì bie
ˆ
´
n name se
˜
nha
ˆ
˙
n giá tri
˙
ba
˘
`
ng không. Chuo
ˆ
˜
i mà ngu

o
`

i
dùng nha
ˆ
˙
p vào, d
¯

u

o
˙

c ghi la
˙
i trong bie
ˆ
´
n REPLY. Danh sách le
ˆ
˙
nh list d
¯
u

o
˙

c thu
˙

c hie
ˆ
˙
n vo
´

i giá

tri
˙
bie
ˆ
´
n name d
¯
ã cho
˙
n. Sau d
¯
ây là mo
ˆ
˙
t script nho

(xin hãy gõ không da
ˆ
´
u ne
ˆ
´
u console cu

a ba
˙
n
chu

a ho

ˆ
˜
tro
˙

vie
ˆ
˙
c hie
ˆ

n thi
˙
Tie
ˆ
´
ng Vie
ˆ
˙
t):
kênh giao tác
#!/bin/sh
echo "Ba
˙
n thích dùng OS nào?"
select var in "Linux" "Gnu Hurd" "Free BSD" "MacOSX" "Solaris" "QNX" "Other"; do
break
done
echo "Ba
˙

n d
¯
ã cho
˙
n $var"
3.8 Shell - mo
ˆ
˙
t ngôn ngu
˜

la
ˆ
˙
p trình 47
Ghi d
¯
oa
˙
n trên vào mo
ˆ
˙
t ta
ˆ
˙
p tin (ví du
˙
, select.sh), thay d
¯
o

ˆ

i d
¯
e
ˆ

ta
ˆ
˙
p tin thành kha

thi (ví
du
˙
, chmod 755 select.sh), và cha
˙
y (./select.sh). Trên màn hình se
˜
hie
ˆ
˙
n ra câu
ho

i sau:
kênh giao tác
Ba
˙
n thích dùng OS nào?

1) Linux 3) Free BSD 5) Solaris 7) Other
2) Gnu Hurd 4) MacOSX 6) QNX
#?
Hãy nha
ˆ
´
n mo
ˆ
˙
t trong 7 so
ˆ
´
d
¯
u

a ra (tu
`

1 d
¯
e
ˆ
´
n 7). Ne
ˆ
´
u ba
˙
n nha

ˆ
˙
p 4 (nha
ˆ
´
n ca

<Enter>), thì se
˜
tha
ˆ
´
y thông báo sau:
kênh giao tác
Ba
˙
n d
¯
ã cho
˙
n MacOSX
3.8.5 Toán tu


for
Toán tu


for làm vie
ˆ

˙
c có khác mo
ˆ
˙
t chút so vo
´

i for trong cácngôn ngu
˜

la
ˆ
˙
p trình thông thu

o
`

ng.
Thay vì ta
˘
ng hoa
˘
˙
c gia

m giá tri
˙
cu


a mo
ˆ
˙
t bie
ˆ
´
n so
ˆ
´
nào d
¯
ó (lên hoa
˘
˙
c xuo
ˆ
´
ng) mo
ˆ
˙
t d
¯
o

n vi
˙
sau mo
ˆ
˜
i

vòng la
˘
˙
p, thì nó gán giá tri
˙
tie
ˆ
´
p theo trong danh sách tu
`

d
¯
u

a sa
˘
˜
n cho bie
ˆ
´
n d
¯
ó trong
mo
ˆ
˜
i vòng la
˘
˙

p. Nói chung ca
ˆ
´
u trúc có da
˙
ng sau:
for name in words do list done
Quy lua
ˆ
˙
t xây du
˙

ng danh sách le
ˆ
˙
nh (list) gio
ˆ
´
ng trong toán tu


if. Ví du
˙
. Script sau ta
˙
o
các ta
ˆ
˙

p tin fu1, fu2, và fu3:
kênh giao tác
for a in 1 2 3 ; do
touch fu$a
done
Có the
ˆ

gõ ba dòng này trên mo
ˆ
˙
t dòng le
ˆ
˙
nh, ke
ˆ
´
t qua

thu d
¯
u

o
˙

c tu

o


ng tu
˙

vo
´

i script. Da
˙
ng
to
ˆ

ng quát cu

a toán tu


for nhu

sau:
for name [ in word; ] do list ; done
D
¯
a
ˆ
`
u tiên cu
˜
ng xa


y ra su
˙

khai trie
ˆ

n tu
`

word theo quy lua
ˆ
˙
t khai trie
ˆ

n bie
ˆ

u thu
´

c (xem trên).
Sau d
¯
ó bie
ˆ
´
n name la
ˆ
`

n lu

o
˙

t d
¯
u

o
˙

c gán các giá tri
˙
thu d
¯
u

o
˙

c tu
`

su
˙

khai trie
ˆ
`

n này, và thu
˙

c hie
ˆ
˙
n
danh sách le
ˆ
˙
nh list trong mo
ˆ
˜
i la
ˆ
`
n nhu

va
ˆ
˙
y. Ne
ˆ
´
u không có "in word", thì danh sách le
ˆ
˙
nh
list d
¯

u

o
˙

c thu
˙

c hie
ˆ
˙
n mo
ˆ
˙
t la
ˆ
`
n cho mo
ˆ
˜
i tham bie
ˆ
´
n vi
˙
trí d
¯
ã d
¯
u


a ra. Trên Linux có
chu

o

ng trình seq, tie
ˆ
´
p nha
ˆ
˙
n hai so
ˆ
´
nguyên làm tham so
ˆ
´
, và d
¯
u

a ra chuo
ˆ
˜
i ta
ˆ
´
t ca


các so
ˆ
´
na
˘
`
m
giu
˜

a hai so
ˆ
´
này (co
ˆ
˙
ng thêm ca

chúng). Nho
`

câu le
ˆ
˙
nh này có the
ˆ

su



du
˙
ng for cu

a bash làm
vie
ˆ
˙
c nhu

toán tu


for trong các ngôn ngu
˜

la
ˆ
˙
p trình thông thu

o
`

ng. D
¯
e
ˆ

làm d

¯
u

o
˙

c d
¯
ie
ˆ
`
u này chı

ca
ˆ
`
n vie
ˆ
´
t vòng la
˘
˙
p for nhu

sau:
kênh giao tác
for a in $( seq 1 6 ) ; do
cat fu$a
done
Câu le

ˆ
˙
nh (script) này d
¯
u

a ra màn hình no
ˆ
˙
i dung cu

a 10 ta
ˆ
˙
p tin (ne
ˆ
´
u có): "fu1", , "fu10".
48 Bash
3.8.6 Toán tu


while và until
Toán tu


while làm vie
ˆ
˙
c tu


o

ng tu
˙

nhu

if, nhu

ng vòng la
˘
˙
p các câu le
ˆ
˙
nh trong list2 chı

thu
˙

c hie
ˆ
˙
n khi d
¯
ie
ˆ
`
u kie

ˆ
˙
n còn d
¯
úng, và se
˜
ngu
`

ng khi d
¯
ie
ˆ
`
u kie
ˆ
˙
n không tho

a mãn. Ca
ˆ
´
u trúc có
da
˙
ng nhu

sau:
while list1 do list2 done
Ví du

˙
:
kênh giao tác
while [ -d directory ] ; do
ls -l directory >> logfile
echo SEPARATOR >> logfile
sleep 60
done
Chu

o

ng trình (script) trên se
˜
theo dõi và ghi la
˙
i no
ˆ
˙
i dung cu

a thu

mu
˙
c directory theo
tu
`

ng phút ne

ˆ
´
u thu

mu
˙
c còn to
ˆ
`
n ta
˙
i. Toán tu


until tu

o

ng tu
˙

nhu

toán tu


while:
until list1 do list2 done
D
¯

ie
ˆ

m khác bie
ˆ
˙
t na
˘
`
m o


cho
ˆ
˜
, su


du
˙
ng giá tri
˙
phu

d
¯
i
˙
nh cu


a d
¯
ie
ˆ
`
u kie
ˆ
˙
n list1, tu
´

c là list2
thu
˙

c hie
ˆ
˙
n, ne
ˆ
´
u câu le
ˆ
˙
nh cuo
ˆ
´
i cùng trong danh sách list1 tra

la

˙
i tra
˙
ng thái thoát ra khác
không.
3.8.7 Các hàm so
ˆ
´
Cú pháp He
ˆ
˙
vo

bash cho phép ngu

o
`

i dùng ta
˙
o các hàm so
ˆ
´
cho mình. Hàm so
ˆ
´
làm vie
ˆ
˙
c và

d
¯
u

o
˙

c su


du
˙
ng gio
ˆ
´
ng nhu

các câu le
ˆ
˙
nh thông thu

o
`

ng cu

a he
ˆ
˙

vo

, tu
´

c là chúng ta có the
ˆ

tu
˙

ta
˙
o
các câu le
ˆ
˙
nh mo
´

i. Hàm so
ˆ
´
có ca
ˆ
´
u trúc nhu

sau:
function name () { list }

Ho

n nu
˜

a tu
`

function không nha
ˆ
´
t thie
ˆ
´
t pha

i có, name xác d
¯
i
˙
nh tên cu

a hàm (dùng d
¯
e
ˆ

go
˙
i hàm), còn pha

ˆ
`
n thâm cu

a hàm so
ˆ
´
ta
˙
o bo


i danh sách các câu le
ˆ
˙
nh list, na
˘
`
m giu
˜

a { và }.
Các câu le
ˆ
˙
nh này se
˜
d
¯
u


o
˙

c thu
˙

c hie
ˆ
˙
n mo
ˆ
˜
i khi tên name d
¯
u

o
˙

c go
˙
i (gio
ˆ
´
ng nhu

mo
ˆ
˙

t le
ˆ
˙
nh thông
thu

o
`

ng). Ca
ˆ
`
n chú ý ra
˘
`
ng hàm có the
ˆ

là d
¯
e
ˆ
˙
qui, tu
´

c là go
˙
i hàm so
ˆ

´
o


ngay trong pha
ˆ
`
n thân cu

a
nó. Hàm so
ˆ
´
thu
˙

c hie
ˆ
˙
n trong pha
˙
m vi he
ˆ
˙
vo

hie
ˆ
˙
n tho

`

i: không có tie
ˆ
´
n trình mo
´

i nào d
¯
u

o
˙

c cha
˙
y
khi biên di
˙
ch hàm so
ˆ
´
(khác vo
´

i vie
ˆ
˙
c cha

˙
y script).
3.8.8 Tham so
ˆ
´
Khi hàm so
ˆ
´
d
¯
u

o
˙

c go
˙
i d
¯
e
ˆ

thu
˙

c hie
ˆ
˙
n, các tham so
ˆ

´
cu

a hàm se
˜
tro


thành các tham bie
ˆ
´
n vi
˙
trí
(positional parameters, xem trên) trong tho
`

i gian thu
˙

c hie
ˆ
˙
n hàm này. Chúng d
¯
u

o
˙


c d
¯
a
˘
˙
t các tên
nhu

$n, trong d
¯
ó n là so
ˆ
´
cu

a tham so
ˆ
´
mà chúng ta muo
ˆ
´
n su


du
˙
ng. Vie
ˆ
˙
c d

¯
ánh so
ˆ
´
ba
˘
´
t d
¯
a
ˆ
`
u tu
`

1, nhu

va
ˆ
˙
y $1 là tham so
ˆ
´
d
¯
a
ˆ
`
u tiên. Cu
˜

ng có the
ˆ

su


du
˙
ng ta
ˆ
´
t ca

các tham so
ˆ
´
mo
ˆ
˙
t lúc nho
`

$*,
và d
¯
u

a ra so
ˆ
´

thu
´

tu
˙

cu

a tham so
ˆ
´
nho
`

$# Tham so
ˆ
´
vi
˙
trí so
ˆ
´
0 không thay d
¯
o
ˆ

i. Trong khi thu
˙


c
hie
ˆ
˙
n ne
ˆ
´
u ga
˘
˙
p câu le
ˆ
˙
nh no
ˆ
˙
i trú return (trong pha
ˆ
`
n thâm cu

a hàm), thì hàm so
ˆ
´
se
˜
bi
˙
du
`


ng la
˙
i
và quye
ˆ
`
n d
¯
ie
ˆ
`
u khie
ˆ

n d
¯
u

o
˙

c trao cho câu le
ˆ
˙
nh d
¯
u
´


ng sau hàm. Khi thu
˙

c hie
ˆ
˙
n xong hàm so
ˆ
´
, các
tham bie
ˆ
´
n vi
˙
trí và tham bie
ˆ
´
n d
¯
a
ˆ
˙
c bie
ˆ
˙
t # se
˜
d
¯

u

o
˙
c tra

la
˙
i các giá tri
˙
mà chúng có tru

o
´

c khi cha
˙
y
hàm. Bie
ˆ
´
n no
ˆ
˙
i bo
ˆ
˙
(local)
Ne
ˆ

´
u muo
ˆ
´
n ta
˙
o mo
ˆ
˙
t tham bie
ˆ
´
n d
¯
i
˙
a phu

o

ng, có the
ˆ

su


du
˙
ng tu
`


khóa local. Cú pháp d
¯
u

a ra
bie
ˆ
´
n d
¯
i
˙
a phu

o

ng gio
ˆ
´
ng he
ˆ
˙
t các tham bie
ˆ
´
n khác, chı

có d
¯

ie
ˆ
`
u ca
ˆ
`
n d
¯
u
´

ng sau tu
`

khóa local:
3.9 Script cu

a he
ˆ
˙
vo

và le
ˆ
˙
nh source 49
local name=value. Du

o
´


i d
¯
ây là mo
ˆ
˙
t ví du
˙
hàm so
ˆ
´
, thu
˙

c hie
ˆ
˙
n công vie
ˆ
˙
c cu

a le
ˆ
˙
nh seq d
¯
ã
nha
˘

´
c d
¯
e
ˆ
´
n o


trên:
kênh giao tác
seq()
{
local I=$1;
while [ $2 != $I ]; do
{
echo -n "$I ";
I=$(( $I + 1 ))
};
done;
echo $2
}
Ca
ˆ
`
n chú ý d
¯
e
ˆ
´

n tùy cho
˙
n -n cu

a echo, nó (tùy cho
˙
n) hu

y bo

vie
ˆ
˙
c ta
˙
o dòng mo
´

i. Ma
˘
˙
c dù
tùy cho
˙
n này không có nhie
ˆ
`
u ý nghı
˜
a vo

´

i mu
˙
c d
¯
ích chúng ta muo
ˆ
´
n o


d
¯
ây, nhu

ng se
˜
ra
ˆ
´
t có ích
trong các hàm so
ˆ
´
vo
´

i mu
˙

c d
¯
ích khác. Hàm so
ˆ
´
tính giai thu
`

a fact Mo
ˆ
˙
t ví du
˙
khác:
kênh giao tác
fact()
{
if [ $1 = 0 ]; then
echo 1;
else
{
echo $(( $1 * $( fact $(( $1 1 )) ) ))
};
fi
}
D
¯
ây là hàm so
ˆ
´

giai thu
`

a, mo
ˆ
˙
t ví du
˙
cu

a hàm d
¯
e
ˆ
˙
qui. Hãy chú ý d
¯
e
ˆ
´
n su
˙

khai trie
ˆ

n so
ˆ
´
ho

˙
c,
và phép the
ˆ
´
các câu le
ˆ
˙
nh.
3.9 Script cu

a he
ˆ
˙
vo

và le
ˆ
˙
nh source
Script cu

a he
ˆ
˙
vo

chı

là các ta

ˆ
˙
p tin có chu
´

a chuo
ˆ
˜
i le
ˆ
˙
nh. Tu

o

ng tu
˙

hàm so
ˆ
´
script có the
ˆ

d
¯
u

o
˙


c
thu
˙

c hie
ˆ
˙
n nhu

mo
ˆ
˙
t câu le
ˆ
˙
nh. Cú pháp truy ca
ˆ
˙
p d
¯
e
ˆ
´
n các tham so
ˆ
´
cu
˜
ng nhu


hàm so
ˆ
´
. Trong các
tru

o
`

ng ho
˙

p thông thu

o
`

ng khi cha
˙
y script se
˜
có mo
ˆ
˙
t tie
ˆ
´
n trình mo
´


i d
¯
u

o
˙

c cha
˙
y. D
¯
e
ˆ

có the
ˆ

thu
˙

c
hie
ˆ
˙
n script o


trong ba


n bash hie
ˆ
˙
n tho
`

i, ca
ˆ
`
n su


du
˙
ng câu le
ˆ
˙
nh source, hay mo
ˆ
˙
t da
ˆ
´
u cha
ˆ
´
m "."
(d
¯
o

ˆ
`
ng nghı
˜
a cu

a source). Trong tru

o
`

ng ho
˙

p này script chı

d
¯
o

n gia

n là mo
ˆ
˙
t tham so
ˆ
´
cu


a le
ˆ
˙
nh
nói trên. Câu le
ˆ
˙
nh se
˜
có da
˙
ng:
source filename [arguments]
Câu le
ˆ
˙
nh này d
¯
o
˙
c và thu
˙

c hie
ˆ
˙
n các câu le
ˆ
˙
nh có trong ta

ˆ
˙
p tin filename trong môi tru

o
`

ng
hie
ˆ
˙
n tho
`

i, và tra

la
˙
i giá tri
˙
, xác d
¯
i
˙
nh bo


i câu le
ˆ
˙

nh cuo
ˆ
´
i cùng cu

a filename. Ne
ˆ
´
u filename
không chu
´

a da
ˆ
´
u ga
˙
ch chéo, thì d
¯
u

o
`

ng da
ˆ
˜
n, lie
ˆ
˙

t kê trong bie
ˆ
´
n so
ˆ
´
PATH, se
˜
d
¯
u

o
˙

c su


du
˙
ng d
¯
e
ˆ

tìm ta
ˆ
˙
p tin có tên filename. Ta
ˆ

˙
p tin này không nha
ˆ
´
t thie
ˆ
´
t pha

i kha

thi (không nha
ˆ
´
t thie
ˆ
´
t
pha

i có bit x). Ne
ˆ
´
u trong thu

mu
˙
c, lie
ˆ
˙

t kê trong PATH, không tìm tha
ˆ
´
y ta
ˆ
˙
p tin ca
ˆ
`
n, thì se
˜
tìm
nó (ta
ˆ
˙
p tin) trong thu

mu
˙
c hie
ˆ
˙
n tho
`

i. Ne
ˆ
´
u có các tham so
ˆ

´
(d
¯
u

a ra arguments, xem d
¯
i
˙
nh da
˙
ng
50 Bash
câu le
ˆ
˙
nh o


trên), thì trong tho
`

i gian thu
˙

c hie
ˆ
˙
n script chúng se
˜

thành các tham bie
ˆ
´
n vi
˙
trí. Ne
ˆ
´
u
không có tham so
ˆ
´
, thì tham bie
ˆ
´
n vi
˙
trí không thay d
¯
o
ˆ

i. Giá tri
˙
(tra
˙
ng thái), mà le
ˆ
˙
nh source

tra

la
˙
i, trùng vo
´

i giá tri
˙
, tra

la
˙
i bo


i câu le
ˆ
˙
nh cuo
ˆ
´
i cùng trong script. Ne
ˆ
´
u không câu le
ˆ
˙
nh nào
d

¯
u

o
˙

c thu
˙

c hie
ˆ
˙
n, hoa
˘
˙
c không tìm tha
ˆ
´
y ta
ˆ
˙
p tin filename, thì tra
˙
ng thái thoát ba
˘
`
ng 0.
3.10 Câu le
ˆ
˙

nh sh
Ba
˙
n luôn luôn có the
ˆ

cha
˙
y mo
ˆ
˙
t ba

n sao cu

a he
ˆ
˙
vo

bash nho
`

câu le
ˆ
˙
nh bash hay sh. Khi này
có the
ˆ


ba
˘
´
t ba

n sao này cha
˙
y mo
ˆ
˙
t script nào d
¯
ó, ne
ˆ
´
u d
¯
u

a tên cu

a script nhu

mo
ˆ
˙
t tham so
ˆ
´
cho

le
ˆ
˙
nh bash. Nhu

va
ˆ
˙
y, d
¯
e
ˆ

thu
˙

c hie
ˆ
˙
n script myscript ca
ˆ
`
n d
¯
u

a câu le
ˆ
˙
nh "sh myscript".

Ne
ˆ
´
u xem no
ˆ
˙
i dung cu

a mo
ˆ
˙
t ta
ˆ
˙
p tin script nào d
¯
ó (nhu
˜

ng ta
ˆ
˙
p tin nhu

va
ˆ
˙
y có ra
ˆ
´

t nhie
ˆ
`
u trên
he
ˆ
˙
tho
ˆ
´
ng), ba
˙
n se
˜
tha
ˆ
´
y dòng d
¯
a
ˆ
`
u tiên có da
˙
ng sau: #!/bin/sh. D
¯
ie
ˆ
`
u này có nghı

˜
a là, khi
chúng ta go
˙
i script d
¯
e
ˆ

thu
˙

c hie
ˆ
˙
n nhu

mo
ˆ
˙
t le
ˆ
˙
nh thông thu

o
`

ng, thì /bin/sh se
˜

giúp chúng ta
"thu xe
ˆ
´
p" mo
˙
i thu
´

. Có the
ˆ

thay the
ˆ
´
dòng này bo


i liên ke
ˆ
´
t d
¯
e
ˆ
´
n ba
ˆ
´
t ky

`
mo
ˆ
˙
t chu

o

ng trình nào,
mà se
˜
d
¯
o
˙
c ta
ˆ
˙
p tin và thu
˙

c hie
ˆ
˙
n các câu le
ˆ
˙
nh tu

o


ng u
´

ng. Ví du
˙
, script trên ngôn ngu
˜

Perl ba
˘
´
t
d
¯
a
ˆ
`
u bo


i dòng có da
˙
ng !/bin/perl. Mo
ˆ
˙
t chú ý khác là ký tu
˙

# dùng d

¯
e
ˆ

vie
ˆ
´
t lo
`

i chú thích
trong script. Ta
ˆ
´
t ca

nhu
˜

ng gì d
¯
u
´

ng sau ký tu
˙

này d
¯
e

ˆ
´
n cuo
ˆ
´
i dòng se
˜
d
¯
u

o
˙

c coi là chú thích và bi
˙
bash bo

qua (tu
´

c là he
ˆ
˙
vo

se
˜
không xem dòng này là câu le
ˆ

˙
nh). Ne
ˆ
´
u ba
˙
n muo
ˆ
´
n kie
ˆ

m chu
´

ng
la
˙
i tác du
˙
ng cu

a ký tu
˙

này, thì hãy nha
ˆ
˙
p vào dòng le
ˆ

˙
nh mo
ˆ
˙
t câu le
ˆ
˙
nh ba
ˆ
´
t ky
`
, và d
¯
a
˘
˙
t tru

o
´

c nó
(câu le
ˆ
˙
nh) ký tu
˙

#, ví du

˙
"# ls", ba
˙
n se
˜
tha
ˆ
´
y ra
˘
`
ng he
ˆ
˙
vo

bo


qua câu le
ˆ
˙
nh này.
Chúng ta se
˜
du
`

ng bài ho
˙

c nga
˘
´
n go
˙
n ve
ˆ
`
bash ta
˙
i d
¯
ây. Ta
ˆ
´
t nhiên, còn ra
ˆ
´
t nhie
ˆ
`
u va
ˆ
´
n d
¯
e
ˆ
`
quan

tro
˙
ng ca
ˆ
`
n xem xét nhu

ng na
˘
`
m ngoài pha
˙
m vi cu

a bài ho
˙
c, ví du
˙
, qua

n lý tie
ˆ
´
n trình, li
˙
ch su


câu
le

ˆ
˙
nh, mô ta

ve
ˆ
`
thu

vie
ˆ
˙
n readline, tín hie
ˆ
˙
u, v.v. . . Các ba
˙
n se
˜
tìm tha
ˆ
´
y thông tin ca
ˆ
`
n thie
ˆ
´
t trong
các cuo

ˆ
´
n hu

o
´

ng da
ˆ
˜
n khác hoa
˘
˙
c trên trang man bash.

×