3 Bash
3.6.2 Daˆ´u nha˘´c cu’a heˆ
˙’ 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’ ˙ 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
3.6 Tham bieˆ´ n và các bieˆ´n soˆ´. Môi tru’o`’ng cu’a heˆ
˙vo’ 37
kho’’i d¯oˆ
˙ng (hay script d¯a˘ng nhaˆ
˙p) xác d¯i
˙nh la˙i bieˆ´n này. Nói chung thì trongbashcó taˆ´t ca’ boˆ´ n daˆ´u nha˘´c, d¯u’o
˙’c su’’ du˙ng trong các tru’o`’ng ho
˙’p khác nhau. Bieˆ´ n PS1 d¯u’a ra da
˙ng cu’a daˆ´u nha˘´c khi heˆ
˙ vo’ cho`’ nhaˆ ˙p leˆ
˙nh. Daˆ´u nha˘´c thu´’ hai, xác d¯i
˙nh bo’’i bieˆ´n PS2, xuaˆ´t hieˆ
˙n khi heˆ ˙ vo’ cho`’ ngu’o`’i dùng nhaˆ
˙p thêm moˆ
˙t vài du˜’ lieˆ
˙u caˆ`n thieˆ´t nào d¯ó d¯eˆ’ có theˆ’ tieˆ´p tu
˙c cha˙y câu leˆ ˙nh (chu’o’ng trình) d¯ã go
˙i. Theo ma˘˙c d¯i
˙nh bieˆ´n PS2 có giá tri
˙">". Raˆ´t có theˆ’ ba
˙n d¯ã nhìn thaˆ´y daˆ´u nha˘´c này, khi cha
˙y leˆ
˙nhcatd¯eˆ’ d¯u’a du˜’ lieˆ
˙u vào tu`’ bàn phím vào taˆ
˙p tin. Moˆ
˙t ví du˙ khác - leˆ
˙nhftp, sau khi cha˙y leˆ
˙nh này daˆ´u nha˘´c se˜ có da
˙ng nhu’ d¯ã nói. Daˆ´u nha˘´c, xác d¯i ˙nh bo’’i bieˆ´n PS3, su’’ du
˙ng trong leˆ
˙nhselect. Daˆ´u nha˘´c, xác d¯i
˙nh bo’’i bieˆ´n PS4, d¯u’o
˙’c d¯u’a ra tru’o´’c moˆ˜i câu leˆ
˙nh, trong lúcbashtheo dõi quá trình thu˙’c hieˆ˙n. Giá tri˙theo ma˘˙c d¯i
˙nh - "+". Neˆ´u có mong muoˆ´ n, ba
˙n có theˆ’ thay d¯oˆ’i các bieˆ´n PS1 và PS2. Khi này có theˆ’ su’’ du
˙ng baˆ´t ky` ký tu
˙’ nào nhaˆ˙p tu`’ bàn phím, cu˜ng nhu’ moˆ
˙t vài ký tu˙’ chuyên dùng d¯eˆ’ xác d¯i˙nh da˙ng daˆ´u nha˘´c nhu’trong ba’ng3.3(chı’ d¯u’a ra moˆ
˙t vài trong soˆ´ chúng làm ví du
˙, danh sách d¯aˆ`y d¯u’ xem trong trang man cu’abash- gõ leˆ
˙nh "man bash"). Ba’ng 3.3: Ký tu
˙’ xác d¯i˙nh da˙ng daˆ´u nha˘´c Cu
˙m ký tu˙’ Giá tri˙(keˆ´t qua’ thu d¯u’o ˙’c)
\a Tín hieˆ
˙u âm thanh (mã ASCII 07)
\d Tho`’i gian o’’ da
˙ng "Thu´’, tháng, ngày", ví du
˙, Sun, Dec, 26.
\h Tên máy (hostname) d¯eˆ´n daˆ´u chaˆ´m d¯aˆ`u tiên.
\H Tên máy d¯aˆ`y d¯u’, ví du
˙ teppi.phanthinh.com
\t Tho`’i gian hieˆ
˙n tho`’i o’’ da
˙ng 24 gio`’: HH:MM:SS (gio`’:phút:giây)
\T Tho`’i gian hieˆ
˙n tho`’i o’’ da
˙ng 12 gio`’: HH:MM:SS
\@ Tho`’i gian hieˆ
˙n tho`’i o’’ da
˙ng 12 gio`’ am/pm (sáng/chieˆ`u)
\u Tên ngu’o`’i dùng d¯ã cha ˙y heˆ
˙ vo’, ví du˙ teppi
\w Tên d¯aˆ`y d¯u’ cu’a thu’ mu
˙c làm vieˆ ˙c hieˆ
˙n tho`’i (ba˘´t d¯aˆ`u tu`’ goˆ´c), ví du ˙ /home/teppi82/project/l4u
\W Thu’ mu ˙c hieˆ
˙n tho`’i (không có d¯u’o`’ng daˆ˜n)
\$ Ký tu
˙’ #, neˆ´ u heˆ
˙vo’ d¯u’o
˙’c cha˙y bo’’i ngu’o`’i dùng root, và ký tu
˙’ $, neˆ´ u heˆ ˙ vo’ d¯u’o
˙’c cha˙y bo’’i ngu’o`’i dùng thu’o`’ng.
\nnn Ký tu ˙’ có mã heˆ˙ tám nnn \n Dòng mo´’i (chuyeˆ’n dòng) \s Tên heˆ ˙vo’ \# Soˆ´ hieˆ
˙n tho`’i cu’a câu leˆ ˙nh
\\ Daˆ´u ga
˙ch ngu’o
˙’c (backslash)
\[ Sau ký tu
˙’ này taˆ´ t ca’ các ký tu
˙’ se˜ không d¯u’o˙’c in ra.
\] Keˆ´t thúc chuoˆ˜i các ký tu
˙’ không d¯u’o˙’c in ra.
\! Soˆ´ thu´’ tu
˙’ cu’a leˆ˙nh hieˆ
˙n tho`’i trong li
˙ch su’’ các câu leˆ
˙nh d¯ã dùng. Soˆ´ cu’a leˆ
˙nh (soˆ´ thu´’tu
˙’ cu’a leˆ˙nh d¯ang thu
˙’c hieˆ˙n trong buoˆ’i làm vieˆ ˙c hieˆ
˙n tho`’i) có theˆ’ khác vo´’i soˆ´ cu’a chính nó trong danh sách "li
˙ch su’’ các câu leˆ
˙nh", bo’’i vì danh sách còn chu´’a ca’ nhu˜’ng câu leˆ
˙nh d¯ã d¯u’o
˙’c ghi la˙i trong taˆ
˙p tin li˙ch su’’. Sau khi giá tri
˙cu’a bieˆ´n d¯u’o
˙’c heˆ˙vo’ d¯o ˙c xong, se˜ xa’y ra su
˙’ thay theˆ´ theo các quy luaˆ
˙t mo’’ roˆ
˙ng trong ba’ng trên, d¯oˆ`ng tho`’i còn xa’y ra su
˙’ thay theˆ´ trong tên các câu leˆ
˙nh, trong các bieˆ’u thu´’c soˆ´ ho
˙c, và su˙’ chia tu`’ (word splitting). Chúng ta se˜ nói d¯eˆ´n nhu˜’ng su
˙’thay theˆ´ này o’’du’o´’i.Ví du
˙, sau khi thu˙’c hieˆ˙n leˆ
˙nh (vì trong dòng va˘n ba’n có khoa’ng troˆ´ ng, nên nhaˆ´t thieˆ´t pha’i có daˆ´u ngoa˘
˙c):
kênh giao tác
thì trong daˆ´u nha˘´c se˜ có daˆ´u mo’’ ngoa˘
˙c vuông, tên ngu’o`’i dùng, ký hieˆ
˙u , tên máy, khoa’ng tra˘´ng, tên cu’a thu’ mu
˙c hieˆ
˙n tho`’i (không có d¯u’o`’ng daˆ˜n), daˆ´u d¯óng ngoa˘
˙c vuông, và ký hieˆ ˙u $ (neˆ´u trên heˆ
˙ vo’ d¯ang làm vieˆ
˙c ngu’o`’i dùng bình thu’o`’ng) hay #(neˆ´u heˆ
˙ vo’ cha˙y du’o´’i ngu’o`’i dùng root).