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

    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

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

Tài liệu liên quan