Bi ging H iu Hnh LinuxContactEmail Website
: ThS. Bi Trung y: [email protected] :
Scheduler:Theory : 2 Credits (36 hours) Practise :
ThS.Bi Trung U
H iu Hnh Unix/Linux
1
Ni dung mn hcTng quan v Unix/Linux Ci t v cu hnh Linux Qun tr h thng v ngi dng Thao tc trn h thng tp tin X l vn bn v cc b lc Lp trnh Shell trn Linux
ThS.Bi Trung U
H iu Hnh Unix/Linux
2
Bi 6
Lp trnh trn Linux
ThS.Bi Trung U
H iu Hnh Unix/Linux
3
Ni dung trnh byGii thiu v shell Cc thnh phn ca ngn ng shell Shell scripts - Lp trnh shell Lp trnh C/C++ trn Linux
ThS.Bi Trung U
H iu Hnh Unix/Linux
4
Gii thiu Linux ShellShell (h v) l mt mi trng tng tc m ngi dng c th giao tip vi h iu hnh. Linux cung cp mt s shell nh: C shell (csh), Korn shell (ksh), v Bourne shell (sh), BASH shell (bash) , BASH (Bourn Again Shell) l shell mc nh trong Linux. Shell c th din dch lnh v cho php ngi dng lp trnh script nh mt ngn ng lp trnh.
ThS.Bi Trung U
H iu Hnh Unix/Linux
5
Gii thiu Linux ShellLinux cho php chuyn i gia nhiu shell hoc l cc console o (Virtual console) s dng lnh chsh. C php: chsh [-s ] [-l] [username] Trong :-l : lit k cc loi shell hin c (thng tin cc shell cha trong tp tin /etc/shells).
V d: chuyn sang c shell$ chsh csh
ThS.Bi Trung U
H iu Hnh Unix/Linux
6
Mc ch ca shellTng tc, din dich lnh: shell i ngi s dng g cc lnh ti du nhc, sau gi ti h thng yu cu t lnh nhn c. t bin mi trng i vi mi ngi s dng Lp trnhShell cung cp tp hp cc lnh t c th vit chng trnh (c gi l shell script). Ngoi nhng lnh n gin ca h thng, shell cn c b sung thm cc cu trc phc tp nh iu khin r nhnh (if/case), vng lp (for/while).
ThS.Bi Trung U
H iu Hnh Unix/Linux
7
iu khin shellShell c th c s dng nh mt ngn ng lp trnh gi l ngn ng shell. Cc chng trnh c vit v thng dch bi shell gi l shell script. C hai cch vit chng trnh iu khin shell:Vit chng trnh ngay t dng lnh. C th gp cc lnh vo mt tp tin v yu cu shell thc thc thi tp tin ny nh mt chng trnh.
ThS.Bi Trung U
H iu Hnh Unix/Linux
8
iu khin shell t dng lnhV d tm v hin th tp tin m ni dung c cha chui main(). Thay v dng lnh grep tm ra tng file sau s dng lnh more hin th. Ta c th iu khin shell t ng nh sau:$ for file in * >do > if [ $(grep l main() $file)] > then > more $file > fi >doneThS.Bi Trung U H iu Hnh Unix/Linux 9
iu khin shell t scriptNhc im ca vic iu khin shell t dng lnh l kh ly li khi lnh trc sa i v thc thi mt ln na. d bo tr ta c th a cc lnh vo mt tp tin v yu cu shell c ni dung tp tin thc thi.V d: docfile.sh#!/bin/bash for file in * do if [ $(grep l main() $file) ]; then more $file fi doneThS.Bi Trung U H iu Hnh Unix/Linux 10
Mi trng ShellMi trng shell l tt c cc thit lp gip cho vic chy chng trnh c chnh xc. Bao gm:Cc tp tin khi to shell Cc bin shell Thc hin cc tnh ton s hc Gn b danh
ThS.Bi Trung U
H iu Hnh Unix/Linux
11
Cc tp tin khi to shellKhi shell c khi ng, n c cc files cu hnh ca sau:/etc/profile : cc thit lp h thng chung ~/.bash_profile: cc thit lp ca ngi dng ~/.bashrc: tp tin khi ng trong mt phin lm vic ring bit. ~/.bash_login: cc thit lp ng nhp ~/.bash_history: cc lch s cc cu lnh thc hin
ThS.Bi Trung U
H iu Hnh Unix/Linux
12
/etc/profileCha tt c cc thit lp p dng n tt c mi trng ngi dng. Khi c triu gi tng tc, shell c cc ch th (cu lnh) trong /etc/profile. y thng l cc thit lp cc bin shell nh PATH, USER, MAIL, HOSTNAME v HISTSIZE. Trn mt s h thng, gi tr umask cng c cu hnh trong /etc/profile .
ThS.Bi Trung U
H iu Hnh Unix/Linux
13
V d /etc/profile# 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 doneThS.Bi Trung U H iu Hnh Unix/Linux 14
/etc/bashrcTrn h thng /etc/profile ch lu gi mi trng shell v cc thit lp khi ng chng trnh, trong khi /etc/bashrc cha cc nh ngha h thng chung cho cc hm v b danh shell. Tp tin /etc/bashrc cng c th cp n trong /etc/profile hoc trong cc tp tin khi to shell ring bit ca ngi dng.
ThS.Bi Trung U
H iu Hnh Unix/Linux
15
/etc/bashrcalias 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." }
ThS.Bi Trung U
H iu Hnh Unix/Linux
16
~/.bash_loginTp tin ny cha cc thit lp khi ngi dng login vo h thng. V d:# file protection # all to me, read to group and others umask 002 # miscellaneous w cal `date +"%m"` `date +"%Y"`
ThS.Bi Trung U
H iu Hnh Unix/Linux
17
Ngn ng lp trnh shell son tho mt chng trnh shell c th s dng bt k trnh son tho vn bn no(chng hn: vi, emasc,...) Cc thnh phn c bn ca ngn ng shell:Cu trc shell scripts Bin shell: kiu s, chui, tham s v bin mi trng. iu kin: kim tra biu thc lgic bng shell Cu trc iu khin chng trnh : if, case, while, Hm Cc lnh ni ti (built-in)ThS.Bi Trung U H iu Hnh Unix/Linux 18
Cu trc shell scriptMt shell scripts c bn gm:Dng u tin thng cho bit shell c s dng v gi trnh thng dch shell script tng ng (v d: #!/bin/bash ). Cc ch thch bt u vi du thng (#). Cc dng cn li l cc lnh ca Linux hoc cc cu trc iu khin,
Thc thi shell script:C1:t quyn execute: $ chmod Chy shell script: $./
C2: $ . ThS.Bi Trung U H iu Hnh Unix/Linux 19
Lnh ghi ra mn hnhC php: echo [-n] [biu thc] Dng hin th gi tr cc bin, biu thc hoc chui ra mn hnh. Trong :Ty chon n : khng xung dng sau khi in ra.
Nu biu thc l chui t trong cp nhy kp c th s dng cc k t c bit nh \n, \b, \t, \0n (k t c m ASCCI l n),
V d:echo How are you? echo Current user: $USERThS.Bi Trung U H iu Hnh Unix/Linux 20
Lnh vo raC php: read [bin 2] [bin 3] ... Dng c d liu t bn phm. V d shell script c v in d liu. $ vi vidu1.sh#!/bin/bash #Vi du s dng lenh read va echo echo Nhap mot so: read num echo So vua nhap la: $num exit
ThS.Bi Trung U
H iu Hnh Unix/Linux
21
Vi d Shell Script hello$ 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
Cch gi thc hin hello.sh:$chmod a+x hello.sh $./hello.sh
ThS.Bi Trung U
H iu Hnh Unix/Linux
22
V d: showsys.sh#!/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`"
ThS.Bi Trung U
H iu Hnh Unix/Linux
23
V d Shell Script to th mcV d: taotm.sh#!/bin/bash if [ $# -lt 1 ]; then echo Usage: $0 [thu muc] exit fi if [ -d "$1 ]; then echo Thu muc $1 da ton tai. else mkdir $1 fiThS.Bi Trung U H iu Hnh Unix/Linux 24
c im bin shellShell cho php s dng bin nhng khng cn khai bo v nh ngha kiu. Mc nh, tt c cc bin u c khi to v cha tr kiu chui (ngay c khi gn gi tr l mt s th shell cng xem l chui). Shell v mt vi lnh tin ch s t ng chuyn bin chui thnh s thc hin php tnh khi c yu cu. Bin shell c th dng lp trnh hoc iu khin mi trng. Bin phn bit ch hoa thng.
ThS.Bi Trung U
H iu Hnh Unix/Linux
25
S dng binCng tng t nh ngn ng lp trnh, Shell cung cp php gn v ly gi tr ca bin nh sau: = : y gi tr c th l mt s, chui hay t mt bin khc. = `command`: Gn gi tr cho bin l kt qu thc hin ca mt lnh $ : dng ly gi tr tr ca bin.
V d:$x = 38 $echo $x 38ThS.Bi Trung U H iu Hnh Unix/Linux 26
Bin mi trngKhi trnh shell khi ng n cung cp sn mt s bin c khai bo v gn gi tr mc nh, chng c gi l bin mi trng. Cc bin mi trng thng c vit hoa phn bit vi cc bin do ngi dng nh ngha. Mi mi trng ng nhp cha cc bin mi trng ring bit dng cho mc ch ring. hin th cc bin mi trng dng lnh env. to mt bin mi trng mi dng lnh export (hoc setenv)
ThS.Bi Trung U
H iu Hnh Unix/Linux
27
Mt s bin mi trngHOSTNAME: Tn my Linux HOME: Th mc ch ca ngi dng SHELL: Shell hin hnh PWD: Th mc hin hnh PATH: Danh sch cc th mc tm kim cc lnh, phn cch bi du hai chm (:) USER: Tn ngi dng hin hnh TERM: Kiu ca terminal hin hnh PS1: Du nhc shell
ThS.Bi Trung U
H iu Hnh Unix/Linux
28
Cch dng cc du bcTrong shell script c ba loi du c bit dng trong cc lnh in ra mn hnh hay lnh gn, nhng ngha v cch thc hin c khc bit. Cc du l:Du huyn ( ` ) Du nhy n ( ) Du nhy kp ( )
ThS.Bi Trung U
H iu Hnh Unix/Linux
29
Du huyn (`)Dng gi thc hin mt lnh h thng trong shell script. V d, trong shell script c cc dng:currentdir = `pwd` linecount = `wc -l $filename`
Trong :Dng 1 s thc hin lnh pwd v gn ng dn hin hnh vo bin currentdir. Dng 2 thc hin lnh wc m s dng trong tp tin $filename v gn cho bin linecount.
ThS.Bi Trung U
H iu Hnh Unix/Linux
30
Du nhy n () v nhy kp ()Dng hin th ra mn hnh bi lnh echo hoc gn gi tr cho bin dng chui. Du nhy kp () khi in ra s thc hin vi gi tr ca bin sau du $. Du nhy n () khi in ra s in nguyn dng vn bn trong cu lnh. V d:myname = John Terry" echo "$myname echo $mynameThS.Bi Trung U
# In ra: John Terry # In ra: $myname31
H iu Hnh Unix/Linux
Biu thc ton hcCc ton t: +, -, *, /, % S dng let, $(), expr hoc $[ ] thc hin tnh gi tr biu thc ton hc 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)ThS.Bi Trung U H iu Hnh Unix/Linux 32
Biu thc iu kinL biu thc kim tra lgic, tr v kt qu l ng (1) hay sai (0). N thng c dng trong cc cu trc iu khin chng trnh (nh if, while,) Trong shell script s dng lnh [ ] hoc test kim tra biu thc lgic. C php:test [ ]
ThS.Bi Trung U
H iu Hnh Unix/Linux
33
V d biu thc iu kinKim tra a ln hn bif test $a gt $b then . fi
S dng [ ] thay cho test:if [ $a gt $b ] then . fiThS.Bi Trung U H iu Hnh Unix/Linux 34
Biu thc iu kinCc biu thc iu kin c th l:So snh trn chui So snh trn s Kim tra trn tp tin
ThS.Bi Trung U
H iu Hnh Unix/Linux
35
So snh kiu chuiS1 = S2 : Chui S1 bng chui S2 khng? S1 != S2 : Chui S1 khc chui S2 khng? S1 > S2 : S1 ng trc S2 theo th t ab khng? S1 < S2 : S1 ng sau S2 theo th t ab khng? -n S1 : Chui S1 c di ln hn 0 khng ? -z S1 : Chui S1 c di bng 0 khng ?
ThS.Bi Trung U
H iu Hnh Unix/Linux
36
So snh s hcn1 -eq n2 : n1 bng n2 ? n1 -ge n2 : n1 ln hn hoc bng n2 ? n1 -gt n2 : n1 ln hn n2 ? n1 -le n2 : n1 b hn hoc bng n2 ? n1 -lt n2 : n1 b hn n2 ? n1 -ne n2 : n1 khc n2 ? ! n : ph nh ca biu thc n (php not)
ThS.Bi Trung U
H iu Hnh Unix/Linux
37
Kim tra tp tin, th mc-f file : file c phi l tp tin khng. -d dir : dir c phi l th mc khng. -c name : name c phi l tp tin k t khng. -s name : name c kch thc ln hn 0 khng
ThS.Bi Trung U
H iu Hnh Unix/Linux
38
Cc cu trc iu khinCu trc r nhnh if Cu trc la chn case Cu trc lp for Cu trc lp while
ThS.Bi Trung U
H iu Hnh Unix/Linux
39
Cu trc r nhnh if-elseC php: if then [elif ; then ] [else ] fi V d: echo "Enter value:" read num If [ $num lt 9 ] then echo $num nho hon 9 else echo $num lon hon 9 fi
ThS.Bi Trung U
H iu Hnh Unix/Linux
40
V d cu trc if so snh hai s#!/bin/sh 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. fiThS.Bi Trung U H iu Hnh Unix/Linux 41
Bi tpBi 1: Vit shell script tm gi tr ln nht trong ba s a, b, c. Bi 2: Vit shell script gii phng trnh bc nht: ax + b =0.
ThS.Bi Trung U
H iu Hnh Unix/Linux
42
Cu trc la chon caseC php:case $ in ) ;; ) ;; *) ;; esac
V d:case $number in 1) echo "One;; 2) echo "Two;; *) echo "Unknown;; esac
ThS.Bi Trung U
H iu Hnh Unix/Linux
43
V d case#!/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.;; esacThS.Bi Trung U H iu Hnh Unix/Linux 44
Bi tpBi 1: Vit shell script thc nhp vo hai s v mt ton t sau hin th kt qu. Bi 2: Vit shell script tnh im trung bnh v xp loi ca mt th sinh thi tuyn sinh (c ba ct im) Bi 3: Vit shell script thc hin nhp vo mt gi tr l th trong tun. Hin th ch ting anh ca th .
ThS.Bi Trung U
H iu Hnh Unix/Linux
45
Cu trc lp forC php: for in do done V d 1: tnh tng 5 s t nhin u tin.#!/bin/bash let "s = 0" for i in 1 2 3 4 5 do let "s=$s+$i" done echo Tong l: $s
ThS.Bi Trung U
H iu Hnh Unix/Linux
46
Cu trc whileC php: while do done V d 1:#!/bin/bash n=0 while [ $n -lt 10 ] do echo $n let "n= $n + 1" done
ThS.Bi Trung U
H iu Hnh Unix/Linux
47
V d nhp mt khNu#!/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
ThS.Bi Trung U
H iu Hnh Unix/Linux
48
Bi tpBi 1: Tnh tng s = 1 + 3 + 5 + +n Bi 2: Tnh giai tha ca mt s n! Bi 3: Vit shell script kim tra mt s c phi l s nguyn t khng ? Bi 4: Vit shell script m s dng v s t trong mt tp tin.
ThS.Bi Trung U
H iu Hnh Unix/Linux
49
Cc lnh ni ti shellNgoi cc cu trc trn, shell cn cho php s dng cc lnh nhy v thot sau:Lnh BREAK thot khi vng lp Lnh CONTINUE b qu cc cu lnh cn li ca vng lp v tr li u vng lp. Lnh EXIT kt thc shell script Lnh RETURN tr v t hm hoc shell script
Ch : Trong phn iu kin ca cc cu trc, sau du [ v trc du ] phi c mt k t trng.ThS.Bi Trung U H iu Hnh Unix/Linux 50
Cc chng trnh tham khoTnh tng cc s t 1 n n (n c nhp t bn phm hoc ly t i s dng lnh). Tnh giai tha ca mt s n. m s dng trong mt tp tin m s t ca mt tp tin
ThS.Bi Trung U
H iu Hnh Unix/Linux
51
Tnh tng cc s t 1 n n#!/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
ThS.Bi Trung U
H iu Hnh Unix/Linux
52
Tnh giai tha ca n (n!)#!/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
ThS.Bi Trung U
H iu Hnh Unix/Linux
53
m s dng ca mt tp tin#!/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 }