1. Trang chủ
  2. » Công Nghệ Thông Tin

Chuong 3 Bash ppt

10 151 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 79,53 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

Toˆ´ 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 2

28 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 3

va˘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 4

30 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 5

kê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 6

32 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 7

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

34 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 10

36 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

Ngày đăng: 13/08/2014, 19:22

Xem thêm

w