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 ˘ ˙ 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 ˆ ˙ nh cat, 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 ˆ ˙ nh grep, 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 ˆ ˙ nh grep d ¯ u ’ o ˙ ’ c chuye ˆ ’ n to ´ ’ i d ¯ a ˆ ` u vào cu ’ a le ˆ ˙ nh wc -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á 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 D ¯ a ˆ ` u lo ˙ c Ví du ˙ cuo ˆ ´ i cùng o ’ ’ trên (ví du ˙ vo ´ ’ i câu le ˆ ˙ nh grep) 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ên cat, more, less, wc, cmp, diff, và ca ’ nhu ˜ ’ ng câu le ˆ ˙ nh có trong ba ’ ng 3.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 ˆ ˙ nh tr abc ABC ro ˆ ` 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 D ¯ i ˙ 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 ˆ ˙ nh tee, 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 ˆ ˙ nh tee 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 3.6 Tham bie ˆ ´ n và các bie ˆ ´ n so ˆ ´ . Môi tru ’ o ` ’ ng cu ’ a he ˆ ˙ vo ’ 35 d ¯ u ’ o ˙ ’ 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). 3.6.1 Các da ˙ 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 ˆ ˙ nh set d ¯ 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 ’ ng 3.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òn value - 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ùngvo ´ ’ 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 set khi 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 ˆ ˙ nh set (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 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ú set hay 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 ˆ ˙ nh set, 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ên 4 trong 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 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ì trong bash có 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 ˆ ˙ nh cat d ¯ 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 ˆ ˙ nh ftp, 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 ˆ ˙ nh select. 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úc bash theo 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 ’ ng 3.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 ’ a bash - 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 [user/root]$ PS1="[\u@\h \W]\$" 38 Bash 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). 3.6.3 Bie ˆ ´ n môi tru ’ o ` ’ ng PATH Còn mo ˆ ˙ t bie ˆ ´ n cu ˜ ng quan tro ˙ ng nu ˜ ’ a có tên PATH. Bie ˆ ´ n này d ¯ u ’ a ra danh sách d ¯ u ’ o ` ’ ng da ˆ ˜ n d ¯ e ˆ ´ n các thu ’ mu ˙ c, mà bash se ˜ tìm kie ˆ ´ m ta ˆ ˙ p tin (tru ’ o ` ’ ng ho ˙ ’ p riêng là các ta ˆ ˙ p tin le ˆ ˙ nh) trong tru ’ o ` ’ ng ho ˙ ’ p, d ¯ u ’ o ` ’ ng da ˆ ˜ n d ¯ a ˆ ` y d ¯ u ’ d ¯ e ˆ ´ n ta ˆ ˙ p tin không d ¯ u ’ o ˙ ’ c d ¯ u ’ a ra. Các thu ’ mu ˙ c trong danh sách này phân cách nhau bo ’ ’ i da ˆ ´ u hai cha ˆ ´ m (:). Theo ma ˘ ˙ c d ¯ i ˙ nh bie ˆ ´ n PATH chu ´ ’ a các thu ’ mu ˙ c /usr/local/bin, /bin, /usr/bin, /usr/X11R6/bin, tu ´ ’ c là có da ˙ ng: /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin: D ¯ e ˆ ’ thêm thu ’ mu ˙ c vào danh sách này, ca ˆ ` n thu ˙ ’ c hie ˆ ˙ n câu le ˆ ˙ nh sau: kênh giao tác [user]$ PATH=$PATH:new_path Khi tìm kie ˆ ´ m, he ˆ ˙ vo ’ "lu ˙ c lo ˙ i" các thu ’ mu ˙ c theo d ¯ úng thu ´ ’ tu ˙ ’ d ¯ ã lie ˆ ˙ t kê trong bie ˆ ´ n PATH. Mo ˆ ˙ t chú ý nho ’ , có the ˆ ’ d ¯ u ’ a vào danh sách này thu ’ mu ˙ c hie ˆ ˙ n tho ` ’ i, khi thêm vào bie ˆ ´ n PATH mo ˆ ˙ t da ˆ ´ u cha ˆ ´ m (.). Tuy nhiên, d ¯ ây là d ¯ ie ˆ ` u không khuyên làm vo ´ ’ i lý do ba ’ o ma ˆ ˙ t: ngu ’ o ` ’ i có ác ý có the ˆ ’ d ¯ a ˘ ˙ t vào thu ’ mu ˙ c dùng chung mo ˆ ˙ t chu ’ o ’ ng trình nào d ¯ ó, có cùng tên vo ´ ’ i mo ˆ ˙ t trong so ˆ ´ nhu ˜ ’ ng câu le ˆ ˙ nh thu ’ o ` ’ ng dùng bo ’ ’ i root, nhu ’ ng thu ˙ ’ c hie ˆ ˙ n nhu ˜ ’ ng chu ´ ’ c na ˘ ng khác hoàn toàn (d ¯ a ˘ ˙ c bie ˆ ˙ t nguy hie ˆ ’ m ne ˆ ´ u thu ’ mu ˙ c hie ˆ ˙ n tho ` ’ i d ¯ u ´ ’ ng o ’ ’ d ¯ a ˆ ` u danh sách tìm kie ˆ ´ m). 3.6.4 Bie ˆ ´ n môi tru ’ o ` ’ ng IFS Bie ˆ ´ n này xác d ¯ i ˙ nh ký tu ˙ ’ (cu ˙ m ký tu ˙ ’ ) phân cách (Internal Field Separator), su ’ ’ du ˙ ng trong thao tác phân chia tu ` ’ ngu ˜ ’ khi bie ˆ ´ n d ¯ o ˆ ’ i dòng le ˆ ˙ nh, mà he ˆ ˙ vo ’ thu ˙ ’ c hie ˆ ˙ n tru ’ o ´ ’ c khi cha ˙ y mo ˆ ˙ t câu le ˆ ˙ nh nào d ¯ ó(xemdu ’ o ´ ’ i).Giátri ˙ theoma ˘ ˙ cd ¯ i ˙ nhcu ’ abie ˆ ´ nnày-"<Khoa ’ ng_tra ˘ ´ ng><Tab><Ký_tu ˙ ’ _hàng_mo ´ ’ i>". Ne ˆ ´ u thu ’ ’ gõ le ˆ ˙ nh "echo $IFS", ba ˙ n se ˜ nha ˆ ˙ n d ¯ u ’ o ˙ ’ c mo ˆ ˙ t nga ˙ c nhiên nho ’ . 3.6.5 Thu ’ mu ˙ c hie ˆ ˙ n tho ` ’ i và thu ’ mu ˙ c cá nhân Tên cu ’ a thu ’ mu ˙ c hie ˆ ˙ n tho ` ’ i ghi trong bie ˆ ´ n môi tru ’ o ` ’ ng vo ´ ’ i tên PWD, và giá tri ˙ cu ’ a bie ˆ ´ n này thay d ¯ o ˆ ’ i sau mo ˆ ˜ i la ˆ ` n cha ˙ y chu ’ o ’ ng trình cd (cu ˜ ng nhu ’ mo ˆ ˜ i la ˆ ` n thay d ¯ o ˆ ’ i thu ’ mu ˙ c hie ˆ ˙ n tho ` ’ i theo ba ˆ ´ t ky ` cách nào, ví du ˙ , qua Midnight Commander). Tu ’ o ’ ng tu ˙ ’ nhu ’ va ˆ ˙ y tên d ¯ a ˆ ` y d ¯ u ’ (go ˆ ` m ca ’ d ¯ u ’ o ` ’ ng da ˆ ˜ n) cu ’ a thu ’ mu ˙ c cá nhân cu ’ a ngu ’ o ` ’ i dùng, cha ˙ y tie ˆ ´ n trình d ¯ ã cho, ghi trong bie ˆ ´ n HOME. 3.6.6 Câu le ˆ ˙ nh export Khi he ˆ ˙ vo ’ cha ˙ y mo ˆ ˙ t chu ’ o ’ ng trình hay câu le ˆ ˙ nh nào d ¯ ó, nó (he ˆ ˙ vo ’ ) cung ca ˆ ´ p cho chúng mo ˆ ˙ t pha ˆ ` n bie ˆ ´ n môi tru ’ o ` ’ ng. D ¯ e ˆ ’ có the ˆ ’ cung ca ˆ ´ p bie ˆ ´ n môi tru ’ o ` ’ ng cho tie ˆ ´ n trình cha ˙ y tu ` ’ he ˆ ˙ vo ’ , ca ˆ ` n gán giá tri ˙ cho bie ˆ ´ n này vo ´ ’ i le ˆ ˙ nh export, tu ´ ’ c là thay vì kênh giao tác [user]$ name=value ca ˆ ` n gõ: . 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 3 .6 Tham bie ˆ ´ n và các bie ˆ ´ n so ˆ ´ 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. 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