Bài giảng Hệ điều hành Unix/Linux - Bài 6: Lập trình trên Linux - Đặng Ngọc Cường

pdf 62 trang phuongnguyen 4270
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Hệ điều hành Unix/Linux - Bài 6: Lập trình trên Linux - Đặng Ngọc Cường", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_he_dieu_hanh_unixlinux_bai_6_lap_trinh_tren_linux.pdf

Nội dung text: Bài giảng Hệ điều hành Unix/Linux - Bài 6: Lập trình trên Linux - Đặng Ngọc Cường

  1. Lập trình trên Linux
  2.  Gi i thi u v shell  Các thành ph n c a ngôn ng shell  Shell scripts - Lp trình shell  Lp trình C/C++ trên Linux
  3. GUI xterm Shell console bash csh Kernel KDE ksh GNOME
  4.  Shell (h v) là mt môi tr ưng t ươ ng tác màưi dùng có th giao ti p v i h u hành.  Linux cung c p m t s ư : C shell (csh), Korn shell (ksh), và Bourne shell (sh), BASH shell (bash) ,  BASH (Bourn Again Shell ) là shell m c nh trong Linux.  Shell có th di n d ch l nh và cho phép ng ưi dùng lp trình script nh ư m t ngôn ng lp trình.
  5.  Linux cho phép chuy n i gi a nhi u shell ho c là các console o (Virtual console) s dng l nh chsh .  Cú pháp: chsh [-s ] [-l] [username]  Trong ó:  -l : li t kê các lo i shell hi n có (thông tin các shell ch a trong t p tin /etc/shells ).  Ví d: chuy n sang c shell  $ chsh csh ↵
  6. a  Tươ ng tác, di n d ch l nh : shell i ng ưi s dng gõ các l nh t i d u nh c, sau ó gi t i h th ng yêu c u t lnh nh n ưc.  t bi n môi tr ưng i v i m i ng ưi s dng  Lp trình  Shell cung c p t p h p các l nh t ó có th vi t ch ươ ng trình (ưc g i là shell script).  Ngoài nh ng l nh ơ n gi n c a h th ng, shell còn ưc b sung thêm các c u trúc ph c t p nh ư iu khi n r nhánh (if/case), vòng l p (for/while).
  7.  Shell có th ưc s dng nh ư m t ngôn ng lp trình g i là ngôn ng shell. Các ch ươ ng trình ưc vi t và thông d ch b i shell g i là shell script .  Có hai cách vi t ch ươ ng trình iu khi n shell:  Vi t ch ươ ng trình ngay t dòng l nh.  Có th gp các l nh vào m t t p tin và yêu c u shell th c th c thi t p tin này nh ư m t ch ươ ng trình.
  8.  Ví d tìm và hi n th tp tin mà ni dung có ch a chu i ‘main()’. Thay vì dùng l nh grep tìm ra tng file sau ó s dng l nh more hi n th . Ta có th u khi n shell t ng nh ư sau:  $ for file in * >do > if [ $(grep –l ‘main()’ $file)] > then > more $file > fi >done
  9.  Nh ưc im c a vi c iu khi n shell t dòng l nh là khó ly l i kh i l nh tr ưc ó sa i và th c thi m t ln n a.  d bo trì ta có th ư ác l nh vào m t t p tin và yêu c u shell c n i dung t p tin th c thi.  Ví d: docfile.sh #!/bin/bash for file in * do if [ $(grep –l ‘main()’ $file) ]; then more $file fi done
  10. ư  Môi tr ưng shell là tt c các thi t l p giúp cho vi c ch y ch ươ ng trình ưc chính xác.  Bao g m:  Các t p tin kh i t o shell  Các bi n shell  Th c hi n các tính toán s hc  Gán bí danh
  11. o  Khi shell ưc kh i ng, nóc các files c u hình sau:  /etc/profile : các thi t l p h th ng chung  ~/.bash_profile: các thi t l p c a ng ưi dùng  ~/.bashrc: tp tin kh i ng trong m t phiên làm vi c riêng bi t.  ~/.bash_login: các thi t l p ng nh p  ~/.bash_history : các l ch s các câu l nh ã th c hi n
  12. o  Ch a t t c các thi t l p áp d ng n t t c tr ưng ng ưi dùng.  Khi ưc tri u g i t ươ ng tác, shell c các ch th (câu l nh) trong / etc/profile . ây th ưng là các thi t lp các bi n shell nh ư PATH, USER, MAIL, HOSTNAME và HISTSIZE .  Trên m t s h th ng, giá tr umask cng ưc c u hình trong / etc/profile .
  13. o # System wide environment and startup # programs, for login setup PATH=$PATH:/usr/X11R6/bin USER="`id −un`" LOGNAME=$USER HOSTNAME=`/bin/hostname` export PATH USER LOGNAME HOSTNAME PS1 # Source initialization files for specific # programs (ls, vim, less, ) for i in /etc/profile.d/*.sh ; do if [ −r "$i" ]; then . $i fi done
  14. a  Trên h th ng /etc/profile ch ưưng shell và các thi t l p kh i ng ch ươ ng trình, trong khi ó /etc/bashrc ch a các nh ngh a h th ng chung cho các hàm và bí danh shell.  Tp tin /etc/bashrc cng có th cp n trong /etc/profile ho c trong các t p tin kh i t o shell riêng bi t c a ng ưi dùng.
  15. a alias ll='ls −l' alias dir='ls −ba' alias c='clear' alias mroe='more' alias ls='ls −−color' pskill(){ pid=$(ps −ax | grep $1) echo −n "killing $1 (process $pid) " kill −9 $pid echo "slaughtered." }
  16. ao  Tp tin này ch a các thi t l p khi ng ưi dùng login vào h th ng.  Ví d: # file protection # all to me, read to group and others umask 002 # miscellaneous w cal `date +"%m"` `date +"%Y"`
  17.  so n th o m t ch ươ ng trình shell có th s dng b t k trình so n th o v n b n nào(ch ng hn: vi, emasc, )  Các thành ph n c ơ b n c a ngôn ng shell:  Cu trúc shell scripts  Bi n shell: ki u s , chu i, tham s và bi n môi tr ưng.  iu ki n: ki m tra bi u th c lôgic b ng shell  Cu trúc iu khi n ch ươ ng trình : if, case, while,  Hàm  Các l nh n i t i (built-in)
  18.  Mt shell scripts c ơ b n g m:  Dòng u tiên th ưng cho bi t shell ưc s dng và gi trình thông d ch shell script t ươ ng ng (ví d: #!/bin/bash ).  Các chú thích b t u v i d u th ng (#) .  Các dòng còn l i là các l nh c a Linux ho c các c u trúc iu khi n,  Th c thi shell script:  C1:  t quy n execute: $ chmod a+x  Ch y shell script: $ ./  C2 : $ .
  19. a  Cú pháp: echo [-n|e] [bi u th c]  Dùng hi n th giá tr các bi n, bi u th c ho c chu i ra màn hình.  Trong ó:  Tùy chon –n : không xu ng dòng sau khi in ra.  -e: N u bi u th c là chu i t trong c p nháy kép có th s dng các ký t c bi t nh ư \n, \b, \t, \0n (ký t có mã ASCCI là n),  Ví d:  echo “How are you?”  echo “Current user: $USER”
  20. oa  Cú pháp: read [bi n 2] [bi n 3]  Dùng c d li u t bàn phím.  Ví dc và in d li u.  $ vi vidu1.sh #!/bin/bash #Vi du s ử dụng lenh read va echo echo “Nhap mot so: ” read num echo “So vua nhap la: $num”
  21. o  $ vi hello.sh #!/bin/bash #Day la chu thich: chuong trinh hello.sh echo “Nhap vao ten ban:" read hoten echo “Xin chao $hoten, chuc mot ngay vui ve!“ exit 0  Cách g i th c hi n hello.sh :  $chmod a+x hello.sh  $./hello.sh
  22. o #!/bin/bash clear echo “Day la thong tin ve he thong:" echo “Xin chao, $USER" echo “Hom nay la ngay `date`, tuan `date +"%V"`." echo “Cac user da login:" who echo “Day la he thong `uname −s` chay tren procesor `uname −m`" echo “Thoi gian da chay: `uptime`"
  23. o ư  Ví d: taotm.sh #!/bin/bash if [ $# -lt 1 ]; then echo Usage: $0 [thu muc] return fi if [ -d "$1” ]; then echo “Thu muc $1 da ton tai.” else mkdir $1 fi
  24.  Bi n dùng l ưu tr giá khi ch y ch ươ ng trình. Shell cho phép s dng bi n nh ưng không c n khai báo vành ngh a ki u.  Mc nh, t t c các bi n u ưc kh i t o và ch a tr ki u chu i (ngay c khi gán giá tr là mt s thì shell c ng xem là chu i).  Shell và mt vài l nh ti n ích s tng chuy n bi n chu i thành s th c hi n phép tính khi có yêu c u.  Bi n shell có th dùng lp trình ho c u khi n môi tr ưng. Bi n phân bi t ch ưng.
  25.  Cng t ươ ng t ư lp trình, Shell cung cp phép gán và ly giá tr ca bi n nh ư sau:  = : á tr có th là mt s , chu i hay t mt bi n khác.  = `command` : Gán giá tr cho bi n là kt qu th c hi n c a m t l nh  $ : dùng ly giá tr tr ca bi n.  Ví d:  [ ]#x = 38  [ ]#echo $x 38
  26. ư  Khi trình shell kh i ng nó cung c p s n m t s bi n ưc khai báo và gán giá tr mc nh, chúng ưc g i là bi n môi tr ưng.  Các bi n môi tr ưng th ưng ưc vi t hoa phân bi t v i các bi n do ng ưi dùng nh ngh a.  Mi môi tr ưng ng nh p ch a các bi n môi tr ưng riêng bi t dùng cho m c ích riêng.  hi n th các bi n môi tr ưng dùng l nh env . to m t bi n môi tr ưng m i dùng l nh export
  27. ư  HOSTNAME : Tên máy Linux  HOME : Thư m c ch ca ng ưi dùng  SHELL : Shell hi n hành  PWD : Thư m c hi n hành  PATH : Danh sách các th ư m c tìm ki m các lnh, phân cách b i d u hai ch m (:)  USER : Tên ng ưi dùng hi n hành  TERM : Ki u c a terminal hi n hành  PS1 : D u nh c shell
  28.  Trong shell script có ba lo i d u c bi t dùng trong các l nh in ra màn hình hay l nh gán, nh ưng ý ngh a và cách th c hi n có khác bi t.  Các d u là:  Du huy n ( ` )  Du nháy ơ n ( ‘ )  Du nháy kép ( “ )
  29. `  Dùng gi th c hi n m t l nh h th ng trong shell script.  Ví d, trong shell script có các dòng:  currentdir = `pwd` (ho c currentdir = $(pwd) )  linecount = `wc -l $filename`  Trong ó:  Dòng 1 s th c hi n l nh pwd và gán ưng d n hi n hành vào bi n currentdir .  Dòng 2 th c hi n l nh wc m s dòng trong t p tin $filename và gán cho bi n linecount .
  30. ơ  Dùng hi n th ra màn hình b i lênh echo ho c gán giá tr cho bi n d ng chu i.  Du nháy kép (“) khi in ra s th c hi n v i giá tr ca bi n sau d u $.  Du nháy ơ n (‘) khi in ra s bn trong câu l nh.  Ví d:  myname = “John Terry"  echo "$myname“ # In ra: John Terry  echo ’$myname’ # In ra: $myname
  31. aa
  32.  Còn g i là bi n ch c, hay tham s v trí  Các bi n này ưc h tr sn  Tên bi n ưc cho tr ưc  Có 10 bi n t ng: $0  $9  $0: Ch a tên c a l nh  Các tham bi n th c b t u t $1  Nu tham bi n có v trí ln h ơn 9 thì s dng cú pháp ${} ưc các giá tr ca chúng  Ví d: ${10}
  33. a  Shell bash có 3 tham bi n v tríc bi t:  $#: S ưng tham bi n v trí (không tính $0)  $@:Tr v tt c các tham bi n v tríưc ư a ra dưi d ng N xâu. (ngoai tru $0)  $*: Danh sách t t c các tham bi n, ngo i tr $0
  34. o  Các toán t : +, -, *, /, %  S dng let, $(()), expr ho c $[ ] th c hi n tính giá tr bi u th c toán h c  Ví d:  let "sum = 4 + 3“  count = `expr $count + 1`  area = $(($length * $width))  percent = $[ $num / 100 ]  remain = $[ $n % $d ]  x = $(echo “sqrt(8)” | bc -l)  y = $(echo “scale=2; $x/3” | bc -l)
  35.  Là bi u th c ki m tra lôgic, tr v kt qu là úng (1) hay sai (0). Nóưng ưc dùng trong các cu trúc iu khi n ch ươ ng trình (như if, while, )  Trong shell script s dng l nh [ ] ho c test ki m tra bi u th c lôgic.  Cú pháp:  test  [ ]
  36.  Ki m tra a l n h ơn b if test $a –gt $b then . fi  S dng [ ] thay cho test: if [ $a –gt $b ] then . fi
  37.  Các bi u th c iu ki n có th là:  So sánh trên chu i  So sánh trên s  Ki m tra trên t p tin
  38. o  S1 = S2 : chu i S1 b ng chu i S2 không?  S1 != S2 : chu i S1 khác chu i S2 không?  S1 > S2 : 1 ng tr ưc S2 theo th t ab không?  S1 < S2 : 1 ng sau S2 theo th t ab không?  -n S1 : chu i S1 có dài l n h ơn 0 không ?  -z S1 : chu i S1 có dài b ng 0 không ?
  39. o  n1 -eq n2 : n1 b ng n2 ?  n1 -ge n2 : n1 l n h ơn ho c b ng n2 ?  n1 -gt n2 : n1 l n h ơn n2 ?  n1 -le n2 : n1 béơc b ng n2 ?  n1 -lt n2 : n1 béơ 2 ?  n1 -ne n2 : n1 khác n2 ?  ! n : ph nh c a bi u th c n (phép not)
  40. a ư  -f file : file có ph i là tp tin không.  -d dir : dir có ph i làưc không.  -c name : name có ph i là tp tin ký t không.  -s name : name có kích th ưc l n h ơn 0 không
  41.  Cu trúc r nhánh if  Cu trúc l a ch n case  Cu trúc l p for  Cu trúc l p while
  42.  Cú pháp:  Ví d: if iu ki n> echo –n “Nhap mot so:" then read num If [ $num –lt 9 ] [elif ; then then ] echo “$num nho hon 9” else [else echo “$num lon hon 9” fi ] fi
  43. oa #!/bin/bash echo –n “Nhap so a: ” read a echo –n “Nhap so b: “ read b if [ $a -lt $b ]; then echo “So $a nho hon so $b.” elif [ $a -eq $b ]; then echo “So $a bang so $b.” else echo “so $a lon hon so $b.” fi
  44.  Bài 1: Vi t shell script tìm giá tr ln nh t trong ba s a, b, c.  Bài 2: Vi t shell script gi i ph ươ ng trình b c nh t: ax + b =0.  Bài 3: Vi t ch ươ ng trình nh p password, hãy ki m tra password ó úng hay sai? In thông báo ra màn hình.  Bài 2: Vi t shell script gi i ph ươ ng trình b c hai: ax 2 + bx + c = 0
  45. a a  Cú pháp:  Ví d: case $ in case $number in ) 1) ;; echo "One“;; 2) ) echo "Two“;; ;; *) *) echo "Unknown“;; ;; esac esac
  46. a #!/bin/bash echo “Is it morning? Please answer yes or no:” read answer case “$answer” in “yes”) echo “Good morning”;; “no”) echo “Good afternoon”;; *) echo “Sorry, answer not recognized.”;; esac
  47.  Bài 1 : Vi t shell script th c nh p vào hai s và mt phép toán (+,-,x,/) sau ó hi n th kt qu .  Bài 2 : Vi t shell script tính im trung bình và xp lo i c a m t thí sinh thi tuy n sinh (có ba c t im)  Bài 3: Vi t shell script th c hi n nh p vào môt giá tr là th trong tu n. Hi n th ch ti ng anh c a th ó.
  48. o  Cú pháp:  Ví dụ 1: tính t ng 5 s for in tu tiên. do #!/bin/bash let "s = 0" for i in 1 2 3 4 5 done do let "s=$s+$i" done echo “Tong là: $s”
  49.  Cú pháp:  Ví dụ 1: while iu ki n> #!/bin/bash do n=0 while [ $n -lt 10 ] done do echo $n let "n= $n + 1" done
  50. #!/bin/bash echo -n “Enter password:" read password while [ “$password” != “secret” ] do echo “Sorry, try again !” read password done echo “Password is accepted !” exit 0
  51.  Bài 1: Tính t ng s = 1 + 3 + 5 + +n  Bài 2: Tính giai th a c a m t s n!  Bài 3: Vi t shell script ki m tra m t s có ph i là s nguyên t không ?  Bài 4: Vi t shell script m s dòng và s t trong mt t p tin.  Bài 5: Tính t ng s = 1 + 1/3 2 + 1/5 2 + +1/(2n+1) 2  Bài 6: Ki m tra m t s có ph i là s hoàn thi n hay không? (n là S hoàn thi n n u t ng các ưc - <n - ca n b ng n)  172.16.32.222;
  52.  \\172.16.32.154  \\172.16.32.164  a ch máy Linux: 172.16.32.222  \\172.16.32.13 2
  53.  Ngoài các c u trúc trên, shell còn cho phép s dng các l nh nh y và thoát sau:  Lnh BREAK – thoát kh i vòng l p  Lnh CONTINUE – b qu các câu l nh còn l i c a vòng l p và tr li u vòng l p.  Lnh EXIT – kt thúc shell script  Lnh RETURN – tr v t hàm ho c shell script  Chú ý: Trong ph n iu ki n c a các c u trúc, sau du “[“ vàưc d u “]” ph i có mt ký t tr ng.
  54. ươ a o  Tính t ng các s tn n (n ưc nh p t bàn phím ho c l y t i s dòng l nh).  Tính giai th a c a m t s .  m s dòng trong m t t p tin  m s t ca m t t p tin
  55. #!/bin/sh echo “Chuong trinh tinh tong 1->$1” i=0 tong=0 while [ $i -lt $1 ]; do i=$(($i + 1)) tong=$($tong+$i)) done echo "Tong 1->$1= $tong" exit 0
  56. a a a #!/bin/sh echo “Chuong trinh tinh $1!” i=0 gt=1 while [ $i -lt $1 ]; do i=$(($i +1)) gt=$(($gt * $i)) done echo "$1!= $gt" exit 0
  57. a #!/bin/sh echo “Chuong trinh dem so dong cua tap tin $1” { count=0 while read line; do count=$(($count + 1)) done echo “So dong cua tap tin $1 la : $n” }<$1 exit 0
  58. o #!/bin/sh echo “Chuong trinh dem so tu cua tap tin $1” { count=0 while read line; do for wd in $line; do count=$(($count + 1)) done done echo “Tong so tu cua tap tin $1 la : $n” }<$1
  59.  Trong linux, các ch ươ ng trình C th ưng có ph n m rng *.c. Các ch ươ ng trình C++ ưng có ph n m rng *.cc ho c *.C  Trình biên d ch ph bi n biên d ch các ch ươ ng trình C/C++ là gcc và g++.  Cú pháp: gcc -o [-I ]  Ví d: $gcc -o hello hello.c
  60. ươ #include #include main() { int i, s =0; printf(“Chuong trinh tinh tong 1->10”); for(i=1; i<=10;i++) { s=s + i; } printf(“Tong la: %d”,s); }
  61.  Gi i thi u shell  Lp trình shell Thanks you !
  62.  1. Tính t ng c a dãy  S=1 + 1/3 2 + 1/5 2 + + 1/(2n+1) 2  Form chuong trinh:  $./tongday 100  #nghia la n=100