3 Bash
3.7.3 Phép theˆ´ các tham bieˆ´n và bieˆ´n soˆ ´
Ký tu
˙’ $ d¯u’o˙’c su’’ du˙ng cho các thao tác theˆ´ tham bieˆ´n, theˆ´ các câu leˆ
˙nh và theˆ´ các bieˆ’u thu´’c soˆ´ ho
˙c. Bieˆ’u thu´’c hay tên d¯u´’ng sau $ có theˆ’ d¯u’o
˙’c d¯u’a vào ngoa˘˙c, không nhaˆ´t thieˆ´t, nhu’ng raˆ´t tieˆ
˙n, vì daˆ´u ngoa˘
˙c phân cách bieˆ’u thu´’c vo´’i các tu`’ hay ký tu
˙’ d¯u´’ng sau. Nhu’ vaˆ˙y, d¯eˆ’ go ˙i giá tri
˙cu’a tham bieˆ´n nói chung cu˜ng nhu’ bieˆ´n môi tru’o`’ng nói riêng trong dòng leˆ
˙nh, caˆ`n d¯a˘ ˙t bieˆ’u thu´’c da
˙ng $parameter. Daˆ´u ngoa˘
˙c chı’ caˆ`n thieˆ´t, neˆ´u tên cu’a tham bieˆ´n có chu´’a vài chu˜’ soˆ´ , hoa˘
˙c khi theo sau tên còn có các ký tu˙’ khác, mà chúng ta không muoˆ´ n heˆ
˙ vo’ "hieˆ’u laˆ`m" chúng là moˆ
˙t phaˆ`n cu’a tên tham bieˆ´n. Trong taˆ´t ca’ các giá tri
˙cu’a bieˆ´n soˆ´ xa’y ra phép theˆ´ daˆ´u ngã (∼), su
˙’ khai trieˆ’n tham bieˆ´ n và bieˆ´n soˆ´, phép theˆ´ các câu leˆ
˙nh, phép theˆ´ các bieˆ’u thu´’c soˆ´ ho
˙c, cu˜ng nhu’ xóa các ký tu
˙’ trích daˆ˜n (xem du’o´’i). Su˙’ phân chia tu`’ không xa’y ra, tru`’ tru’o`’ng ho
˙’p "$" (lo`’i gia’i thích xem o’’ ba’ng soˆ´ 3). Su
˙’ khai trieˆ’n các maˆ˜u tên taˆ˙p tin và thu’ mu ˙c cu˜ng không d¯u’o
3.7 Khai trieˆ’n bieˆ’u thu´’c 41 3.7.4 Phép theˆ´ các câu leˆ
˙nh
Phép theˆ´ các câu leˆ
˙nh là moˆ
˙t công cu˙raˆ´t ma
˙ng cu’abash. Ý nghı˜a cu’a nó na˘`m o’’ choˆ˜ thay theˆ´ tên các câu leˆ
˙nh bo’’i keˆ´t qua’ thu
˙’c hieˆ˙n cu’a chúng. Có hai da˙ng phép theˆ´ leˆ
˙nh:$(command) và‘command‘Neˆ´u u´’ng du
˙ng da˙ng thu´’ hai (chú ý o’’ d¯ây su’’ du
˙ng daˆ´u "ngoa˘
˙c d¯o’n ngu’o ˙’c", phím cho nó thu’o`’ng na˘`m trên phím Tab), thì daˆ´u ga
˙ch ngu’o
˙’c (\) o’’trong daˆ´u ngoa˘
˙c se˜ có chu´’c na˘ng nhu’ moˆ
˙t ký tu˙’ thông thu’o`’ng, tru`’ tru’o`’ng ho˙’p, khi d¯u´’ng sau nó (daˆ´ u ga
˙ch ngu’o
˙’c) là moˆ˙t $, ‘, hay moˆ
˙t\. Neˆ´u nhu’su’’du
˙ng da˙ng $(command), thì taˆ´t ca’ các ký tu
˙’ d¯u´’ng trong ngoa˘˙c ta˙o thành moˆ
˙t câu leˆ
˙nh, không có ký tu˙’ nào có ý nghı˜a d¯a˘˙c bieˆ
˙t. Neˆ´u phép theˆ´ câu leˆ
˙nh xa’y ra phía trong ngoa˘
˙c kép, thì trong keˆ´t qua’ cu’a phép theˆ´ se˜ không thu
˙’c hieˆ˙n phép phân chia tu`’ và su
˙’ khai trieˆ’n maˆ˜u tên taˆ˙p tin và thu’ mu ˙c.
3.7.5 Phép theˆ´ soˆ´ ho
˙c (Arithmetic Expansion)
Phép theˆ´ soˆ´ ho
˙c cho phép tính giá tri˙ cu’a moˆ
˙t bieˆ’u thu´’c soˆ´ ho
˙c và thay theˆ´ nó (bieˆ’u thu´’c) bo’’i keˆ´t qua’ thu d¯u’o
˙’c. Có hai da˙ng phép theˆ´ soˆ´ ho
˙c:$[expression] ((expression)) Trong d¯óexpressiond¯u’o
˙’c hieˆ’u (d¯u’o˙’cbashd¯o
˙c) nhu’ khi d¯u´’ng trong ngoa˘
˙c kép, nhu’ng nhu˜’ng daˆ´u ngoa˘
˙c kép o’’ trongexpressionla ˙i d¯u’o
˙’c d¯o˙c nhu’ moˆ
˙t ký tu˙’ thu’o`’ng. Phía trong
expressioncó thu
˙’c hieˆ˙n các phép theˆ´ tham bieˆ´n và theˆ´ câu leˆ
˙nh. Cú pháp cu’a bieˆ’u thu´’c
expressiontu’o’ng tu
˙’ nhu’ cú pháp cu’a bieˆ’u thu´’c soˆ´ ho
˙c cu’a ngôn ngu˜’C, cu
˙theˆ’ ho’n veˆ` vaˆ´n d¯eˆ` này có theˆ’ d¯o
˙c trong phaˆ`n ARITHMETIC EVALUATION cu’a trang man cu’abash. Ví du
˙, câu leˆ
˙nh kênh giao tác
[user]$ echo $((2 + 3 * 5))
cho keˆ´t qua’ ba˘`ng "17". Neˆ´u bieˆ’u thu´’c không chính xác,bashse˜ d¯u’a ra thông báo loˆ˜i.
3.7.6 Phân chia tu`’ (word splitting)
Sau khi thu
˙’c hieˆ˙n xong các phép theˆ´ tham bieˆ´n, theˆ´ leˆ
˙nh, và theˆ´ các bieˆ’u thu´’c soˆ´ ho ˙c, heˆ
˙vo’ la˙i phân tích dòng leˆ
˙nh moˆ
˙t laˆ`n nu˜’a (nhu’ng o’’ da
˙ng thu d¯u’o
˙’c sau các phép theˆ´ nói trên) và thu ˙’c hieˆ
˙n vieˆ
˙c phân chia tu`’ (word splitting). Thao tác này na˘`m o’’ choˆ˜, heˆ
˙ vo’ tìm trong dòng leˆ ˙nh taˆ´t ca’ các ký tu
˙’ phân chia, xác d¯i˙nh bo’’i bieˆ´nIFS(xem trên), và nho`’ d¯ó chia nho’ dòng leˆ ˙nh thành các tu`’ riêng re˜ trong các choˆ˜ tu’o’ng u´’ng. Neˆ´u giá tri
˙cu’aIFSba˘`ng moˆ
˙t dòng troˆ´ ng, thì vieˆ
˙c phân chia tu`’ se˜ không xa’y ra. Neˆ´u trong dòng leˆ
˙nh không thu˙’c hieˆ˙n phép theˆ´ nào trong các phép theˆ´ keˆ’ trên, thì phân chia tu`’ cu˜ng không xa’y ra.
3.7.7 Khai trieˆ’n các maˆ˜u tên taˆ
˙p tin và thu’ mu
˙c (Pathname Expansion)
Phép theˆ´ tên d¯u’o`’ng daˆ˜n và taˆ
˙p tin (Pathname expansion) su’’ du
˙ng d¯eˆ’ chı’ nho`’ moˆ
˙t maˆ˜u nho’ go
˙n mà có theˆ’ chı’ ra vài taˆ
˙p tin (hay thu’ mu
˙c), tu’o’ng u´’ng vo´’i maˆ˜u này. Sau khi phân chia tu`’, và neˆ´u nhu’ không d¯u’a ra tùy cho
˙n-f, thìbashse˜ tìm kieˆ´m trong tu`’ng tu`’ cu’a dòng leˆ ˙nh các ký tu
˙’*, ?,và [. Neˆ´u tìm thaˆ´y tu`’ vo´’i moˆ
˙t hay vài ký tu˙’ nhu’ vaˆ˙y, thì tu`’ này se˜ d¯u’o ˙’c xem nhu’ moˆ
˙t maˆ˜u, và caˆ`n thay theˆ´ bo’’i các tu`’ trong danh sách d¯u’o`’ng daˆ˜n, tu’o’ng u´’ng vo´’i maˆ˜u này. Neˆ´u nhu’ không tìm thaˆ´y tên tu’o’ng u´’ng vo´’i maˆ˜u, và bieˆ´n nullglob không d¯u’o
˙’c d¯u’a ra, thì tu`’ se˜ không thay d¯oˆ’i, tu´’c là các ký tu
˙’ d¯a˘˙c bieˆ
˙t bi˙maˆ´t giá tri
˙và hieˆ’u nhu’ các ký tu
˙’ thu’o`’ng. Neˆ´ u nhu’ bieˆ´n này d¯u’o
˙’c xác d¯i˙nh, mà d¯u’o`’ng daˆ˜n tu’o’ng u´’ng vo´’i maˆ˜u không tìm thaˆ´y, thì tu`’ se˜ bi ˙ xóa kho’i dòng leˆ
˙nh. Các ký tu˙’ dùng d¯eˆ’ ta˙o maˆ˜u có các giá tri
Ba’ng 3.4: Các ký tu
˙’ 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ˆ
˙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˘
˙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
˙’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ˆ
˙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.
3.8.2 Toán tu’’ test và d¯ieˆ`u kieˆ
˙n cu’a bieˆ’u thu´’c
Bieˆ’u thu´’c d¯ieˆ`u kieˆ
˙n, su’’ du
˙ng trong toán tu’’test, d¯u’o
˙’c xây du˙’ng trên co’ so’’ kieˆ’m tra thuoˆ˙c tính taˆ
˙p tin, so sánh các dòng và các so sánh soˆ´ ho
˙c thông thu’o`’ng. Bieˆ’u thu´’c phu´’c ta
˙p ho’n d¯u’o
˙’c ta˙o ra tu`’ các thao tác d¯o’n và kép sau ("nhu˜’ng viên ga
˙ch co’ so’’"): • -a file
D
¯ úng neˆ´ u taˆ
˙p tin có tênfiletoˆ`n ta ˙i. • -b file
D
¯ úng neˆ´ ufiletoˆ`n ta
˙i, và là moˆ ˙t taˆ
˙p tin thieˆ´t bi
˙khoˆ´ i (block device) d¯a˘ ˙c bieˆ
˙t. • -c file
D
¯ úng neˆ´ ufiletoˆ`n ta
˙i, và là moˆ ˙t taˆ
˙p tin thieˆ´t bi
˙ký tu˙’ (charater device) d¯a˘˙c bieˆ ˙t. • -d file
D
¯ úng neˆ´ ufiletoˆ`n ta
˙i và là moˆ ˙t thu’ mu ˙c. • -e file D ¯ úng neˆ´ u taˆ
˙p tin có tênfiletoˆ`n ta ˙i.
• -f file
D
¯ úng neˆ´ u taˆ
˙p tin có tênfiletoˆ`n ta
˙i và là moˆ ˙t taˆ
˙p tin thông thu’o`’ng. • -g file
D
¯ úng neˆ´ u taˆ
˙p tin có tênfiletoˆ`n ta
˙i và d¯u’o
˙’c d¯a˘˙t bit thay d¯oˆ’i nhóm.
• -h filehay-L file
D
¯ úng neˆ´ u taˆ
˙p tin có tênfiletoˆ`n ta
˙i và là liên keˆ´t meˆ`m (liên keˆ´t tu’o
˙’ng tru’ng). • -k file
D
¯ úng neˆ´ u taˆ
˙p tin có tênfiletoˆ`n ta
˙i và d¯u’o
˙’c d¯a˘˙t bit sticky. • -p file
D
¯ úng neˆ´ u taˆ
˙p tin có tênfiletoˆ`n ta
˙i và là tên cu’a moˆ
˙t oˆ´ ng (kênh FIFO). • -p file
D
¯ úng neˆ´ u taˆ
˙p tin có tênfiletoˆ`n ta
˙i và là tên cu’a moˆ
˙t oˆ´ ng (kênh FIFO). • -r file
D
¯ úng neˆ´ u taˆ
˙p tin có tênfiletoˆ`n ta
˙i và có quyeˆ`n d¯o ˙c. • -s file
D
¯ úng neˆ´ u taˆ
˙p tin có tênfiletoˆ`n ta
˙i và kích thu’o´’c lo´’n ho’n không. • -t fd
D
¯ úng neˆ´ u boˆ
˙ mô ta’ cu’a taˆ
˙p tin (fd) mo’’ và chı’ lên terminal. • -u file
D
¯ úng neˆ´ u taˆ
˙p tin có tênfiletoˆ`n ta
˙i và d¯u’o
˙’c d¯a˘˙t bit thay d¯oˆ’i ngu’o`’i dùng.
• -w file
D
¯ úng neˆ´ u taˆ
˙p tin có tênfiletoˆ`n ta
˙i và có quyeˆ`n ghi. • -x file
D
¯ úng neˆ´ u taˆ
˙p tin có tênfiletoˆ`n ta
˙i và có quyeˆ`n thu ˙’c thi. • -0 file
D
¯ úng, neˆ´ u taˆ
˙p tin có tênfilevà chu’ so’’ hu˜’u cu’a nó là ngu’o`’i dùng mà ID có hieˆ ˙u lu˙’c chı’ d¯eˆ´n.
• -G file
D
¯ úng, neˆ´ u taˆ
˙p tin có tênfiletoˆ`n ta
˙i và thuoˆ ˙c veˆ` nhóm, xác d¯i ˙nh bo’’i ID nhóm có hieˆ ˙u lu ˙’c. • -S file D ¯ úng, neˆ´ u taˆ
˙p tin có tênfiletoˆ`n ta
˙i và là socket. • -N file
D
¯ úng, neˆ´ u taˆ
˙p tin có tênfiletoˆ`n ta
˙i và thay d¯oˆ’i tu`’ laˆ`n d¯u’o
˙’c d¯o˙c cuoˆ´ i cùng. • file1 -nt file2
D
¯ úng, neˆ´ u taˆ
˙p tinfile1có tho`’i gian su’’a d¯oˆ’i muoˆ
3.8 Shell - moˆ
˙t ngôn ngu˜’ laˆ
˙p trình 45
• file1 -ot file2
D
¯ úng, neˆ´ u taˆ
˙p tinfile1"già" ho’nfile1(tru’o`’ng ho
˙’p ngu’o˙’c la˙i cu’a tru’o`’ng ho
˙’p trên). • file1 -ef file2
D
¯ úng, neˆ´ u taˆ
˙p tinfile1vàfile2có cùng moˆ
˙t soˆ´ thieˆ´t bi
˙ và chı’ soˆ´ mô ta’ inode. • -o optname
D
¯ úng, neˆ´ u tùy cho
˙n optnamecu’a heˆ
˙ vo’ d¯u’o
˙’c kích hoa˙t. Chi tieˆ´t xin xem trên trang
man bash. • -z string
D
¯ úng, neˆ´ u d¯oˆ
˙ dài cu’a chuoˆ˜istringba˘`ng không. • -n string
D
¯ úng, neˆ´ u d¯oˆ
˙ dài cu’a chuoˆ˜i khác không. • string1 == string2
D
¯ úng, neˆ´ u hai chuoˆ˜i trùng nhau. Có theˆ’ thay hai==ba˘`ng moˆ ˙t=. • string1 !== string2
D
¯ úng, neˆ´ u hai chuoˆ˜i không trùng nhau. • string1 < string2
D
¯ úng, neˆ´ u chuoˆ˜istring1, theo tu`’ d¯ieˆ’n, d¯u´’ng tru’o´’c chuoˆ˜istring2 (d¯oˆ´ i vo´’i ngôn ngu˜’ hieˆ
˙n tho`’i).
• string1 > string2
D
¯ úng, neˆ´ u chuoˆ˜istring1, theo tu`’d¯ieˆ’n, d¯u´’ng sau chuoˆ˜istring2(d¯oˆ´ i vo´’i ngôn ngu˜’ hieˆ
˙n tho`’i).
• arg1 OP arg2
O’’ d¯ây OP là moˆ
˙t trong các phép so sánh soˆ´ ho
˙c:-eq(ba˘`ng),-ne(khác, không ba˘`ng),
-lt (nho’ ho’n),-le(nho’ ho’n hoa˘
˙c ba˘`ng), -gt(lo´’n ho’n),-ge (lo´’n ho’n hoa˘
˙c ba˘`ng). O’’ choˆ˜ các tham soˆ´ arg1 và arg2 có theˆ’ su’’du
˙ng các soˆ´ nguyên (âm hoa˘
˙c du’o’ng). Tu`’ các bieˆ’u thu´’c d¯ieˆ`u kieˆ
˙n co’ ba’n này có theˆ’ xây du
˙’ng các bieˆ’u thu´’c phu´’c ta˙p theo ý muoˆ´ n nho`’ các phép lôgíc thông thu’o`’ng PHU’ D¯ I
˙NH, VÀ (coˆ ˙ng) và HOA ˘ ˙C: • !(expression) Phép phu’ d¯i
˙nh. D¯ úng, neˆ´ u bieˆ’u thu´’c sai.
• expression1 -a expression2
Phép coˆ
˙ng lôgicAND. D¯ úng neˆ´ u ca’ hai bieˆ’u thu´’c d¯eˆ`u d¯úng.
• expression1 -o expression2
Phép lôgíc hoa˘
˙cOR. D¯ úng neˆ´ u moˆ