intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Các thao tác trong Hệ điều hành Unix phần 9

Chia sẻ: AFASFAF FSAFASF | Ngày: | Loại File: PDF | Số trang:7

43
lượt xem
2
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Thí dụ: vòng lặp until: - ta viết lại shell_script param ở trên: $cat param until test $# -eq 0 do echo $1 shift done c) các phép tính số học Lệnh let được dùng đẻ thực hiện các phép tính số học:

Chủ đề:
Lưu

Nội dung Text: Các thao tác trong Hệ điều hành Unix phần 9

  1. Copyright(c) by Galaxy CD – http://www.galaxycd.com done Khi giaù trò traû veà cuûa vieäc thöïc hieän command1 vaãn khoâng thoaû maõn ñieàu kieän (false), shell thöïc hieän chuoãi leänh giöõa do…done Leänh false thöôøng hay ñöôïc duøng trong voøng laëp naøy ñeå cho giaù trò false. Thí duï: voøng laëp until: - ta vieát laïi shell_script param ôû treân: $cat param until test $# -eq 0 do echo $1 shift done c) caùc pheùp tính soá hoïc Leänh let ñöôïc duøng ñeû thöïc hieän caùc pheùp tính soá hoïc: Caùc toaùn töû coù theå duøng goàm: + - * / % Thí duï: $integer i=10 j=2 k l let “k=i+j” $echo $k 12 Chuù yù: cuù phaùp let “k=i+j” töông ñöông vôùi ((k=i+j)) hoaëc k=i+j $((l=k*j)); echo $l 24 Leänh let coù theå duøng vôùi caùc toaùn töû so saùnh, keát quaû ñöôïc chöùa trong bieán $?. Caùc toaùn töû so saùnh coù theå duøng laø: = < > == != Thí duï: $((i
  2. Copyright(c) by Galaxy CD – http://www.galaxycd.com do >file$count count=expr $count+1 done $cat create_file2 integer count=1 while let “count file$count count=count+1 done 11.3.3 Ra khoûi moät voøng laëp: Leänh break cho pheùp ra khoûi caùc voøng laëp for, while, until. Thí duï: shell_script stock ghi caùc doøng kyù töï vaøo töø baøn phím leân file lines cho tôùi khi ta goõ töø “END”: $cat stock while true do echo “Enter your line:” read answer if test “$answer” = “END” then break else echo $answer >> lines fi done Chuù yù: break[n] cho pheùp ra khoûi n möùc cuûa caùc voøng laëp loàng. 11.3.4 Boû qua phaàn tieáp theo trong moät voøng laëp: Leänh continue cho pheùp boû qua caùc leänh coøn laïi, quay veà ñaàu voøng laëp. Thí duï: shell_script supprim xoaù taát caû caùc file coù trong danh saùch ñoái, tröø file save vaø source: $cat supprim set -x for i do if test “$i” = “save” -o “$i” = “source” then continue fi echo $i rm $i done $cd appli $lc titi save source toto 58
  3. Copyright(c) by Galaxy CD – http://www.galaxycd.com $supprim * + test titi = save -o titi = source + echo titi titi + rm titi + test save = save -o save = source + continue + test source = save -o source = source + continue + test toto = save -o toto = source + echo toto toto + rm toto $lc save source Baøi taäp: 1. Duøng caùc caáu truùc vaø reõ nhaùnh vieát caùc shell_script sau: a) writemail message userX Chöùc naêng: - gôûi thoâng baùo tröïc tieáp cho userX - neáu ngöôøi ñoù khoâng ñang trong phieân laøm vieäc, gôûi vaøo hoäp thö. Gôïi yù: duøng leänh write, mail, | | b) fileread filename Chöùc naêng: - kieåm tra ñoái coù phaûi laø file hay khoâng - neáu ñuùng, kieåm tra coù phaûi laø file chæ ñoïc (readonly) khoâng - hieän caùc thoâng baùo töông öùng keát quaû c) filesort file1 file2 Chöùc naêng: - ñoïc moät doøng töø baøn phím vaø ghi leân file theo caùch sau: + vaøo cuoái file1 neáu doøng chöùa ít nhaát moät chöõ (letter) + vaøo cuoái file2 neáu doøng chöùa ít nhaát moät soá (number) vaø khoâng chöùa baát kyø moät chöõ. + vaøo file khoâng (null) neáu khaùc hai loaïi treân - kieåm tra soá caùc ñoái, neáu khaùc 2, hieån thò thoâng baùo: “command: filesort file1 file2” Gôïi yù: duøng caùc leänh case, read vaø caùc metacharacter 2. Söû duïng caùc voøng laëp ñaõ hoïc, vieát caùc shell_script sau: a) testdir Chöùc naêng: hieån thò danh saùch caùc thö muïc con trong thö muïc laøm vieäc. 59
  4. Copyright(c) by Galaxy CD – http://www.galaxycd.com Gôïi yù: duøng caùc leänh pwd, for, test b) mkfiles prefix n Chöùc naêng: -taïo n file roãng (ngaàm ñònh laø 5) vôùi teân prefix.n (thí duï: file.1, file.2, file.3 vôùi prefix=file vaø n=3) - hieän doøng khaúng ñònh taïo file “prefix.n” hay khoâng trong voøng laëp. Gôïi yù: duøng if, while, test, read, expr 60
  5. Copyright(c) by Galaxy CD – http://www.galaxycd.com Baøi 12 Tín hieäu vaø ñoàng boä Noäi dung: Caùc tín hieäu cuûa heä thoáng, caùch duøng tín hieäu ñeå ñieàu khieån vaø ñoàng boä caùc tieán trình. 12.1 Quaûn lyù caùc tín hieäu: 12.1.1 Caùc tín hieäu: Trong khi thöïc hieän moät shell_script, caùc tín hieäu sau coù theå phaùt sinh: signal 0 ra khoûi shell (exit of the shell) signal 1 caét lieân laïc vôùi terminal (disconnection) signal 2 Ngaét (thí duï phím DEL) signal 3 Quit (Ctrl |) signal 9 Dieät tieán trình (Kill process) signal 10 Keát thuùc logic moät tieán trình Trong moät chöông trình öùng duïng, baèng caùch duøng leänh trap, ta coù theå ñònh nghóa vieäc caàn xöû lyù khi moät tín hieäu phaùt sinh. Leänh naøy cho pheùp gaùn moät coâng vieäc xöû lyù cho baát cöù moät tín hieäu naøo. 12.1.2 Laäp trình phím DEL Leänh trap khoâng ñoái lieät keâ danh saùch caùc tính hieäu vaø caùc vieäc xöû lyù töông öùng. $trap Cuù phaùp gaùn moät coâng vieäc xöû lyù cho phím DEL: $trap ‘caùc leänh’ 2 Xoùa boû taùc duïng phím DEL: $trap ‘’ 2 Gaùn chöùc naêng ngaàm ñònh (default) cho phím DEL: $trap 2 Thí duï: shell_script uncount hieån thò 5 4 3 2 1 trong caùc khoaûng thôøi gian 5 giaây, neáu ta goõ phím DEL, hieån thò chöõ soá tieáp. $/Icat/ i uncount trap ‘continue’ 2 for i in 5 4 3 2 1 do echo $i sleep 5 done 12.2 Quaûn lyù caùc tieán trình 12.2.1 Chaïy ngaàm (background) moät tieán trình Moät tieán trình seõ chaïy ngaàm neáu ta theâm kyù töï & vaøo sau teân noù khi goïi. Soá cuûa tieán trình (PID) seõ ñöôïc hieån thò treân maøn hình. Thí duï: chaïy shell_script uncount ngaàm: 61
  6. Copyright(c) by Galaxy CD – http://www.galaxycd.com $uncount& [1] 467 Chuù yù: - sau khi cho moät tieán trình chaïy ngaàm, ta laïi coù theå duøng terminal laøm vieäc khaùc. - khoâng coù thoâng baùo khi tieán trình ngaàm keát thuùc, do ñoù khi chaïy shell_script ta coù theå cho theâm thoâng baùo keát thuùc: $(command; echo “END”)& - soá PID cuûa tieán trình ngaàm trong bieán $! - Coù theå ñoåi höôùng vaøo/ra (i/o) cuûa tieán trình ngaàm, traùnh nhieãu maøn hình khi ta laøm vieäc khaùc. 12.2.2 Quaûn lyù caùc tieán trình ngaàm (job control) Leänh: $set -m cho pheùp quaûn lyù caùc tieán trình ñang chaïy ngaàm. Thí duï: $proc1 >> file1 & [1] 478 $proc2 & [2] 481 $proc3 & [3] 490 Hieån thò traïng thaùi cuûa caùc tieán trình ngaàm : $jobs -l [3] +490 running proc3 & [2] -481 done proc2 [1] 478 running proc1 >> file1 & trong ñoù: [n] soá thöù töï tieán trình + tieán trình chaïy cuoái cuøng - tieán trình tröôùc tieán trình cuoái 490 soá PID cuûa tieán trình running tieán trình ñang thöïc hieän done tieán trình ñaõ keát thuùc proc3 & teân leänh goïi 12.2.3 Tieáp tuïc tieán trình sau khi keát thuùc phieân laøm vieäc: Ta coù theå cho tieáp tuïc thöïc hieän caùc tieán trình ngaàm sau khi caét lieân laïc vôùi terminal baèng caùch duøng leänh nohup. Caùc soá lieäu cuûa tieán trình ñöa ra stdout vaø stderr seõ ñöôïc ghi leân file nohup.out Thí duï: $nohup uncount& 62
  7. Copyright(c) by Galaxy CD – http://www.galaxycd.com [1] 478 sending output to nohup.out $exit 12.2.4 Ñôïi keát thuùc tieán trình Baèng caùch duøng leänh wait vôùi ñoái soá laø PID cuûa tieán trình: $wait 467 12.2.5 Dieät moät tieán trình Duøng leänh kill vôùi ñoái soá laø PID cuûa tieán trình: $kill 467 phaùt sinh tín hieäu 15 (ngaàm ñònh) $kill -9 467 phaùt sinh tín hieäu dieät tieán trình Ta cuõng coù theå dieät moät tieán trình theo soá thöù töï cuûa noù trong danh saùch caùc tieán trình ñang chaïy ngaàm : kill %n Thí duï: $kill %1 $jobs [1] + done(143) proc >> file1 & [3] + running uncount & $kill -9 %+ [3] + killed uncount & 12.3 Ñeä quy Taát caû caùc shell_script ñeàu coù tính ñeä quy (recursivity). Thí duï: shell_script dir_tree hieån thò caây thö muïc baét ñaàu töø thö muïc laø ñoái cuûa noù. $cat dir_tree if test -d $1 then echo $1 is a directory for j in $1/* do $0 $j #$0 teân shell_script done fi $dir_tree /usr /usr is a directory /usr/adm is a directory /usr/adm/acct is a directory /usr/adm/acct/fiscal is a directory /usr/adm/acct/nite is a directory /usr/adm/sa is a directory 63
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2