Lịch sử và các bản phân phối HĐH Linux từ trước đến nay phần 8 doc

6 350 0
Lịch sử và các bản phân phối HĐH Linux từ trước đến nay phần 8 doc

Đang tải... (xem toàn văn)

Thông tin tài liệu

3.8 Shell - mo ˆ ˙ t ngôn ngu ˜ ’ la ˆ ˙ p trình 45 • file1 -ot file2 D ¯ úng, ne ˆ ´ u ta ˆ ˙ p tin file1 "già" ho ’ n file1 (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 tin file1 và file2 có cùng mo ˆ ˙ t so ˆ ´ thie ˆ ´ t bi ˙ và chı ’ so ˆ ´ mô ta ’ inode. • -o optname D ¯ úng, ne ˆ ´ u tùy cho ˙ n optname cu ’ 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 ˆ ˜ i string ba ˘ ` 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 ˆ ˜ i string1, theo tu ` ’ d ¯ ie ˆ ’ n, d ¯ u ´ ’ ng tru ’ o ´ ’ c chuo ˆ ˜ i string2 (d ¯ o ˆ ´ i vo ´ ’ i ngôn ngu ˜ ’ hie ˆ ˙ n tho ` ’ i). • string1 > string2 D ¯ úng, ne ˆ ´ u chuo ˆ ˜ i string1, theo tu ` ’ d ¯ ie ˆ ’ n, d ¯ u ´ ’ ng sau chuo ˆ ˜ i string2 (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ôgic AND. D ¯ úng ne ˆ ´ u ca ’ hai bie ˆ ’ u thu ´ ’ c d ¯ e ˆ ` u d ¯ úng. • expression1 -o expression2 Phép lôgíc hoa ˘ ˙ c OR. D ¯ úng ne ˆ ´ u mo ˆ ˙ t trong hai bie ˆ ’ u thu ´ ’ c d ¯ úng. 46 Bash 3.8.3 Toán tu ’ ’ case Da ˙ ng cu ’ a toán tu ’ ’ case nhu ’ sau: case word in [ [(] pattern [ | pattern ] ) list ;; ] + esac Câu le ˆ ˙ nh case d ¯ a ˆ ` u tiên khai trie ˆ ’ n tu ` ’ word, và so sánh nó (word) vo ´ ’ i mo ˆ ˜ i tu ` ’ trong ma ˆ ˜ u pattern theo thu ´ ’ tu ˙ ’ . Sau khi tìm tha ˆ ´ y su ˙ ’ trùng nhau d ¯ a ˆ ` u tiên thì du ` ’ ng vie ˆ ˙ c so sánh la ˙ i, và thu ˙ ’ c hie ˆ ˙ n danh sách list các câu le ˆ ˙ nh d ¯ u ´ ’ ng sau ma ˆ ˜ u d ¯ ã tìm tha ˆ ´ y. Giá tri ˙ tra ’ la ˙ i bo ’ ’ i toán tu ’ ’ này, ba ˘ ` ng 0, ne ˆ ´ u không tìm tha ˆ ´ y su ˙ ’ trùng nhau nào. Trong tru ’ o ` ’ ng ho ˙ ’ p ngu ’ o ˙ ’ c la ˙ i, tra ’ la ˙ i giá tri ˙ mà câu le ˆ ˙ nh cuo ˆ ´ i cùng trong danh sách list d ¯ u ’ a ra. Ví du ˙ su ’ ’ du ˙ ng toán tu ’ ’ case sau la ˆ ´ y tu ` ’ script /etc/rc.d/rc.sysinit (FreeBSD-style): kênh giao tác case "$UTC" in yes|true) CLOCKFLAGS="$CLOCKFLAGS -u"; CLOCKDEF="$CLOCKDEF (utc)"; ;; no|false) CLOCKFLAGS="$CLOCKFLAGS localtime"; CLOCKDEF="$CLOCKDEF (localtime)"; ;; esac Ne ˆ ´ u bie ˆ ´ n so ˆ ´ (UTC) nha ˆ ˙ n giá tri ˙ yes hoa ˘ ˙ c true, thì se ˜ thu ˙ ’ c hie ˆ ˙ n ca ˘ ˙ p le ˆ ˙ nh thu ´ ’ nha ˆ ´ t, nha ˆ ˙ n giá tri ˙ no hoa ˘ ˙ c false - ca ˘ ˙ p thu ´ ’ hai. 3.8.4 Toán tu ’ ’ select Toán tu ’ ’ select cho phép to ˆ ’ chu ´ ’ c ho ˆ ˙ i thoa ˙ i vo ´ ’ i ngu ’ o ` ’ i dùng. Nó có da ˙ ng sau: select name [ in word; ] do list; done Lúc d ¯ a ˆ ` u tu ` ’ ma ˆ ˜ u word hình thành mo ˆ ˙ t danh sách nhu ˜ ’ ng tu ` ’ tu ’ o ’ ng u ´ ’ ng vo ´ ’ i ma ˆ ˜ u này. Ta ˆ ˙ p ho ˙ ’ p nhu ˜ ’ ng tu ` ’ này d ¯ u ’ o ˙ ’ c d ¯ u ’ a vào kênh thông báo lo ˆ ˜ i tiêu chua ˆ ’ n, ho ’ n nu ˜ ’ a mo ˆ ˜ i tu ` ’ d ¯ u ’ o ˙ ’ c d ¯ i kèm vo ´ ’ i mo ˆ ˙ t so ˆ ´ thu ´ ’ tu ˙ ’ . Ne ˆ ´ u ma ˆ ˜ u word bi ˙ bo ’ qua (không có trong toán tu ’ ’ select), thì se ˜ d ¯ u ’ a vào các tham bie ˆ ´ n vi ˙ trí (xem trên) theo mo ˆ ˙ t cách tu ’ o ’ ng tu ˙ ’ . Sau d ¯ ó, da ˆ ´ u nha ˘ ´ c PS3 d ¯ u ’ o ˙ ’ c d ¯ u ’ a ra, và he ˆ ˙ vo ’ cho ` ’ chuo ˆ ˜ i nha ˆ ˙ p vào trên d ¯ a ˆ ` u vào tiêu chua ˆ ’ n. Ne ˆ ´ u chuo ˆ ˜ i nha ˆ ˙ p vào có chu ´ ’ a so ˆ ´ , tu ’ o ’ ng u ´ ’ ng vo ´ ’ i mo ˆ ˙ t trong các so ˆ ´ d ¯ ã hie ˆ ˙ n ra, thì bie ˆ ´ n name se ˜ d ¯ u ’ o ˙ ’ c gán giá tri ˙ ba ˘ ` ng tu ` ’ d ¯ i kèm vo ´ ’ i so ˆ ´ này. Ne ˆ ´ u nha ˆ ˙ p vào mo ˆ ˙ t dòng ro ˆ ˜ ng, thì so ˆ ´ và tu ` ’ se ˜ d ¯ u ’ o ˙ ’ c hie ˆ ˙ n ra them mo ˆ ˙ t la ˆ ` n nu ˜ ’ a. Ne ˆ ´ u nha ˆ ˙ p vào ba ˆ ´ t ky ` mo ˆ ˙ t giá tri ˙ nào khác, thì bie ˆ ´ n name se ˜ nha ˆ ˙ n giá tri ˙ ba ˘ ` ng không. Chuo ˆ ˜ i mà ngu ’ o ` ’ i dùng nha ˆ ˙ p vào, d ¯ u ’ o ˙ ’ c ghi la ˙ i trong bie ˆ ´ n REPLY. Danh sách le ˆ ˙ nh list d ¯ u ’ o ˙ ’ c thu ˙ ’ c hie ˆ ˙ n vo ´ ’ i giá tri ˙ bie ˆ ´ n name d ¯ ã cho ˙ n. Sau d ¯ ây là mo ˆ ˙ t script nho ’ (xin hãy gõ không da ˆ ´ u ne ˆ ´ u console cu ’ a ba ˙ n chu ’ a ho ˆ ˜ tro ˙ ’ vie ˆ ˙ c hie ˆ ’ n thi ˙ Tie ˆ ´ ng Vie ˆ ˙ t): kênh giao tác #!/bin/sh echo "Ba ˙ n thích dùng OS nào?" select var in "Linux" "Gnu Hurd" "Free BSD" "MacOSX" "Solaris" "QNX" "Other"; do break done echo "Ba ˙ n d ¯ ã cho ˙ n $var" 3.8 Shell - mo ˆ ˙ t ngôn ngu ˜ ’ la ˆ ˙ p trình 47 Ghi d ¯ oa ˙ n trên vào mo ˆ ˙ t ta ˆ ˙ p tin (ví du ˙ , select.sh), thay d ¯ o ˆ ’ i d ¯ e ˆ ’ ta ˆ ˙ p tin thành kha ’ thi (ví du ˙ , chmod 755 select.sh), và cha ˙ y (./select.sh). Trên màn hình se ˜ hie ˆ ˙ n ra câu ho ’ i sau: kênh giao tác Ba ˙ n thích dùng OS nào? 1) Linux 3) Free BSD 5) Solaris 7) Other 2) Gnu Hurd 4) MacOSX 6) QNX #? Hãy nha ˆ ´ n mo ˆ ˙ t trong 7 so ˆ ´ d ¯ u ’ a ra (tu ` ’ 1 d ¯ e ˆ ´ n 7). Ne ˆ ´ u ba ˙ n nha ˆ ˙ p 4 (nha ˆ ´ n ca ’ <Enter>), thì se ˜ tha ˆ ´ y thông báo sau: kênh giao tác Ba ˙ n d ¯ ã cho ˙ n MacOSX 3.8.5 Toán tu ’ ’ for Toán tu ’ ’ for làm vie ˆ ˙ c có khác mo ˆ ˙ t chút so vo ´ ’ i for trong cácngôn ngu ˜ ’ la ˆ ˙ p trình thông thu ’ o ` ’ ng. Thay vì ta ˘ ng hoa ˘ ˙ c gia ’ m giá tri ˙ cu ’ a mo ˆ ˙ t bie ˆ ´ n so ˆ ´ nào d ¯ ó (lên hoa ˘ ˙ c xuo ˆ ´ ng) mo ˆ ˙ t d ¯ o ’ n vi ˙ sau mo ˆ ˜ i vòng la ˘ ˙ p, thì nó gán giá tri ˙ tie ˆ ´ p theo trong danh sách tu ` ’ d ¯ u ’ a sa ˘ ˜ n cho bie ˆ ´ n d ¯ ó trong mo ˆ ˜ i vòng la ˘ ˙ p. Nói chung ca ˆ ´ u trúc có da ˙ ng sau: for name in words do list done Quy lua ˆ ˙ t xây du ˙ ’ ng danh sách le ˆ ˙ nh (list) gio ˆ ´ ng trong toán tu ’ ’ if. Ví du ˙ . Script sau ta ˙ o các ta ˆ ˙ p tin fu1, fu2, và fu3: kênh giao tác for a in 1 2 3 ; do touch fu$a done Có the ˆ ’ gõ ba dòng này trên mo ˆ ˙ t dòng le ˆ ˙ nh, ke ˆ ´ t qua ’ thu d ¯ u ’ o ˙ ’ c tu ’ o ’ ng tu ˙ ’ vo ´ ’ i script. Da ˙ ng to ˆ ’ ng quát cu ’ a toán tu ’ ’ for nhu ’ sau: for name [ in word; ] do list ; done D ¯ a ˆ ` u tiên cu ˜ ng xa ’ y ra su ˙ ’ khai trie ˆ ’ n tu ` ’ word theo quy lua ˆ ˙ t khai trie ˆ ’ n bie ˆ ’ u thu ´ ’ c (xem trên). Sau d ¯ ó bie ˆ ´ n name la ˆ ` n lu ’ o ˙ ’ t d ¯ u ’ o ˙ ’ c gán các giá tri ˙ thu d ¯ u ’ o ˙ ’ c tu ` ’ su ˙ ’ khai trie ˆ ` n này, và thu ˙ ’ c hie ˆ ˙ n danh sách le ˆ ˙ nh list trong mo ˆ ˜ i la ˆ ` n nhu ’ va ˆ ˙ y. Ne ˆ ´ u không có "in word", thì danh sách le ˆ ˙ nh list d ¯ u ’ o ˙ ’ c thu ˙ ’ c hie ˆ ˙ n mo ˆ ˙ t la ˆ ` n cho mo ˆ ˜ i tham bie ˆ ´ n vi ˙ trí d ¯ ã d ¯ u ’ a ra. Trên Linux có chu ’ o ’ ng trình seq, tie ˆ ´ p nha ˆ ˙ n hai so ˆ ´ nguyên làm tham so ˆ ´ , và d ¯ u ’ a ra chuo ˆ ˜ i ta ˆ ´ t ca ’ các so ˆ ´ na ˘ ` m giu ˜ ’ a hai so ˆ ´ này (co ˆ ˙ ng thêm ca ’ chúng). Nho ` ’ câu le ˆ ˙ nh này có the ˆ ’ su ’ ’ du ˙ ng for cu ’ a bash làm vie ˆ ˙ c nhu ’ toán tu ’ ’ for trong các ngôn ngu ˜ ’ la ˆ ˙ p trình thông thu ’ o ` ’ ng. D ¯ e ˆ ’ làm d ¯ u ’ o ˙ ’ c d ¯ ie ˆ ` u này chı ’ ca ˆ ` n vie ˆ ´ t vòng la ˘ ˙ p for nhu ’ sau: kênh giao tác for a in $( seq 1 6 ) ; do cat fu$a done Câu le ˆ ˙ nh (script) này d ¯ u ’ a ra màn hình no ˆ ˙ i dung cu ’ a 10 ta ˆ ˙ p tin (ne ˆ ´ u có): "fu1", , "fu10". 48 Bash 3.8.6 Toán tu ’ ’ while và until Toán tu ’ ’ while làm vie ˆ ˙ c tu ’ o ’ ng tu ˙ ’ nhu ’ if, nhu ’ ng vòng la ˘ ˙ p các câu le ˆ ˙ nh trong list2 chı ’ thu ˙ ’ c hie ˆ ˙ n khi d ¯ ie ˆ ` u kie ˆ ˙ n còn d ¯ úng, và se ˜ ngu ` ’ ng khi d ¯ ie ˆ ` u kie ˆ ˙ n không tho ’ a mãn. Ca ˆ ´ u trúc có da ˙ ng nhu ’ sau: while list1 do list2 done Ví du ˙ : kênh giao tác while [ -d directory ] ; do ls -l directory >> logfile echo SEPARATOR >> logfile sleep 60 done Chu ’ o ’ ng trình (script) trên se ˜ theo dõi và ghi la ˙ i no ˆ ˙ i dung cu ’ a thu ’ mu ˙ c directory theo tu ` ’ ng phút ne ˆ ´ u thu ’ mu ˙ c còn to ˆ ` n ta ˙ i. Toán tu ’ ’ until tu ’ o ’ ng tu ˙ ’ nhu ’ toán tu ’ ’ while: until list1 do list2 done D ¯ ie ˆ ’ m khác bie ˆ ˙ t na ˘ ` m o ’ ’ cho ˆ ˜ , su ’ ’ du ˙ ng giá tri ˙ phu ’ d ¯ i ˙ nh cu ’ a d ¯ ie ˆ ` u kie ˆ ˙ n list1, tu ´ ’ c là list2 thu ˙ ’ c hie ˆ ˙ n, ne ˆ ´ u câu le ˆ ˙ nh cuo ˆ ´ i cùng trong danh sách list1 tra ’ la ˙ i tra ˙ ng thái thoát ra khác không. 3.8.7 Các hàm so ˆ ´ Cú pháp He ˆ ˙ vo ’ bash cho phép ngu ’ o ` ’ i dùng ta ˙ o các hàm so ˆ ´ cho mình. Hàm so ˆ ´ làm vie ˆ ˙ c và d ¯ u ’ o ˙ ’ c su ’ ’ du ˙ ng gio ˆ ´ ng nhu ’ các câu le ˆ ˙ nh thông thu ’ o ` ’ ng cu ’ a he ˆ ˙ vo ’ , tu ´ ’ c là chúng ta có the ˆ ’ tu ˙ ’ ta ˙ o các câu le ˆ ˙ nh mo ´ ’ i. Hàm so ˆ ´ có ca ˆ ´ u trúc nhu ’ sau: function name () { list } Ho ’ n nu ˜ ’ a tu ` ’ function không nha ˆ ´ t thie ˆ ´ t pha ’ i có, name xác d ¯ i ˙ nh tên cu ’ a hàm (dùng d ¯ e ˆ ’ go ˙ i hàm), còn pha ˆ ` n thâm cu ’ a hàm so ˆ ´ ta ˙ o bo ’ ’ i danh sách các câu le ˆ ˙ nh list, na ˘ ` m giu ˜ ’ a { và }. Các câu le ˆ ˙ nh này se ˜ d ¯ u ’ o ˙ ’ c thu ˙ ’ c hie ˆ ˙ n mo ˆ ˜ i khi tên name d ¯ u ’ o ˙ ’ c go ˙ i (gio ˆ ´ ng nhu ’ mo ˆ ˙ t le ˆ ˙ nh thông thu ’ o ` ’ ng). Ca ˆ ` n chú ý ra ˘ ` ng hàm có the ˆ ’ là d ¯ e ˆ ˙ qui, tu ´ ’ c là go ˙ i hàm so ˆ ´ o ’ ’ ngay trong pha ˆ ` n thân cu ’ a nó. Hàm so ˆ ´ thu ˙ ’ c hie ˆ ˙ n trong pha ˙ m vi he ˆ ˙ vo ’ hie ˆ ˙ n tho ` ’ i: không có tie ˆ ´ n trình mo ´ ’ i nào d ¯ u ’ o ˙ ’ c cha ˙ y khi biên di ˙ ch hàm so ˆ ´ (khác vo ´ ’ i vie ˆ ˙ c cha ˙ y script). 3.8.8 Tham so ˆ ´ Khi hàm so ˆ ´ d ¯ u ’ o ˙ ’ c go ˙ i d ¯ e ˆ ’ thu ˙ ’ c hie ˆ ˙ n, các tham so ˆ ´ cu ’ a hàm se ˜ tro ’ ’ thành các tham bie ˆ ´ n vi ˙ trí (positional parameters, xem trên) trong tho ` ’ i gian thu ˙ ’ c hie ˆ ˙ n hàm này. Chúng d ¯ u ’ o ˙ ’ c d ¯ a ˘ ˙ t các tên nhu ’ $n, trong d ¯ ó n là so ˆ ´ cu ’ a tham so ˆ ´ mà chúng ta muo ˆ ´ n su ’ ’ du ˙ ng. Vie ˆ ˙ c d ¯ ánh so ˆ ´ ba ˘ ´ t d ¯ a ˆ ` u tu ` ’ 1, nhu ’ va ˆ ˙ y $1 là tham so ˆ ´ d ¯ a ˆ ` u tiên. Cu ˜ ng có the ˆ ’ su ’ ’ du ˙ ng ta ˆ ´ t ca ’ các tham so ˆ ´ mo ˆ ˙ t lúc nho ` ’ $*, và d ¯ u ’ a ra so ˆ ´ thu ´ ’ tu ˙ ’ cu ’ a tham so ˆ ´ nho ` ’ $# Tham so ˆ ´ vi ˙ trí so ˆ ´ 0 không thay d ¯ o ˆ ’ i. Trong khi thu ˙ ’ c hie ˆ ˙ n ne ˆ ´ u ga ˘ ˙ p câu le ˆ ˙ nh no ˆ ˙ i trú return (trong pha ˆ ` n thâm cu ’ a hàm), thì hàm so ˆ ´ se ˜ bi ˙ du ` ’ ng la ˙ i và quye ˆ ` n d ¯ ie ˆ ` u khie ˆ ’ n d ¯ u ’ o ˙ ’ c trao cho câu le ˆ ˙ nh d ¯ u ´ ’ ng sau hàm. Khi thu ˙ ’ c hie ˆ ˙ n xong hàm so ˆ ´ , các tham bie ˆ ´ n vi ˙ trí và tham bie ˆ ´ n d ¯ a ˆ ˙ c bie ˆ ˙ t # se ˜ d ¯ u ’ o ˙ c tra ’ la ˙ i các giá tri ˙ mà chúng có tru ’ o ´ ’ c khi cha ˙ y hàm. Bie ˆ ´ n no ˆ ˙ i bo ˆ ˙ (local) Ne ˆ ´ u muo ˆ ´ n ta ˙ o mo ˆ ˙ t tham bie ˆ ´ n d ¯ i ˙ a phu ’ o ’ ng, có the ˆ ’ su ’ ’ du ˙ ng tu ` ’ khóa local. Cú pháp d ¯ u ’ a ra bie ˆ ´ n d ¯ i ˙ a phu ’ o ’ ng gio ˆ ´ ng he ˆ ˙ t các tham bie ˆ ´ n khác, chı ’ có d ¯ ie ˆ ` u ca ˆ ` n d ¯ u ´ ’ ng sau tu ` ’ khóa local: 3.9 Script cu ’ a he ˆ ˙ vo ’ và le ˆ ˙ nh source 49 local name=value. Du ’ o ´ ’ i d ¯ ây là mo ˆ ˙ t ví du ˙ hàm so ˆ ´ , thu ˙ ’ c hie ˆ ˙ n công vie ˆ ˙ c cu ’ a le ˆ ˙ nh seq d ¯ ã nha ˘ ´ c d ¯ e ˆ ´ n o ’ ’ trên: kênh giao tác seq() { local I=$1; while [ $2 != $I ]; do { echo -n "$I "; I=$(( $I + 1 )) }; done; echo $2 } Ca ˆ ` n chú ý d ¯ e ˆ ´ n tùy cho ˙ n -n cu ’ a echo, nó (tùy cho ˙ n) hu ’ y bo ’ vie ˆ ˙ c ta ˙ o dòng mo ´ ’ i. Ma ˘ ˙ c dù tùy cho ˙ n này không có nhie ˆ ` u ý nghı ˜ a vo ´ ’ i mu ˙ c d ¯ ích chúng ta muo ˆ ´ n o ’ ’ d ¯ ây, nhu ’ ng se ˜ ra ˆ ´ t có ích trong các hàm so ˆ ´ vo ´ ’ i mu ˙ c d ¯ ích khác. Hàm so ˆ ´ tính giai thu ` ’ a fact Mo ˆ ˙ t ví du ˙ khác: kênh giao tác fact() { if [ $1 = 0 ]; then echo 1; else { echo $(( $1 * $( fact $(( $1 1 )) ) )) }; fi } D ¯ ây là hàm so ˆ ´ giai thu ` ’ a, mo ˆ ˙ t ví du ˙ cu ’ a hàm d ¯ e ˆ ˙ qui. Hãy chú ý d ¯ e ˆ ´ n su ˙ ’ khai trie ˆ ’ n so ˆ ´ ho ˙ c, và phép the ˆ ´ các câu le ˆ ˙ nh. 3.9 Script cu ’ a he ˆ ˙ vo ’ và le ˆ ˙ nh source Script cu ’ a he ˆ ˙ vo ’ chı ’ là các ta ˆ ˙ p tin có chu ´ ’ a chuo ˆ ˜ i le ˆ ˙ nh. Tu ’ o ’ ng tu ˙ ’ hàm so ˆ ´ script có the ˆ ’ d ¯ u ’ o ˙ ’ c thu ˙ ’ c hie ˆ ˙ n nhu ’ mo ˆ ˙ t câu le ˆ ˙ nh. Cú pháp truy ca ˆ ˙ p d ¯ e ˆ ´ n các tham so ˆ ´ cu ˜ ng nhu ’ hàm so ˆ ´ . Trong các tru ’ o ` ’ ng ho ˙ ’ p thông thu ’ o ` ’ ng khi cha ˙ y script se ˜ có mo ˆ ˙ t tie ˆ ´ n trình mo ´ ’ i d ¯ u ’ o ˙ ’ c cha ˙ y. D ¯ e ˆ ’ có the ˆ ’ thu ˙ ’ c hie ˆ ˙ n script o ’ ’ trong ba ’ n bash hie ˆ ˙ n tho ` ’ i, ca ˆ ` n su ’ ’ du ˙ ng câu le ˆ ˙ nh source, hay mo ˆ ˙ t da ˆ ´ u cha ˆ ´ m "." (d ¯ o ˆ ` ng nghı ˜ a cu ’ a source). Trong tru ’ o ` ’ ng ho ˙ ’ p này script chı ’ d ¯ o ’ n gia ’ n là mo ˆ ˙ t tham so ˆ ´ cu ’ a le ˆ ˙ nh nói trên. Câu le ˆ ˙ nh se ˜ có da ˙ ng: source filename [arguments] Câu le ˆ ˙ nh này d ¯ o ˙ c và thu ˙ ’ c hie ˆ ˙ n các câu le ˆ ˙ nh có trong ta ˆ ˙ p tin filename trong môi tru ’ o ` ’ ng hie ˆ ˙ n tho ` ’ i, và tra ’ la ˙ i giá tri ˙ , xác d ¯ i ˙ nh bo ’ ’ i câu le ˆ ˙ nh cuo ˆ ´ i cùng cu ’ a filename. Ne ˆ ´ u filename không chu ´ ’ a da ˆ ´ u ga ˙ ch chéo, thì d ¯ u ’ o ` ’ ng da ˆ ˜ n, lie ˆ ˙ t kê trong bie ˆ ´ n so ˆ ´ PATH, se ˜ d ¯ u ’ o ˙ ’ c su ’ ’ du ˙ ng d ¯ e ˆ ’ tìm ta ˆ ˙ p tin có tên filename. Ta ˆ ˙ p tin này không nha ˆ ´ t thie ˆ ´ t pha ’ i kha ’ thi (không nha ˆ ´ t thie ˆ ´ t pha ’ i có bit x). Ne ˆ ´ u trong thu ’ mu ˙ c, lie ˆ ˙ t kê trong PATH, không tìm tha ˆ ´ y ta ˆ ˙ p tin ca ˆ ` n, thì se ˜ tìm nó (ta ˆ ˙ p tin) trong thu ’ mu ˙ c hie ˆ ˙ n tho ` ’ i. Ne ˆ ´ u có các tham so ˆ ´ (d ¯ u ’ a ra arguments, xem d ¯ i ˙ nh da ˙ ng 50 Bash câu le ˆ ˙ nh o ’ ’ trên), thì trong tho ` ’ i gian thu ˙ ’ c hie ˆ ˙ n script chúng se ˜ thành các tham bie ˆ ´ n vi ˙ trí. Ne ˆ ´ u không có tham so ˆ ´ , thì tham bie ˆ ´ n vi ˙ trí không thay d ¯ o ˆ ’ i. Giá tri ˙ (tra ˙ ng thái), mà le ˆ ˙ nh source tra ’ la ˙ i, trùng vo ´ ’ i giá tri ˙ , tra ’ la ˙ i bo ’ ’ i câu le ˆ ˙ nh cuo ˆ ´ i cùng trong script. Ne ˆ ´ u không câu le ˆ ˙ nh nào d ¯ u ’ o ˙ ’ c thu ˙ ’ c hie ˆ ˙ n, hoa ˘ ˙ c không tìm tha ˆ ´ y ta ˆ ˙ p tin filename, thì tra ˙ ng thái thoát ba ˘ ` ng 0. 3.10 Câu le ˆ ˙ nh sh Ba ˙ n luôn luôn có the ˆ ’ cha ˙ y mo ˆ ˙ t ba ’ n sao cu ’ a he ˆ ˙ vo ’ bash nho ` ’ câu le ˆ ˙ nh bash hay sh. Khi này có the ˆ ’ ba ˘ ´ t ba ’ n sao này cha ˙ y mo ˆ ˙ t script nào d ¯ ó, ne ˆ ´ u d ¯ u ’ a tên cu ’ a script nhu ’ mo ˆ ˙ t tham so ˆ ´ cho le ˆ ˙ nh bash. Nhu ’ va ˆ ˙ y, d ¯ e ˆ ’ thu ˙ ’ c hie ˆ ˙ n script myscript ca ˆ ` n d ¯ u ’ a câu le ˆ ˙ nh "sh myscript". Ne ˆ ´ u xem no ˆ ˙ i dung cu ’ a mo ˆ ˙ t ta ˆ ˙ p tin script nào d ¯ ó (nhu ˜ ’ ng ta ˆ ˙ p tin nhu ’ va ˆ ˙ y có ra ˆ ´ t nhie ˆ ` u trên he ˆ ˙ tho ˆ ´ ng), ba ˙ n se ˜ tha ˆ ´ y dòng d ¯ a ˆ ` u tiên có da ˙ ng sau: #!/bin/sh. D ¯ ie ˆ ` u này có nghı ˜ a là, khi chúng ta go ˙ i script d ¯ e ˆ ’ thu ˙ ’ c hie ˆ ˙ n nhu ’ mo ˆ ˙ t le ˆ ˙ nh thông thu ’ o ` ’ ng, thì /bin/sh se ˜ giúp chúng ta "thu xe ˆ ´ p" mo ˙ i thu ´ ’ . Có the ˆ ’ thay the ˆ ´ dòng này bo ’ ’ i liên ke ˆ ´ t d ¯ e ˆ ´ n ba ˆ ´ t ky ` mo ˆ ˙ t chu ’ o ’ ng trình nào, mà se ˜ d ¯ o ˙ c ta ˆ ˙ p tin và thu ˙ ’ c hie ˆ ˙ n các câu le ˆ ˙ nh tu ’ o ’ ng u ´ ’ ng. Ví du ˙ , script trên ngôn ngu ˜ ’ Perl ba ˘ ´ t d ¯ a ˆ ` u bo ’ ’ i dòng có da ˙ ng !/bin/perl. Mo ˆ ˙ t chú ý khác là ký tu ˙ ’ # dùng d ¯ e ˆ ’ vie ˆ ´ t lo ` ’ i chú thích trong script. Ta ˆ ´ t ca ’ nhu ˜ ’ ng gì d ¯ u ´ ’ ng sau ký tu ˙ ’ này d ¯ e ˆ ´ n cuo ˆ ´ i dòng se ˜ d ¯ u ’ o ˙ ’ c coi là chú thích và bi ˙ bash bo ’ qua (tu ´ ’ c là he ˆ ˙ vo ’ se ˜ không xem dòng này là câu le ˆ ˙ nh). Ne ˆ ´ u ba ˙ n muo ˆ ´ n kie ˆ ’ m chu ´ ’ ng la ˙ i tác du ˙ ng cu ’ a ký tu ˙ ’ này, thì hãy nha ˆ ˙ p vào dòng le ˆ ˙ nh mo ˆ ˙ t câu le ˆ ˙ nh ba ˆ ´ t ky ` , và d ¯ a ˘ ˙ t tru ’ o ´ ’ c nó (câu le ˆ ˙ nh) ký tu ˙ ’ #, ví du ˙ "# ls", ba ˙ n se ˜ tha ˆ ´ y ra ˘ ` ng he ˆ ˙ vo ’ bo ’ ’ qua câu le ˆ ˙ nh này. Chúng ta se ˜ du ` ’ ng bài ho ˙ c nga ˘ ´ n go ˙ n ve ˆ ` bash ta ˙ i d ¯ ây. Ta ˆ ´ t nhiên, còn ra ˆ ´ t nhie ˆ ` u va ˆ ´ n d ¯ e ˆ ` quan tro ˙ ng ca ˆ ` n xem xét nhu ’ ng na ˘ ` m ngoài pha ˙ m vi cu ’ a bài ho ˙ c, ví du ˙ , qua ’ n lý tie ˆ ´ n trình, li ˙ ch su ’ ’ câu le ˆ ˙ nh, mô ta ’ ve ˆ ` thu ’ vie ˆ ˙ n readline, tín hie ˆ ˙ u, v.v. . . Các ba ˙ n se ˜ tìm tha ˆ ´ y thông tin ca ˆ ` n thie ˆ ´ t trong các cuo ˆ ´ n hu ’ o ´ ’ ng da ˆ ˜ n khác hoa ˘ ˙ c trên trang man bash. . khác không. 3 .8. 7 Các hàm so ˆ ´ Cú pháp He ˆ ˙ vo ’ bash cho phép ngu ’ o ` ’ i dùng ta ˙ o các hàm so ˆ ´ cho mình. Hàm so ˆ ´ làm vie ˆ ˙ c và d ¯ u ’ o ˙ ’ c su ’ ’ du ˙ ng gio ˆ ´ ng nhu ’ các câu. 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. tu ’ ’ select), thì se ˜ d ¯ u ’ a vào các tham bie ˆ ´ n vi ˙ trí (xem trên) theo mo ˆ ˙ t cách tu ’ o ’ ng tu ˙ ’ . Sau d ¯ ó, da ˆ ´ u nha ˘ ´ c PS3 d ¯ u ’ o ˙ ’ c d ¯ u ’ a ra, và he ˆ ˙ vo ’ cho ` ’ chuo ˆ ˜ i

Ngày đăng: 29/07/2014, 12:21

Mục lục

  • Tua de

  • HÐH Linux: lich su và các ban phân phoi

  • Cài dat HÐH Linux trên cùng máy tính voi Windows

    • Chuan bi cài dat

    • Phòng xa và nhung loi khuyên

    • Phân vùng trên dia và quá trình khoi dong

      • The nào là cau trúc "hình hoc cua dia"

      • Phân vùng và bang phân vùng cua dia

      • Quá trình khoi dong HÐH công ty Microsoft

      • Van de voi các dia lon

      • Lua chon trình khoi dong

        • Trình khoi dong LILO cua HÐH Linux

        • Các trình khoi dong khác

        • Các phuong án khoi dong

        • Chuan bi các phân vùng trên dia

          • Loi khuyên khi tao phân vùng

          • Chuong trình de phân chia o dia

          • Windows NT và Linux: khoi dong qua OS Loader cua NT

          • Su dung trình khoi dong LILO

            • Cài dat và cau hình LILO

            • Cài dat các he dieu hành khác sau Linux

            • Chuyen thu muc /boot lên phân vùng DOS

            • Khoi dong Linux tu MS-DOS bang loadlin.exe

            • Bash

              • He vo là gì?

              • Các ký tu dac biet

Tài liệu cùng người dùng

Tài liệu liên quan