You are on page 1of 13

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 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 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 ================================================== =============================== i 6 : Vi t chng tri h shell gia phng tri h b c hai : ax2 + bx +c =0 vi cc tham s a,b,c nhp t bn phi va ca t 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 : Vi t chng tri h shell li ca t p tin trong th muc nh p va t ba ph m ma co i h thc > 4KB theo dng sau :

Tng s t p 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 t qua l h ls l la i h if [ $filesize -gt $SIZE ] # thc file then _filename[$index]=$file # g n man g file name _filesize[$index]=$filesize # g n man g file size let "index +=1" fi done echo "Tong so tap tin : $index" for ((i=0 ; i do echo -e "`basename ${_filename}`\t\t kich thuoc: ${_filesize}" done exit 0 ================================================== ============================ Bi 7 : Vi t 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 h ng? N co user na thu c group thi xo user o ra kho group W3 ngc li thi th m 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 Vi t chng tri h 1 s t h th p ph n 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 u i 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