You are on page 1of 23

Hng dn lp trnh shell trn Linux - Bi 1: Bin v Nhp xut

u tin bn phi to 1 file text, bn c th t tn v ui file ty (Khng ui cng ko sao) y s l file cha ni dung script m chng ta sp vit VD: Cc tn sau u hp l Code:
tenfile tenfile.sh tenfile.txt

Sau , script c th thc thi ta cp quyn cho n bng lnh sau Code:
chmod 755 tenfile

chy 1 shell script no ta g Code:


./tenfile

VD: ta c 1 shell script c chmod 755 ti Code:


/home/vtlai/shell.sh

chy n ta lm nh sau Vo th mc /home/vtlai Code:


cd /home/vtlai

Chy shell Code:


./shell.sh

C php ca 1 file shell script nh sau: Code:


#!/bin/bash Ni dung script

trong /bin/bash l b lnh m chng ta s s dng trong script. Thng thng shell chng ta s dng u l shell bash nh trn Cch xut 1 chui ra mn hnh Code:
echo "Ni dung chui"

Cch s dng bin Khi gn gi tr cho bin ta s dng tn bin khng c $ u Lu : Du bng phi nm ngay sau tn bin v khng s dng khong trng VD: Code:
tenbien="Ni dung"

Khi ly ni dung ca bin ra xut hoc so snh ... ta s dng tn bin c du $ u VD:

Code:
tenbien="Dien dan sinh vien CNTT sinhvienit.net"; echo $tenbien

Kt qu: Code:
Dien dan sinh vien CNTT sinhvienit.net

Cch nhp 1 chui vo 1 bin Code:


read TnBin

Khi chy ti lnh read ny mn hnh s dng li cho chng ta nhp. sau khi bn nhp 1 chui v bm enter th ni dung chui s gn cho bin m ta ghi sau read VD: Code:
echo "Vui long nhap vao mot chuoi:" read vtlai echo "Chuoi vua nhap la: $vtlai"

Cch ly kt qu ca 1 lnh, chui lnh a vo bin Code:


tnbin=`Lnh cn ly kt qu tr v`

hoc Code:
tenbien= $(Lnh cn ly kt qu tr v)

VD: Code:
hientai=`date` echo "Hom nay la: $hientai ";

Post only trn sinhvienit.net, copy i u vui lng ghi r ngun http://sinhvienit.net/@forum/threads...-va-nhap-xuat/

Hng dn lp trnh shell trn Linux - Bi 2: Cc php ton s hc


Khc vi C v 1 s ngn ng lp trnh khc, vic s dng cc php ton s hc khng n gin l bng cch s dng cc du tng ng (+ - * /) m rm r hn 1 cht Php cng:

n=n+6
Code:

n=`expr $n + 6`

hoc Code:
n=$(($n + 6))

hoc Code:
n=$[ $n + 6 ]

n=n++
Code:
n=$[ $n + 1 ]

hoc Code:
let "n++"

hoc Code:
$[ n++ ]

hoc Code:
(( n++ ))

Php tr, nhn, chia tng t


Post only trn sinhvienit.net, copy i u vui lng ghi r ngun http://sinhvienit.net/@forum/threads...p-toan-so-hoc/

QT4- Lp trnh nhng trn Ubuntu


lu ri khng thy anh em trn din n nhc n QT na nh ? Hin ti mnh ang lm mt ti lin qua n truyn video thi gian thc trn my tnh nhng s dng mng addhoc v lp trnh trn QT4. Mnh c rt nhiu iu mun hi v mong c s gp ca anh em. ng thi qua y cng mong mun QT ngy cng pht trin bi qu thc n l mt Platform rt hay. Cc cng c c th snh ngang vi visual. Trc ht mnh xin bt u vo phn ci t v s dng nh s qua nh

ci t QT4 trn ubuntu (10.10) bn c 2 cch : -Th nht ci t trong Applications>Ubuntu Software Center .Bn g Qt vo phn Search v ci t cc phn Qt4 Designer, Qt4 Assistant, Qt4 Linguist, Qt4 Settings v cui cng l IDE ring ca QT QT Creator -Th hai bn c th vo trang ch ca QT v down b ci y ( gi SDK ) : Download Qt, the cross-platform application framework — Qt - A crossplatform application and UI framework Sau khi bn down gi SDK ( c ui l .run ) th tin hnh ci t ,bn chuyn gi ny vo home, m Terminal v g : chmod u+x Qt_SDK_Lin32_offline_v1_1_3_en.run g tip ./Qt_SDK_Lin32_offline_v1_1_3_en.run Theo mnh nn ci theo cch th nht. Bi bn ubuntu 10.10 tr i h tr y cho Qt. Cn nu bn dng phin bn thp hn 10.10 th nn ci theo cch th 2. Tip theo mnh xin lm mt v d nho nh vi Qt. Load nh t my tnh v hin th Bc 1: To project ca Qt. Bn vo Applications >Programing >QT Creator .Giao din ca Qt Creator hin ln nh sau

Bn chn Create Project Tip theo bn chn loi project, y mnh s dng l Qt C++ Project> Qt Gui Application. Cui cng mnh n choose v ca s t tn project hin ra

Sau khi t tn bn chn Next th Qt s yu cu bn t tn cho class khi u ca chng trnh ( y ch l mt th tc, bn c th t tn ri khi vit chng trnh khng s dng class ny cng chng sao ).

Trong vd ny mnh t tn Class l ShowImage.Chn Base class l QWidget (lp giao din).Cui cng n Finish bt u lp trnh. Mnh s ni qua v cc thnh phn ca mt lp trong QT Mt lp trong Qt s bao gm 3 thnh phn l : Header file ( ui .h ), thnh phn ny c chc nng cha cc hm, cc bin ton cc, con tr, hoc cp pht b nh cn khai bo s dng trong class. Thnh phn th hai l Source file ( ui .cpp ), thnh phn ny cha cc nh ngha hm, chc nng cc hm trong class. y l thnh phn quan trng nht trong Qt.

Thnh phn th 3 l Form file ( ui .ui ). Ty tng class v cch chn ca ngi s dng m thnh phn ny c trong chng trnh. Thnh phn ny gip ngi s dng to giao din d dng hn thng qua ko th ng thi tng tc vi cc thnh phn ca giao din ( button, label .... ) kh d dng. Nu khng s dng thnh phn ny bn cng hon ton c th code giao din trong file.cpp. Tt nhin khng th thun tin v d qun l nh Form. Bc 2 :Sau khi to project th chng ta bt u lp trnh thi Trc tin mnh vo form. Trong ct Project bn click vo showimage.ui Trong form ny mnh ko th to ra 2 ci label vi tn l lbl_Hello ( Ci ny dng hin th ch "Hello" ) v lbl_Image ( Ci ny l show nh ).

Sau khi to xong mnh quay v showimage, vit ch "Hello" bng cch s dng hm setText() ui->lbl_hello->setText("Hello"); hin th nh th trc tin bn cn phi to mt bit kiu QImage ( y l mt kiu bin ca Qt x l nh) v load nh t cng ln Qimage image("qt4.png"); Ch bn phi nh trong th mc build project nh. y ca mnh l th mc Home/test-build-desktop

Tip theo hin th hnh nh th ta cn chuyn QImage sang lp QPixmap sau hin th cc Pixmap trn label (lbl_Image) QImage img("qt4.png"); QPixmap pixmap ; pixmap=pixmap.fromImage(img); ui->lbl_Image->setPixmap(pixmap); n y bn c th xem kt qu ca mnh ri

Mt S bi tp Lp trnh shell a) Lm vic vi Text Bi 1: Vit 1 chng trnh Shell c tng dng trong 1 file vn bn. Gia mi ln hin th dng text th c 1 cu hi t Shell: bn c mun c dng k tip ko ? y/n nu tr li l y hoc Y th in dng k tip, trong trng hp ngc li th kt thc chng trnh c.

M: #!/bin/sh echo e nhap ten file: read filename if [ ! f $filename ]; then echo $filename not exists exit 1 fi answer= count=0 numlines=`wc l $filename|sed s/^ *//|cut d f 1` echo so dong: $numlines while [ $answer!=n] do echo e tiep tuc(y/n)? read answer if [ answer = y ]; then echo doc het file rui exit 0 fi count=$(($count+1)) sed n ${count}p $filename done exit 0 Bi 2: Vit 1 dng lnh cho php c 3 dng u tin trong 1 file vn bn m khng c dng bt c vng lp no

M: sed n 1,3p $filename Bi 3: Vit 1 chng trnh trong Shell sao cho vi tham s th nht l tn file text v n s in ra mn hnh ni dung file ny, nhng vi tt c k t u vit hoa

M: #!/bin/sh echo e nhap ten file: read filename if [ ! f $filename ]; then echo $filename not exists exit 1 fi echo file sau khi chuyen doi: tr [a-z] [A-Z] <$filename exit 0 Bi 4: Vit 1 chng trnh Shell chnh sa vn bn sao cho nu trn 1 dng m c nhiu hn 2 khong trng lin nhau th c thay th bng 1 khong trng

M: tr s ' ' ' ' <$filename >$filename

---------- Post added at 08:50 PM ---------- Previous post was at 08:47 PM ---------b)Lm vic vi cc tham s Bi 1: Vit chng trnh Shell lit k cc tham s truyn vo chng trnh theo tng dng vi c php: day la tham so thu N va co ten la NNNN bng cc cch sau: Dng vng lp FOR. Dng vng WHILE v lnh SHIFT Dng vng WHILE v khng dng lnh SHIFT.

M: #!/bin/sh #while + SHIFT: count=0 while [ $# ne 0 ] do echo day la tham so thu $count: $1 count=$(($count + 1)) shift done #WHILE without SHIFT: count=1 total=$(($#+1)) while [ $*

ge 0 ] do echo n day la tham so thu $count: eval echo \$$count count=$(($count+1)) done #for: count=1 for arg in $* do echo day la tham so thu $count: $arg count=$(($count + 1)) done Bi 2: Vit chng trnh Shell phn tch cc tham s v cc i s truyn vo tng ng vi tham s . Gi s chng trnh myshell c th nhn 4 tham s l a,b,c,d nhng ch c tham s c l c i s truyn vo. Khi g cu lnh trong Shell: myshell abc argument d other_argument th vi tham s c ta c i s l argument, ngoi ra chng trnh cn 1 i s l other_argument.

M: while getopts abc:d option do case "$option" in a) echo co tham so a;; b) echo co tham so b;; c) echo co tham so c, doi so la $OPTARG;; d) echo co tham so d;; \?)echo tham so nay khong hop le esac done while [ $OPTIND le $# ] do echo n tham so tu do: eval echo \$$OPTIND shift done KSTP 03-29-2012, 03:40 PM LP TRNH SHELL 6.1. Chng trnh tnh tng 1-> n - Minh ha cc cu trc while do done, v cch s dng [], $(()). - Tp tin tong1.sh #!/bin/sh echo Chuong trinh tinh tong 1- $1 index=0 tong=0 while [ $index -lt $1 ] do index=$(($index + 1)) tong=$(($tong + $index)) done echo "Tong 1-$1= $tong" exit 0 - Chy chng trnh : chmod a+x tong1.sh ./tong1 100 ================================================== ============================================= 6.2. Chng trnh tnh giai tha ca mt s - Minh ha cc cu trc while do done, v cch s dng [], $(()). - Tp tin giaithua.sh #!/bin/sh echo Chuong trinh tinh $1! index=0 gt=1 while [ $index -lt $1 ] do

index=$(($index + 1)) gt=$(($gt * $index)) done echo "$1!= $gt" exit 0 - Chy chng trnh : chmod a+x giaithua.sh ./giaithua 5 ================================================== ====================================== 6.3. Chng trnh m s dng ca mt tp tin - Minh ha cc cu trc if then fi, while do done, v cch s dng [], $(()). - Tp tin demdong.sh #!/bin/sh echo Chuong trinh dem so dong cua tap tin $1 { n=0 while read line - 22do n=$(($n + 1)) done echo So dong cua tap tin $1 la : $n }<$1 exit 0 - Chy chng trnh : chmod a+x demdong.sh ./demdong bai1.txt 6.4. Chng trnh m s t ca mt tp tin - Minh ha cc cu trc for do done, while do done. - Tp tin demtu.sh #!/bin/sh echo Chuong trinh dem so tu cua tap tin $1 { n=0 while read line do for wd in $line do n=$(($n + 1)) done done echo Tong so tu cua tap tin $1 la : $n

}<$1 exit 0 - Chy chng trnh : chmod a+x demtu.sh ./demtu bai1.txt ================================================== ========================================= 6.5. Chng trnh tm dng c di ln nht trong mt tp tin - Minh ha cc cu trc if then fi, while do done. - Tp tin dongmax.sh #!/bin/sh echo Chuong trinh tim dong dai nhat trong tap tin $1 { n=0 max=0 dong= while read line do n=`expr length $line` if [ $n gt $max ] then dong=$line max=$n fi done echo Dong trong tap tin $1 co do dai max = $max la : $dong }<$1 exit 0 - Chy chng trnh : chmod a+x dongmax.sh ./dongmax bai1.txt 6.6. Chng trnh tm mt xu trong mt tp tin - Minh ha cc cu trc if then fi, while do done. - Tp tin timxau.sh #!/bin/sh echo Chuong trinh tim xau $1 trong tap tin $2 { wordlen=`expr length $1` # Do dai tu can tim while read textline do textlen=`expr length $textline` # Do dai cua dong vua doc

end=$(($textlen wordlen + 1 index=1 while [ $index le $end ] do temp=`expr substr $textline $index $wordlen if [ $temp = $1 ] then echo Tim thay $1 tai dong $textline break fi index=$(($index + 1)) done done }<$2 exit 0 - Chy chng trnh : chmod a+x timxau.sh ./timxau abc bai1.txt - Tm s ln nht trong dy s nhp vo #/bin/bash # input an array of elements function input() { echo -n "n= " read n for ((i=0; i<n; i++)) do echo -n "a[$i] " = read a[$i] done } #max of two numbers function max2nums() { if [ "$1" -gt "$2" ]; then max1=$1 echo $1 else max1=$2 echo $2 fi

return $max1 } #max of an array function maxs() { max=${a[0]} for ((i=1; i<n; i++)) do max=$(max2nums ${a[$i]} $max) done echo "max = $max" } input maxs exit $? ================================================== ======================================= Bi 1: Vit 1 chng trnh Shell c tng dng trong 1 file vn bn. Gia mi ln hin th dng text th c 1 cu hi t Shell: bn c mun c dng k tip ko ? y/n nu tr li l y hoc Y th in dng k tip, trong trng hp ngc li th kt thc chng trnh c. Code: #!/bin/sh echo e nhap ten file: read filename if [ ! f $filename ]; then echo $filename not exists exit 1 fi answer= count=0 numlines=`wc l $filename|sed s/^ *//|cut d f 1` echo so dong: $numlines while [ $answer!=n] do echo e tiep tuc(y/n)? read answer if [ answer = y ]; then echo doc het file rui exit 0

fi count=$(($count+1)) sed n ${count}p $filename done exit 0 ================================================== ========================================== Bi 2: Vit 1 dng lnh cho php c 3 dng u tin trong 1 file vn bn m khng c dng bt c vng lp no Code: sed n 1,3p $filename ================================================== ======================================= Bi 3: Vit 1 chng trnh trong Shell sao cho vi tham s th nht l tn file text v n s in ra mn hnh ni dung file ny, nhng vi tt c k t u vit hoa Code: #!/bin/sh echo e nhap ten file: read filename if [ ! f $filename ]; then echo $filename not exists exit 1 fi echo file sau khi chuyen doi: tr [a-z] [A-Z] <$filename exit 0 ================================================== ========================================= Bi 4: Vit 1 chng trnh Shell chnh sa vn bn sao cho nu trn 1 dng m c nhiu hn 2 khong trng lin nhau th c thay th bng 1 khong trng Code: tr s ' ' ' ' <$filename >$filename Bi 1: Vit chng trnh Shell lit k cc tham s truyn vo chng trnh theo tng dng vi c php: day la tham so thu N va co ten la NNNN bng cc cch sau: Dng vng lp FOR. Dng vng WHILE v lnh SHIFT Dng vng WHILE v khng dng lnh SHIFT. Code: #!/bin/sh

#while + SHIFT: count=0 while [ $# ne 0 ] do echo day la tham so thu $count: $1 count=$(($count + 1)) shift done #WHILE without SHIFT: count=1 total=$(($#+1)) while [ $* ge 0 ] do echo n day la tham so thu $count: eval echo \$$count count=$(($count+1)) done #for: count=1 for arg in $* do echo day la tham so thu $count: $arg count=$(($count + 1)) done ================================================== ============================================= Bi 5: Vit chng trnh Shell phn tch cc tham s v cc i s truyn vo tng ng vi tham s . Gi s chng trnh myshell c th nhn 4 tham s l a,b,c,d nhng ch c tham s c l c i s truyn vo. Khi g cu lnh trong Shell: myshell abc argument d other_argument th vi tham s c ta c i s l argument, ngoi ra chng trnh cn 1 i s l other_argument. Code: while getopts abc:d option do case "$option" in a) echo co tham so a;; b) echo co tham so b;; c) echo co tham so c, doi so la $OPTARG;; d) echo co tham so d;; \?)echo tham so nay khong hop le esac done

while [ $OPTIND le $# ] do echo n tham so tu do: eval echo \$$OPTIND shift done ================================================== =============================== Bi 6 : Vit chng tri h shell gia phng tri h bc hai : ax2 + bx +c =0 vi cc tham s a,b,c nhp t bn phi va ca kt qua chi h xa hai ch s. Code: #!/bin/bash echo -n "a= " read a echo -n "b= " read b echo -n "c= " read c delta=$(echo "$b^2 - 4*$a*$c" | bc) if [ $delta -lt 0 ] then echo "pt vo nghiem" elif [ "$delta" -eq 0 ] then echo -n "pt co nghiem kep x= " x=$(echo "scale=2; -$b/(2*$a)" | bc) echo "$x" else echo "phuong trinh co 2 nghiem" x1=$(echo "scale=2; -($b + sqrt($delta))/(2*$a)" | bc) echo "x1= $x1" x2=$(echo "scale=2; -($b - sqrt($delta))/(2*$a)" | bc) echo "x2= $x2" fi exit 0 Bi 2 : Vit chng tri h shell li k ca tp tin trong th muc nhp va t ba phm ma co ki h thc > 4KB theo dng sau : Tng s tp tin Tp tin 1 kch thc ..... tp in n kch thc Code: #!/bin/bash

SIZE=4096 # hng s echo -n "thu muc : " read directory index=0 for file in $( find $directory -type f) do filesize=$(ls -l $file | awk '{print $5}') # tr g th 5 cu kt qua l h ls l la ki h if [ $filesize -gt $SIZE ] # thc file then _filename[$index]=$file # gn man g file name _filesize[$index]=$filesize # gn man g file size let "index +=1" fi done echo "Tong so tap tin : $index" for ((i=0 ; i<index; i++)) do echo -e "`basename ${_filename}`\t\t kich thuoc: ${_filesize}" done exit 0 ================================================== ============================ Bi 7 : Vit chng tri h shell oc m danh sa h ca user t tp tin users ri kim tra xem cc user ny c thuc group W3 hay khng? N co user na thuc group thi xo user o ra kho group W3 ngc li thi thm user o va group. Code: #!/bin/bash FGROUP=/etc/group GROUPNAME=W3 UFILE=users if [ ! -e $UFILE ]; then echo "File users does not exist" exit 1 fi all_users=( $(cat $FGROUP | grep -w $GROUPNAME | cut -d: -f4 | tr , " ") ) # all_users=( $(cat $FGROUP | awk F: /$GROUPNAME/ {print $4} | tr , " ") ) num_usr_grp=${#all_users[@]} add_remove_users(){ local co=0 for (( i=0; i< num_usr_grp; i++ )) do if [ "$1" == "${all_users}" ] then co=1;break

fi done if [ $co -eq 1 ]; then gpasswd -d $1 $GROUPNAME else gpasswd -a $1 $GROUPNAME fi } while read usr do add_remove_users $usr done <$UFILE exit 0 ================================================== ======================================== Bi 8 Vit chng tri h 1 s t h thp phn 10 ( Dec ) sang h 2 (Bin), 8 (Oct) , 16 (Hex). Vi du : convert b 16 n 500 co nghi la s 500 sang c s 16. Ch : oa code d y cu g du g minh ho l h shift . Ba co th go tham s cu chng trnh theo 2 cch : ./convert b radix n number hoc ./conver n number b radix Code: #!/bin/bash if [ $# -ne 4 ]; then echo "Usage : $0 -b radix -n number or $0 -n number -b radix" exit 1 fi while [ "$1" ] do if [ "$1" = "-b" ];then ob="$2" case $ob in 16 ) basesystem="Hex";; 8 ) basesystem="Oct";; 2 ) basesystem="Bin";; * ) basesystem="Unknown";; esac shift 2 elif [ "$1" = "-n" ] then num="$2" shift 2 else echo "Program $0 does not recognize option $1" exit 1 fi

done op=$(echo "obase=$ob;ibase=10;$num;" | bc) echo "$num Decimal number = $op in $basesystem number system (base=$ob)" exit 0 1. Vit chng trnh to 50 th mc cng lc. #!/bin/bash echo " chuong trinh tao 50 thu muc trong linux " for ((i=1;$i<=50; i=$i+1)) do mkdir thumuc$i done chy kch bn chmod +x xyz.sh ( xyz.sh l tn file ny ) ./xyz.sh ================================================== ================================== 2 vit chng trnh tm s chia ht cho 5. (n nhp t bn phm) U TIN BN dng ln gedit xyz.sh // to file xyz c ui m rng .sh #!/bin/bash echo " chuong trinh tinh tong cac so chia het cho 5" echo "nhap n" read n tong=0; for ((i=1; $i<=n; i=$i+1)) do if [ $(($i%5)) ==0 ] then tong=$(( $tong + $i)) fi done echo " dap so :$tong" lu file li chy scrip nh sau chmod +x xyz.sh ./xyz.sh

You might also like