Neˆ´u nhu’ moˆ ˙t d¯oa ˙n This is trial version www.adultpdf.com... Chúng ta se˜ không xem xét ma˘ ˙t ky˜ thuaˆ ˙t cu’a This is trial version www.adultpdf.com... Chúng ta se˜ xem xét qua
Trang 1Toˆ´ 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’ashell 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, xemhttp://www.gnu.org/) 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
Trang 228 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ìnhbashkhô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
Trang 3va˘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).
˙ ’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à&.
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ác thao tác && và || lá nhu˜’ng thao tác d¯ieˆ`u khieˆ’n Neˆ´u trên dòng leˆ
˙nh là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˙ngcommand1 || 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
Trang 430 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 ¯ aˆ`u vào/d¯aˆ`u ra tiêu chuaˆ D ’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ˆ´t1vo´’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 lsvo´’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,lsd¯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ˆ
˙nhechovàcat.
˙ nh echo
Câu leˆ
˙nhechodù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
Trang 5kê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).
˙ nh cat
Chúng ta se˜ xem xét leˆ
˙nhcato’’ 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ˆ
˙nhcathu’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ˆ
˙nhcatkhô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ˆ˙nhcat, 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ˆ
˙nhcat 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ˆ
˙nhcat, 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ˆ
˙nhcatse˜ 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ˆ
˙nhls
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
Trang 632 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.txtvu`’a ta
˙o o’’ trên to´’i cu’’a soˆ’ terminal thu´’ hai3có 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 tinls.txtnhu’ 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
Trang 7Trong 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ˆ
˙nhcat, 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ˆ
˙nhgrep, 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ˆ
˙nhgrep d¯u’o
˙’c chuyeˆ’n to´’i d¯aˆ`u vào cu’a leˆ
˙nhwc -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
Trang 834 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 ¯ aˆ`u lo D
˙ 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’
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
Trang 9˙’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).
˙ 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ˆ
˙nhsetd¯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’ng3.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ònvalue- 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 setkhi 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ˆ
˙nhset(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
Trang 1036 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úsethay 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ˆ
˙nhset,
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ên4trong 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