Toàn tu’’ if và test (hoa˘

Một phần của tài liệu Tài liệu Linux cho người dùng doc (Trang 46 - 47)

3 Bash

3.8.1Toàn tu’’ if và test (hoa˘

˙’ ta˙o maˆ˜u Ký tu

˙’ Quy luaˆ˙t thay theˆ´

* Tu’o’ng u´’ng vo´’i baˆ´t ky` dòng ký tu

˙’ nào, keˆ’ ca’ dòng roˆ˜ng. Ví du˙,v*.txt se˜ d¯u’o

˙’c thay theˆ´ bo’’ivnoss.txt, vnlinux.txtvàvntex.txt

(neˆ´u các taˆ

˙p tin này toˆ`n ta

˙i), và *.png se˜ tu’o’ng u´’ng taˆ´t ca’ các taˆ

˙p tin có phaˆ`n mo’’ roˆ

˙ng png (taˆ

˙p tin d¯oˆ` ho

˙a hai chieˆ`u). ? Tu’o’ng u´’ng baˆ´t ký moˆ

˙t ký tu˙’ d¯o’n nào. Ví du

˙, maˆ˜u

file?.txt se˜ d¯u’o

˙’c thaytheˆ´ bo’’i các tên teˆ

˙p sau

file1.txt, file2.txt, file3.txt, và filea.txt

(neˆ´u chúng toˆ`n ta

˙i), nhu’ngfile23.txtthì không. [...] Tu’o’ng u´’ng baˆ´t ky` ký tu

˙’ nào trong soˆ´ các ký tu

˙’ na˘`m trong daˆ´ u ngoa˘ ˙c vuông này. Ca˘

˙p ký tu˙’, phân cách nhau bo’’i daˆ´ u tru`’ (-), ví du

˙ c-f, bieˆ’u thi

˙moˆ

˙t dãy; baˆ´t ký ký tu

˙’ nào, theo tu`’ d¯ieˆ’n, na˘`m giu˜’a hai ký tu

˙’ này, keˆ’ ca’ hai ký tu

˙’ ta˙o ra dãy (cvà ftrong ví du˙) cu˜ng tu’o’ng u´’ng vo´’i maˆ˜u. Neˆ´u ký tu

˙’ d¯aˆ`u tiên trong ngoa˘˙c vuông là hay ˆ, thì maˆ˜u (o’’ vi˙trí này) se˜ tu’o’ng u´’ng taˆ´t ca’ các ký tu

˙’, không d¯u’o˙’c chı’ ra trong ngo Maˆ˜u tên taˆ (adsbygoogle = window.adsbygoogle || []).push({});

˙p tin raˆ´t thu’o`’ng xuyên su’’ du

˙ng trong dòng leˆ

˙nh có chu´’als. Hãy tu’o’’ng tu’o ˙’ng là ba

˙n muoˆ´ n xem thông tin cu’a moˆ

˙t thu’ mu

˙c, trong d¯ó có chu´’a moˆ

˙t soˆ´ lu’o

˙’ng lo´’n các taˆ˙p tin d¯u’ các da

˙ng, ví du˙, taˆ

˙p tin hình a’nh, phim vo´’i da

˙ng gif, jpeg, avi, v.v. . . . D¯ eˆ’ thu d¯u’o˙’c thông

tin chı’ cu’a taˆ

˙p tin da˙ng jpeg, có theˆ’ dùng câu leˆ ˙nh

kênh giao tác

[user]$ ls *.jpg

Neˆ´u trong thu’ mu

˙c có nhieˆ`u taˆ

˙p tin, mà tên cu’a chúng là các soˆ´ goˆ`m boˆ´n chu˜’soˆ´ (thu’mu ˙c

/proclà moˆ

˙t ví du˙+), thì leˆ

˙nh sau chı’ d¯u’a ra danh sách các taˆ

˙p tin có soˆ´ tu`’ 0500 d¯eˆ´n 0999:

kênh giao tác

[user]$ ls -l 0[5-9]??

3.7.8 Xóa các ký tu

˙’ d¯a˘˙c bieˆ˙t

Sau khi làm xong taˆ´t ca’ các phép theˆ´, các ký tu

˙’\, ‘ và"còn la˙i trong dòng leˆ

˙nh (chúng d¯u’o

˙’c su’’ du˙ng d¯eˆ’ huy’ bo’ giá tri ˙d¯a˘ (adsbygoogle = window.adsbygoogle || []).push({});

˙c bieˆ

˙t cu’a các ký tu˙’ khác) se˜ bi˙xóa heˆ´t.

3.8 Shell - moˆ

˙t ngôn ngu˜’ laˆ

˙p trình

Nhu’ d¯ã nói o’’ trên, d¯eˆ’ có theˆ’ xây du

˙’ng baˆ´ t ky` gia’i thuaˆ

˙t nào, cu˜ng caˆ`n có các toán tu’’ kieˆ’m tra d¯ieˆ`u kieˆ

˙n. Heˆ

˙ vo’bashhoˆ˜ tro

˙’ các toán tu’’ lu˙’a cho˙nif...then...elsevà case, cu˜ng nhu’ các toán tu’’ vòng la˘

˙pfor, while, until, nho`’ d¯ó nó (bash) tro’’ thành moˆ ˙t ngôn ngu˜’ laˆ

˙p trình ma˙nh.

3.8.1 Toàn tu’’ if và test (hoa˘˙c [ ]) ˙c [ ])

Caˆ´u trúc cu’a toán tu’’ d¯ieˆ`u kieˆ

˙n có da˙ng thu go˙n nhu’ sau: iflist1 then list2 else list3

fitrong d¯ó, list1, list2, và list3là các chuoˆ˜i câu leˆ

3.8 Shell - moˆ

˙t ngôn ngu˜’ laˆ

˙p trình 43

pha’y và keˆ´t thúc bo’’i moˆ

˙t daˆ´u chaˆ´m phaˆ’y hay ký tu

˙’ dòng mo´’i. Ngoài ra, các chuoˆ˜i này có theˆ’ d¯u’o

˙’c d¯u’a vào daˆ´ u ngoa˘

˙c nho˙n: list. Toán tu’’ if kieˆ’m tra giá tri ˙d¯u’o

˙’c tra’ la˙i bo’’i các câu leˆ ˙nh tu`’list1. Neˆ´u trong danh sách có vài câu leˆ

˙nh, thì kieˆ’m tra giá tri ˙d¯u’o

˙’c tra’ la˙i bo’’i câu leˆ ˙nh

cuoˆ´ i cùng cu’a danh sách. Neˆ´u giá tri

˙này ba˘`ng 0, thì se˜ thu (adsbygoogle = window.adsbygoogle || []).push({});

˙’c hieˆ˙n các leˆ

˙nh tu`’list2; còn neˆ´u giá tri

˙này khác không, thì se˜ thu

˙’c hieˆ˙n nhu˜’ng leˆ

˙nh tu`’list3. Giá tri ˙d¯u’o

˙’c tra’ la˙i bo’’i toán tu’’ifnhu’ vaˆ

˙y, trùng vo´’i giá tri

˙mà chuoˆ˜i leˆ

˙nh thu˙’c hieˆ˙n (list2hoa˘˙clist3) d¯u’a ra. Da

˙ng d¯aˆ`y d¯u’ cu’a leˆ

˙nhifnhu’ sau:

iflistthenlist [eliflistthenlist ] ... [elselist ]fi

(o’’d¯ây daˆ´u ngoa˘

˙c vuông chı’ có nghı˜a là, nhu˜’ng gì na˘`m trong nó, ngoa˘

˙c vuông, không nhaˆ´t thieˆ´t pha’i có). Bieˆ’u thu´’c d¯u´’ng sauifhayelifthu’o`’ng là câu leˆ

˙nhtest, mà có theˆ’ d¯u’o ˙’c bieˆ’u thi

˙bo’’i daˆ´u ngoa˘

˙c vuông [ ]. Leˆ

˙nhtestthu˙’c hieˆ˙n phép tính moˆ

˙t bieˆ’u thu´’c nào d¯ó, và tra’ la

˙i giá tri˙0, neˆ´u bieˆ’u thu´’c là d¯úng, và 1 trong tru’o`’ng ho

˙’p ngu’o˙’c la˙i. Bieˆ’u thu´’c d¯u’o ˙’c d¯u’a to´’i chu’o’ng trìnhtestnhu’ moˆ

˙t tham soˆ´ cu’a chu’o’ng trình. Thay vì gõ

test expression

có theˆ’ d¯u’a bieˆ’u thu´’cexpressionvào ngoa˘

˙c vuông:

[ expression ]

Caˆ`n chú ý ra˘`ng,testvà[d¯ó là hai tên cu’a cu’a cùng moˆ

˙t chu’o’ng trình, chu´’ không pha’i là moˆ

˙t phép bieˆ´n hóa thaˆ`n thông nào d¯ó cu’a heˆ (adsbygoogle = window.adsbygoogle || []).push({});

˙vo’bash(chı’ là cú pháp cu’a[d¯òi ho’i pha’i có daˆ´u d¯óng ngoa˘

˙c). Và cu˜ng caˆ`n chú ý ra˘`ng o’’ choˆ˜ cu’a testtrong caˆ´u trúcifcó theˆ’ su’’ du ˙ng baˆ´t ky` chu’o’ng trình nào. D¯ eˆ’ keˆ´ t thúc mu

˙c này, chúng ta d¯u’a ra ví du ˙ su’’ du ˙ngif: kênh giao tác if [ -x /usr/bin/unicode_start ] ; then unicode_start else

echo "hello world" fi

Veˆ` toán tu’’test(hay[...]) caˆ`n d¯i sâu ho’n.

Một phần của tài liệu Tài liệu Linux cho người dùng doc (Trang 46 - 47)