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
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:
bai_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
- Lập trình trên Linux
- 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
- GUI xterm Shell console bash csh Kernel KDE ksh GNOME
- 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.
- 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 ↵
- 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).
- 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.
- 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
- 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
- ư 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
- 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
- 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 .
- 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
- 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.
- 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." }
- 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"`
- 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)
- 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 : $ .
- 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”
- 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”
- 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
- 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`"
- 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
- 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.
- 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
- ư 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
- ư 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
- 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 ( “ )
- ` 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 .
- ơ 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
- aa
- 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}
- 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
- 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)
- 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 [ ]
- 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
- 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
- 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 ?
- 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)
- 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
- 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
- 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
- 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
- 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
- a a Cú pháp: Ví d: case $ in case $number in ) 1) ;; echo "One“;; 2) ) echo "Two“;; ;; *) *) echo "Unknown“;; ;; esac esac
- 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
- 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 ó.
- 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”
- 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
- #!/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
- 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;
- \\172.16.32.154 \\172.16.32.164 a ch máy Linux: 172.16.32.222 \\172.16.32.13 2
- 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.
- ươ 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
- #!/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
- 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
- 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
- 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
- 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
- ươ #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); }
- Gi i thi u shell Lp trình shell Thanks you !
- 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