Thao tác && và ||

Một phần của tài liệu Linux cho người mới dùng (Trang 33)

3 Bash

3.3.3Thao 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

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ˆ (adsbygoogle = window.adsbygoogle || []).push({});

˙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 (adsbygoogle = window.adsbygoogle || []).push({});

˙’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ˆ (adsbygoogle = window.adsbygoogle || []).push({});

˙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. 3.4.2 Leˆ ˙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:

1gioˆ´ ng liên keˆ´t hóa ho ˙c

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 31

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).

3.4.3 Leˆ

˙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ˆ (adsbygoogle = window.adsbygoogle || []).push({});

˙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ˆ (adsbygoogle = window.adsbygoogle || []).push({});

˙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. (adsbygoogle = window.adsbygoogle || []).push({});

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

2thu’ mu ˙c hieˆ

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ˆ (adsbygoogle = window.adsbygoogle || []).push({});

˙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ˆ (adsbygoogle = window.adsbygoogle || []).push({});

˙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 (adsbygoogle = window.adsbygoogle || []).push({});

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

3ba

˙n caˆ`n dùng toˆ’ ho

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 33

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˘ (adsbygoogle = window.adsbygoogle || []).push({});

˙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 (adsbygoogle = window.adsbygoogle || []).push({});

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ˆ (adsbygoogle = window.adsbygoogle || []).push({});

˙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

Một phần của tài liệu Linux cho người mới dùng (Trang 33)