Bai 6. Lap Trinh Tren Linux

Embed Size (px)

Citation preview

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 }