Chu ’ o ’ ng 3 Bash To ˆ ´ t go ˆ ˜ ho ’ n to ˆ ´ t nu ’ o ´ ’ c so ’ n – ca dao tu ˙ c ngu ˜ ’ Vie ˆ ˙ t Nam Trong pha ˆ ` n này chúng ta se ˜ d ¯ e ˆ ` ca ˆ ˙ p d ¯ e ˆ ´ n va ˆ ´ n d ¯ e ˆ ` làm vie ˆ ˙ c vo ´ ’ i Linux o ’ ’ che ˆ ´ d ¯ o ˆ ˙ text, hay còn d ¯ u ’ o ˙ ’ c go ˙ i là console hoa ˘ ˙ c terminal. Nhu ˜ ’ ng ngu ’ o ` ’ i dùng Linux mo ´ ’ i (newbie) thu ’ o ` ’ ng nghı ˜ se ˜ cha ˘ ’ ng bao gio ` ’ làm vie ˆ ˙ c o ’ ’ che ˆ ´ d ¯ o ˆ ˙ này, vì d ¯ ã có giao die ˆ ˙ n d ¯ o ˆ ` ho ˙ a. Tuy nhiên d ¯ ây là mo ˆ ˙ t ý kie ˆ ´ n sai la ˆ ` m, bo ’ ’ i vì ra ˆ ´ t nhie ˆ ` u công vie ˆ ˙ c có the ˆ ’ thu ˙ ’ c hie ˆ ˙ n nhanh và thua ˆ ˙ n tie ˆ ˙ n trong che ˆ ´ d ¯ o ˆ ˙ này ho ’ n là su ’ ’ du ˙ ng giao die ˆ ˙ n d ¯ o ˆ ` ho ˙ a. Và dù sao thì che ˆ ´ d ¯ o ˆ ˙ text cu ’ a HD ¯ H Linux không pha ’ i là che ˆ ´ d ¯ o ˆ ˙ text mo ˆ ˙ t tie ˆ ´ n trình cu ’ a MS-DOS. Vì Linux là HD ¯ H d ¯ a tie ˆ ´ n trình, nên ngay trong che ˆ ´ d ¯ o ˆ ˙ text d ¯ ã có kha ’ na ˘ ng làm vie ˆ ˙ c trong vài cu ’ ’ a so ˆ ’ . Và d ¯ e ˆ ’ soa ˙ n tha ’ o mo ˆ ˙ t ta ˆ ˙ p tin va ˘ n ba ’ n không nha ˆ ´ t thie ˆ ´ t pha ’ i cha ˙ y các trình soa ˙ n tha ’ o lo ´ ’ n và cha ˆ ˙ m cha ˙ p (d ¯ a ˘ ˙ c bie ˆ ˙ t trên các máy có ca ˆ ´ u hình pha ˆ ` n cu ´ ’ ng tha ˆ ´ p) cu ’ a môi tru ’ o ` ’ ng d ¯ o ˆ ` ho ˙ a. 3.1 He ˆ ˙ vo ’ là gì? Chúng ta thu ’ o ` ’ ng nói "ngu ’ o ` ’ i dùng làm vie ˆ ˙ c vo ´ ’ i he ˆ ˙ d ¯ ie ˆ ` u hành". D ¯ ie ˆ ` u này không hoàn toàn d ¯ úng, vì trên thu ˙ ’ c te ˆ ´ "liên he ˆ ˙ " vo ´ ’ i ngu ’ o ` ’ i dùng d ¯ u ’ o ˙ ’ c thu ˙ ’ c hie ˆ ˙ n bo ’ ’ i mo ˆ ˙ t chu ’ o ’ ng trình d ¯ a ˘ ˙ c bie ˆ ˙ t. Có hai da ˙ ng cu ’ a chu ’ o ’ ng trình d ¯ ã d ¯ e ˆ ` ca ˆ ˙ p - he ˆ ˙ vo ’ , hay shell, d ¯ e ˆ ’ làm vie ˆ ˙ c trong che ˆ ´ d ¯ o ˆ ˙ text (giao die ˆ ˙ n dòng le ˆ ˙ nh) và giao die ˆ ˙ n d ¯ o ˆ ` ho ˙ a GUI (Graphical User Interface), thu ˙ ’ c hie ˆ ˙ n "liên he ˆ ˙ " vo ´ ’ i ngu ’ o ` ’ i dùng trong môi tru ’ o ` ’ ng d ¯ o ˆ ` ho ˙ a. Ca ˆ ` n nói ngay ra ˘ ` ng, ba ˆ ´ t ky ` chu ’ o ’ ng trình nào trong Linux có the ˆ ’ kho ’ ’ i d ¯ o ˆ ˙ ng tu ` ’ dòng le ˆ ˙ nh cu ’ a he ˆ ˙ vo ’ (ne ˆ ´ u máy chu ’ X d ¯ ã cha ˙ y), cu ˜ ng nhu ’ qua giao die ˆ ˙ n d ¯ o ˆ ` ho ˙ a. Cha ˙ y chu ’ o ’ ng trình tu ` ’ dòng le ˆ ˙ nh cu ’ a he ˆ ˙ vo ’ tu ’ o ’ ng d ¯ u ’ o ’ ng vo ´ ’ i vie ˆ ˙ c nháy (d ¯ úp) chuo ˆ ˙ t lên bie ˆ ’ u tu ’ o ˙ ’ ng cu ’ a chu ’ o ’ ng trình trong GUI. D ¯ u ’ a các tham so ˆ ´ cho chu ’ o ’ ng trình trên dòng le ˆ ˙ nh tu ’ o ’ ng d ¯ u ’ o ’ ng vo ´ ’ i vie ˆ ˙ c chúng ta kéo và tha ’ cái gì d ¯ ó lên bie ˆ ’ u tu ’ o ˙ ’ ng chu ’ o ’ ng trình trong môi tru ’ o ` ’ ng d ¯ o ˆ ` ho ˙ a. Nhu ’ ng ma ˘ ˙ t khác, mo ˆ ˙ t so ˆ ´ chu ’ o ’ ng trình không the ˆ ’ cha ˙ y o ’ ’ GUI và chı ’ có the ˆ ’ thu ˙ ’ c hie ˆ ˙ n tu ` ’ dòng le ˆ ˙ nh. Nói ngoài le ˆ ` mo ˆ ˙ t chút, tên go ˙ i "he ˆ ˙ vo ’ " bi ˙ pha ’ n d ¯ o ˆ ´ i ra ˆ ´ t nhie ˆ ` u. Theo ý kie ˆ ´ n cu ’ a mo ˆ ˙ t so ˆ ´ chuyên gia ngôn ngu ˜ ’ cu ˜ ng nhu ’ chuyên gia Linux thì nên go ˙ i chu ’ o ’ ng trình này mo ˆ ˙ t cách d ¯ úng ho ’ n là "trình xu ’ ’ lý le ˆ ˙ nh" hay "trình biên di ˙ ch le ˆ ˙ nh". Tuy nhiên, tên go ˙ i "he ˆ ˙ vo ’ " (shell) d ¯ u ’ o ˙ ’ c dùng cho các chu ’ o ’ ng trình dùng d ¯ e ˆ ’ biên di ˙ ch le ˆ ˙ nh trong che ˆ ´ d ¯ o ˆ ˙ text trên mo ˙ i he ˆ ˙ tho ˆ ´ ng UNIX. Trên các he ˆ ˙ tho ˆ ´ ng UNIX d ¯ a ˆ ` u tiên có mo ˆ ˙ t chu ’ o ’ ng trình, go ˙ i là sh, vie ˆ ´ t ta ˘ ´ t cu ’ a shell. Sau d ¯ ó, vài bie ˆ ´ n the ˆ ’ cu ’ a sh d ¯ u ’ o ˙ ’ c phát trie ˆ ’ n và làm to ˆ ´ t ho ’ n, trong d ¯ ó có Bourne shell - phiên ba ’ n mo ’ ’ ro ˆ ˙ ng cu ’ a sh, vie ˆ ´ t bo ’ ’ i Steve Bourne. Du ˙ ’ án GNU (du ˙ ’ án phát trie ˆ ’ n chu ’ o ’ ng trình u ´ ’ ng du ˙ ng cu ’ a Stollman, xem http://www.gnu.org/) sau d ¯ ó cho ra d ¯ o ` ’ i he ˆ ˙ vo ’ bash, tên go ˙ i cu ’ a nó d ¯ u ’ o ˙ ’ c gia ’ i mã ra là Bourne-again shell, tu ´ ’ c là "la ˙ i là he ˆ ˙ vo ’ This is trial version www.adultpdf.com 28 Bash cu ’ a Bourne". Trên tie ˆ ´ ng Anh d ¯ ây là mo ˆ ˙ t cách cho ’ i chu ˜ ’ , vì tu ` ’ Bourne d ¯ o ˙ c gio ˆ ´ ng vo ´ ’ i tu ` ’ borne (sinh ra, d ¯ e ’ ra), và nhu ’ the ˆ ´ bash còn có the ˆ ’ gia ’ i mã là "shell d ¯ u ’ o ˙ ’ c sinh ra la ˆ ` n hai". Tie ˆ ´ p theo chúng ta se ˜ chı ’ xem xét bash, vì the ˆ ´ o ’ ’ du ’ o ´ ’ i khi nói d ¯ e ˆ ´ n he ˆ ˙ vo ’ , xin nga ˆ ` m hie ˆ ’ u d ¯ ó là bash Tu ˙ ’ mo ˆ ˙ t mình bash không thu ˙ ’ c hie ˆ ˙ n mo ˆ ˙ t công vie ˆ ˙ c u ´ ’ ng du ˙ ng nào. Nhu ’ ng nó ho ˆ ˜ tro ˙ ’ vie ˆ ˙ c thu ˙ ’ c thi mo ˙ i chu ’ o ’ ng trình khác, tu ` ’ vie ˆ ˙ c tìm kie ˆ ´ m chu ’ o ’ ng trình d ¯ u ’ o ˙ ’ c go ˙ i, cha ˙ y chúng d ¯ e ˆ ´ n vie ˆ ˙ c to ˆ ’ chu ´ ’ c du ˜ ’ lie ˆ ˙ u d ¯ a ˆ ` u vào/d ¯ a ˆ ` u ra. Ngoài ra, he ˆ ˙ vo ’ chi ˙ u trách nhie ˆ ˙ m ve ˆ ` công vie ˆ ˙ c vo ´ ’ i các bie ˆ ´ n môi tru ’ o ` ’ ng và thu ˙ ’ c hie ˆ ˙ n mo ˆ ˙ t vài bie ˆ ´ n d ¯ o ˆ ’ i (the ˆ ´ , hoán d ¯ o ˆ ’ i vi ˙ trí) các tham so ˆ ´ le ˆ ˙ nh. Nhu ’ ng tính cha ˆ ´ t chính cu ’ a he ˆ ˙ vo ’ , nho ` ’ d ¯ ó d ¯ u ’ a he ˆ ˙ vo ’ tro ’ ’ thành mo ˆ ˙ t công cu ˙ ma ˙ nh cu ’ a ngu ’ o ` ’ i dùng, d ¯ ó là nó bao go ˆ ` m mo ˆ ˙ t ngôn ngu ˜ ’ la ˆ ˙ p trình d ¯ o ’ n gia ’ n. Trong toán ho ˙ c tu ` ’ lâu d ¯ ã d ¯ u ’ o ˙ ’ c chu ´ ’ ng minh ra ˘ ` ng, ba ˆ ´ t ky ` mo ˆ ˙ t thua ˆ ˙ t toán nào cu ˜ ng có the ˆ ’ d ¯ u ’ o ˙ ’ c xây du ˙ ’ ng tu ` ’ hai (ba) thao tác co ’ ba ’ n và mo ˆ ˙ t toán tu ’ ’ d ¯ ie ˆ ` u kie ˆ ˙ n. He ˆ ˙ vo ’ cung ca ˆ ´ p các toán tu ’ ’ d ¯ ie ˆ ` u kie ˆ ˙ n và toán tu ’ ’ vòng la ˘ ˙ p. Nó su ’ ’ du ˙ ng các tie ˆ ˙ n ích và chu ’ o ’ ng trình khác (có trong thành pha ˆ ` n he ˆ ˙ d ¯ ie ˆ ` u hành, hay d ¯ u ’ o ˙ ’ c cài d ¯ a ˘ ˙ t riêng) d ¯ e ˆ ’ làm các thao tác co ’ ba ’ n cho ngôn ngu ˜ ’ la ˆ ˙ p trình mà nó ho ˆ ˜ tro ˙ ’ . D ¯ o ˆ ` ng tho ` ’ i cho phép d ¯ u ’ a các tham so ˆ ´ cu ˜ ng nhu ’ ke ˆ ´ t qua ’ làm vie ˆ ˙ c cu ’ a mo ˆ ˙ t chu ’ o ’ ng trình to ´ ’ i các chu ’ o ’ ng trình khác hay to ´ ’ i ngu ’ o ` ’ i dùng. Ke ˆ ´ t qua ’ thu d ¯ u ’ o ˙ ’ c là mo ˆ ˙ t ngôn ngu ˜ ’ la ˆ ˙ p trình ma ˙ nh. D ¯ ây cu ˜ ng là su ´ ’ c ma ˙ nh và là mo ˆ ˙ t trong các chu ´ ’ c na ˘ ng chính cu ’ a he ˆ ˙ vo ’ . Tru ’ o ´ ’ c khi ba ˘ ´ t d ¯ a ˆ ` u pha ˆ ` n này, ba ˙ n d ¯ o ˙ c nên bie ˆ ´ t các to ˆ ’ ho ˙ ’ p phím chính, su ’ ’ du ˙ ng d ¯ e ˆ ’ d ¯ ie ˆ ` u khie ˆ ’ n vie ˆ ˙ c nha ˆ ˙ p du ˜ ’ lie ˆ ˙ u trên dòng le ˆ ˙ nh. Nên nho ´ ’ ít nha ˆ ´ t cách su ’ ’ du ˙ ng cu ’ a các (to ˆ ’ ho ˙ ’ p) phím <Ctrl>+<C>, <Ctrl>+<D>, <Tab> và các phím có mu ˜ i tên. 3.2 Các ký tu ˙ ’ d ¯ a ˘ ˙ c bie ˆ ˙ t He ˆ ˙ vo ’ bash su ’ ’ du ˙ ng mo ˆ ˙ t vài ký tu ˙ ’ tu ` ’ bo ˆ ˙ 256 ký tu ˙ ’ ASCII cho các mu ˙ c d ¯ ính riêng, hoa ˘ ˙ c d ¯ e ˆ ’ bie ˆ ’ u thi ˙ các thao tác nào d ¯ ó, hoa ˘ ˙ c d ¯ e ˆ ’ bie ˆ ´ n d ¯ o ˆ ’ i bie ˆ ’ u thu ´ ’ c. Các ký tu ˙ ’ này bao go ˆ ` m: ‘ ~ ! @ # $ % ^ & * ( ) _ [ ] { } : ; ’ " / \ > < và ký tu ˙ ’ vo ´ ’ i mã 0, ký tu ˙ ’ hàng mo ´ ’ i (ta ˙ o ra khi nha ˆ ´ n phím <Enter>) và ký tu ˙ ’ khoa ’ ng tra ˘ ´ ng. Phu ˙ thuo ˆ ˙ c vào tình huo ˆ ´ ng các ký tu ˙ ’ d ¯ a ˘ ˙ c bie ˆ ˙ t này có the ˆ ’ su ’ ’ du ˙ ng vo ´ ’ i ý nghı ˜ a d ¯ a ˘ ˙ c bie ˆ ˙ t cu ’ a nó hay su ’ ’ du ˙ ng nhu ’ mo ˆ ˙ t ký tu ˙ ’ thông thu ’ o ` ’ ng. Nhu ’ ng trong d ¯ a so ˆ ´ các tru ’ o ` ’ ng ho ˙ ’ p không khuyên dùng các ký tu ˙ ’ vo ´ ’ i giá tri ˙ thu ´ ’ hai. Tru ’ o ´ ’ c he ˆ ´ t d ¯ ó là vie ˆ ˙ c su ’ ’ du ˙ ng chúng trong tên ta ˆ ˙ p tin và thu ’ mu ˙ c. Tuy nhiên các ký tu ˙ ’ _, - và . (da ˆ ´ u ga ˙ ch du ’ o ´ ’ i, ga ˙ ch ngang và da ˆ ´ u cha ˆ ´ m) thu ’ o ` ’ ng d ¯ u ’ o ˙ ’ c su ’ ’ du ˙ ng trong tên ta ˆ ˙ p tin, và d ¯ ây là mo ˆ ˙ t ví du ˙ cho tha ˆ ´ y không pha ’ i lúc nào chúng cu ˜ ng có giá tri ˙ d ¯ a ˘ ˙ c bie ˆ ˙ t. Trong tên ta ˆ ˙ p tin chı ’ da ˆ ´ u cha ˆ ´ m (.) và ga ˙ ch chéo (/) có giá tri ˙ d ¯ a ˘ ˙ c bie ˆ ˙ t. Ký hie ˆ ˙ u ga ˙ ch chéo dùng d ¯ e ˆ ’ phân chia tên các thu ’ mu ˙ c trong d ¯ u ’ o ` ’ ng da ˆ ˜ n, còn da ˆ ´ u cha ˆ ´ m có giá tri ˙ d ¯ a ˘ ˙ c bie ˆ ˙ t khi nó là ký tu ˙ ’ d ¯ a ˆ ` u tiên trong tên ta ˆ ˙ p tin (cho bie ˆ ´ t ta ˆ ˙ p tin là "a ˆ ’ n"). Vie ˆ ˙ c d ¯ u ’ a ngay ta ˆ ´ t ca ’ ý nghı ˜ a d ¯ a ˘ ˙ c bie ˆ ˙ t cu ’ a nhu ˜ ’ ng ký tu ˙ ’ này và các tình huo ˆ ´ ng su ’ ’ du ˙ ng chúng ta ˙ m tho ` ’ i không có ích. Chúng ta se ˜ xem xét chúng da ˆ ` n da ˆ ` n trong các pha ˆ ` n sau, khi ca ˆ ` n su ’ ’ du ˙ ng d ¯ e ˆ ´ n. Tuy nhiên, 3 ký hie ˆ ˙ u có ý nghı ˜ a lo ´ ’ n và ca ˆ ` n d ¯ e ˆ ` ca ˆ ˙ p d ¯ e ˆ ´ n d ¯ a ˆ ` u tiên. Ký hie ˆ ˙ u \ (ga ˙ ch chéo ngu ’ o ˙ ’ c) có the ˆ ’ go ˙ i là "ký hie ˆ ˙ u xóa bo ’ ý nghı ˜ a d ¯ a ˘ ˙ c bie ˆ ˙ t" cho ba ˆ ´ t ky ` ký tu ˙ ’ d ¯ a ˘ ˙ c bie ˆ ˙ t nào, d ¯ u ´ ’ ng ngay sau \. Ví du ˙ , ne ˆ ´ u muo ˆ ´ n su ’ ’ du ˙ ng khoa ’ ng tra ˘ ´ ng trong tên ta ˆ ˙ p tin, thì chúng ta ca ˆ ` n d ¯ a ˘ ˙ t tru ’ o ´ ’ c ký tu ˙ ’ khoa ’ ng tra ˘ ´ ng d ¯ ó mo ˆ ˙ t da ˆ ´ u ˙ Ví du ˙ , câu le ˆ ˙ nh sau: kênh giao tác teppi82@teppi:~$ cp lennon_imagine lennon\ imagine Các ký tu ˙ ’ ’ và " (ngoa ˘ ˙ c d ¯ o ’ n và ngoa ˘ ˙ c kép) có the ˆ ’ go ˙ i là "các ký tu ˙ ’ trích da ˆ ˜ n". Mo ˆ ˜ i ký tu ˙ ’ này luôn luôn d ¯ u ’ o ˙ ’ c su ’ ’ du ˙ ng trong mo ˆ ˙ t ca ˘ ˙ p vo ´ ’ i ba ’ n sao cu ’ a chính nó d ¯ e ˆ ’ d ¯ óng khung mo ˆ ˙ t bie ˆ ’ u thu ´ ’ c nào d ¯ ó, gio ˆ ´ ng nhu ’ trong các va ˘ n ba ’ n, sách báo, . . . thông thu ’ o ` ’ ng. Ne ˆ ´ u nhu ’ mo ˆ ˙ t d ¯ oa ˙ n This is trial version www.adultpdf.com 3.3 Thu ˙ ’ c thi các câu le ˆ ˙ nh 29 va ˘ n ba ’ n nào d ¯ ó d ¯ a ˘ ˙ t trong ngoa ˘ ˙ c d ¯ o ’ n, thì ta ˆ ´ t ca ’ các ký tu ˙ ’ na ˘ ` m trong ngoa ˘ ˙ c d ¯ o ’ n này có giá tri ˙ nhu ’ các ký tu ˙ ’ thông thu ’ o ` ’ ng, khôn mo ˆ ˙ t ký tu ˙ ’ nào có ý nghı ˜ a d ¯ a ˘ ˙ c bie ˆ ˙ t. Tro ’ ’ la ˙ i vo ´ ’ i ví du ˙ su ’ ’ du ˙ ng khoa ’ ng tra ˘ ´ ng trong tên ta ˆ ˙ p tin o ’ ’ trên, có the ˆ ’ nói, ne ˆ ´ u muo ˆ ´ n d ¯ a ˘ ˙ t ta ˆ ˙ p tin cái tên "lennon imagine" ca ˆ ` n d ¯ u ’ a tên d ¯ ó vào da ˆ ´ u ngoa ˘ ˙ c: kênh giao tác teppi82@teppi:~$ cp lennon_imagine ’lennon imagine’ Su ˙ ’ khác nhau trong cách su ’ ’ du ˙ ng ký tu ˙ ’ ’ và " d ¯ ó là, trong ngoa ˘ ˙ c d ¯ o ’ n ma ˆ ´ t ý nghı ˜ a d ¯ a ˘ ˙ c bie ˆ ˙ t ta ˆ ´ t ca ’ các ký tu ˙ ’ , còn trong ngoa ˘ ˙ c kép - ta ˆ ´ t ca ’ chúng ngoa ˙ i tru ` ’ $, ’ và \ (da ˆ ´ u d ¯ ô la, ngoa ˘ ˙ c d ¯ o ’ n và da ˆ ´ u ga ˙ ch ngu ’ o ˙ ’ c). 3.3 Thu ˙ ’ c thi các câu le ˆ ˙ nh Nhu ’ d ¯ ã nói o ’ ’ trên, mo ˆ ˙ t trong các chu ´ ’ c na ˘ ng chính cu ’ a he ˆ ˙ vo ’ là to ˆ ’ chu ´ ’ c vie ˆ ˙ c thu ˙ ’ c hie ˆ ˙ n các câu le ˆ ˙ nh mà ngu ’ o ` ’ i dùng d ¯ u ’ a vào trên dòng le ˆ ˙ nh. He ˆ ˙ vo ’ , nói riêng, cung ca ˆ ´ p cho ngu ’ o ` ’ i dùng hai thao tác d ¯ a ˘ ˙ c bie ˆ ˙ t d ¯ e ˆ ’ to ˆ ’ chu ´ ’ c vie ˆ ˙ c d ¯ u ’ a các câu le ˆ ˙ nh trên dòng le ˆ ˙ nh: ; và &. 3.3.1 Thao tác ; Ma ˘ ˙ c dù ngu ’ o ` ’ i dùng thu ’ o ` ’ ng chı ’ nha ˆ ˙ p trên dòng le ˆ ˙ nh tu ` ’ ng câu le ˆ ˙ nh mo ˆ ˙ t, nhu ’ ng còn có the ˆ ’ d ¯ u ’ a vào dòng le ˆ ˙ nh d ¯ ó ngay la ˆ ˙ p tu ´ ’ c vài câu le ˆ ˙ nh, và chúng se ˜ thu ˙ ’ c hie ˆ ˙ n la ˆ ` n lu ’ o ˙ ’ t tu ` ’ câu le ˆ ˙ nh này d ¯ e ˆ ´ n câu le ˆ ˙ nh khác. D ¯ e ˆ ’ làm d ¯ u ’ o ˙ ’ c d ¯ ie ˆ ` u này ca ˆ ` n su ’ ’ du ˙ ng ký tu ˙ ’ d ¯ a ˘ ˙ c bie ˆ ˙ t - ;. Ne ˆ ´ u dùng ký tu ˙ ’ này d ¯ e ˆ ’ phân chia các câu le ˆ ˙ nh, thì câu le ˆ ˙ nh tie ˆ ´ p theo se ˜ d ¯ u ’ o ˙ ’ c coi nhu ’ tham so ˆ ´ cu ’ a le ˆ ˙ nh phía tru ’ o ´ ’ c. Nhu ’ va ˆ ˙ y, ne ˆ ´ u nha ˆ ˙ p vào dòng le ˆ ˙ nh cái gì d ¯ ó gio ˆ ´ ng nhu ’ sau: kênh giao tác teppi82@teppi:~$ command1 ; command2 thì he ˆ ˙ vo ’ d ¯ a ˆ ` u tiên se ˜ thu ˙ ’ c hie ˆ ˙ n câu le ˆ ˙ nh command1, cho ` ’ cho le ˆ ˙ nh d ¯ ó hoàn thành, sau d ¯ ó cha ˙ y command2, cho ` ’ le ˆ ˙ nh hoàn thành, sau d ¯ ó la ˙ i d ¯ u ’ a ra dòng nha ˆ ˙ p le ˆ ˙ nh và cho ` ’ các hành d ¯ o ˆ ˙ ng tie ˆ ´ p theo cu ’ a ngu ’ o ` ’ i dùng. 3.3.2 Thao tác & Thao tác & d ¯ u ’ o ˙ ’ c dùng d ¯ e ˆ ’ to ˆ ’ chu ´ ’ c vie ˆ ˙ c thu ˙ ’ c hie ˆ ˙ n các câu le ˆ ˙ nh trong che ˆ ´ d ¯ o ˆ ˙ ne ˆ ` n sau. Ne ˆ ´ u d ¯ a ˘ ˙ t da ˆ ´ u & ngay sau câu le ˆ ˙ nh, thì he ˆ ˙ vo ’ se ˜ tra ’ la ˙ i quye ˆ ` n d ¯ ie ˆ ` u khie ˆ ’ n cho ngu ’ o ` ’ i dùng ngay sau khi cha ˙ y câu le ˆ ˙ nh, mà không d ¯ o ˙ ’ i cho câu le ˆ ˙ nh d ¯ ó hoàn thành. Ví du ˙ , ne ˆ ´ u nha ˆ ˙ p vào dòng le ˆ ˙ nh "command1 & command2 &", thì he ˆ ˙ vo ’ cha ˙ y câu le ˆ ˙ nh command1, ngay la ˆ ˙ p tu ´ ’ c cha ˙ y le ˆ ˙ nh command2, và sau d ¯ ó không cha ˆ ˙ m tre ˆ ˜ tra ’ la ˙ i dòng nha ˆ ˙ p le ˆ ˙ nh cho ngu ’ o ` ’ i dùng. 3.3.3 Thao tác && và || Cácthaotác&&và||lánhu ˜ ’ ngthaotác d ¯ ie ˆ ` ukhie ˆ ’ n.Ne ˆ ´ utrêndòng le ˆ ˙ nhlà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 ˙ ng command1 || 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 This is trial version www.adultpdf.com 30 Bash 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 ˆ ˙ 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 D ¯ a ˆ ` u vào/d ¯ a ˆ ` u ra tiêu chua ˆ ’ n 3.4.1 Dòng du ˜ ’ lie ˆ ˙ u vào-ra Khi mo ˆ ˙ t chu ’ o ’ ng trình d ¯ u ’ o ˙ ’ 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 ˆ ´ t 1 vo ´ ’ 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 ls vo ´ ’ 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, ls d ¯ 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 ˆ ˙ 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 ˆ ˙ nh echo và cat. 3.4.2 Le ˆ ˙ nh echo Câu le ˆ ˙ nh echo dù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: 1 gio ˆ ´ ng liên ke ˆ ´ t hóa ho ˙ c This is trial version www.adultpdf.com 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 ˆ ˙ nh cat o ’ ’ 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 ˆ ˙ nh cat hu ’ o ´ ’ ng to ´ ’ i d ¯ a ˆ ` u ra tiêu chua ˆ ’ n. D ¯ e ˆ ’ chu ´ ’ ng minh là le ˆ ˙ 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 ˆ ˙ nh cat khô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 ˆ ˙ nh cat, 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 ˆ ˙ nh cat. Ne ˆ ´ u nha ˆ ´ n to ˆ ’ ho ˙ ’ p phím <Ctrl>+<D>, mà dùng d ¯ e ˆ ’ ngu ` ’ ng vie ˆ ˙ 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 ˆ ˙ nh cat, 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 ˆ ˙ nh cat se ˜ 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. 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 ˆ ˙ nh ls 2 se ˜ d ¯ u ’ o ˙ ’ c ghi vào ta ˆ ˙ p tin /home/maikhai/ls.txt; khi này ne ˆ ´ u ta ˆ ˙ p tin 2 thu ’ mu ˙ c hie ˆ ˙ n tho ` ’ i This is trial version www.adultpdf.com 32 Bash 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 ˆ ˙ 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.txt vu ` ’ a ta ˙ o o ’ ’ trên to ´ ’ i cu ’ ’ a so ˆ ’ terminal thu ´ ’ hai 3 có 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 tin ls.txt nhu ’ 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 ˆ ˙ 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 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 3 ba ˙ n ca ˆ ` n dùng to ˆ ’ ho ˙ ’ p phím <Ctrl>+<Alt>+<F2> d ¯ e ˆ ’ chuye ˆ ’ n to ´ ’ i cu ’ ’ a so ˆ ’ terminal này và d ¯ a ˘ ng nha ˆ ˙ p tru ’ o ´ ’ c This is trial version www.adultpdf.com 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á This is trial version www.adultpdf.com 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 This is trial version www.adultpdf.com 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ùng vo ´ ’ 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 This is trial version www.adultpdf.com 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 This is trial version www.adultpdf.com . sau d ¯ ó không cha ˆ ˙ m tre ˆ ˜ tra ’ la ˙ i dòng nha ˆ ˙ p le ˆ ˙ nh cho ngu ’ o ` ’ i dùng. 3. 3 .3 Thao tác && và || Cácthaotác&&và||lánhu ˜ ’ ngthaotác d ¯ ie ˆ ` ukhie ˆ ’ n.Ne ˆ ´ utrêndòng. tru ’ o ´ ’ c This is trial version www.adultpdf.com 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. le ˆ ˙ nh echo: kênh giao tác [user]$ echo $name This is trial version www.adultpdf.com 36 Bash Ba ’ ng 3. 2: Thay the ˆ ´ các tham bie ˆ ´ n d ¯ a ˘ ˙ c bie ˆ ˙ t Tham bie ˆ ´ n Quy lua ˆ ˙ t