3 Bash
3.6 Tham bieˆ´n và các bieˆ´n soˆ ´ Môi tru’o`’ng cu’a heˆ
˙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 ¯ aˆ`u loD ˙c
Ví du
˙ cuoˆ´ i cùng o’’trên (ví du
˙ vo´’i câu leˆ
˙nhgrep) 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êncat, more, less, wc, cmp, diff, và ca’ nhu˜’ng câu leˆ
˙nh có trong ba’ng3.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ˆ
˙nhtr abc ABCroˆ`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 ¯ iD
˙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ˆ
˙nhtee, 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ˆ
˙nhtee 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’ ˙ 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
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).