3 Bash
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ˆ
˙nhseqd¯ã 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-ncu’aecho, 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’nbashhieˆ
˙n tho`’i, caˆ`n su’’du
˙ng câu leˆ
˙nhsource, 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 tinfilenametrong 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’afilename. Neˆ´ufilename
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
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ˆ
˙nhsource 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 tinfilename, thì tra˙ng thái thoát ba˘`ng 0.