2014-05-15

ලිනක්ස් Shell Programming පාඩම-කොටස 15


3. if...else...fi


මම දැන් කියන්නෙ if else ගැන

  if condition
           then
                     condition එල true නම් else වලින් ඉහල
තියෙන සියලුම දේ රන් වෙනව.
                   
           else
    condition එල false නම් fi වලින් ඉහල
තියෙන සියලුම දේ රන් වෙනව.
                     
           fi

 මෙන්න මේ කතාවට තමයි if else කතාව කියල කියන්නෙ.අපි දැන බලමු ඒ සම්බන්ධ උදාහරණයක්

##########################################
#!/bin/sh
#
#

if test $1 -gt 0 
then 
echo "$1 number is positive" 
else 
echo "$1 number is negative" 
fi 

##########################################

මේ program එක ස්ක්‍රිප්ට් එකක ලියල run කරන්න ඕන integer පැරාමීටර් එකකුත්  එක්ක ප්‍රොගැම් එක ලියල තියෙන්නෙ ඒ ලබාදෙන පැරාමීටර් එක Program එක ඇතුලෙදි 0 වඩා ලොකුද? කියල බලල ලොකු නම් number is positive කියලත් නැත්තම්  number is negative කියලත් ප්‍රින්ට් වෙන්න.නිකන් බලන්න ඔය program එක පැරාමීටර් එකක් නැතුව රන් කරන්න බලන්න. එතකොට මොකද උනේ ?   number is negative කියල නේද ප්‍රින්ට් උනේ ? එහෙම තියන එක වැරදි නිසා අපි තවටිකක් program එක දියුණු කරමු මෙන්න මේ විදියට.

 ##########################################
#!/bin/sh 


if [ $# -eq 0 ] 
then 
echo "$0 : You must give/supply one integers" 
exit 1 
fi 

if test $1 -gt 0 
then 
echo "$1 number is positive" 
else 
echo "$1 number is negative" 
fi 

##########################################

  මේ programm එකේදි මුලින්ම check කරල බලනව command line එකේදි ලබාදීපු පැරාමීටර් එක මොකද්ද කියල ඒක 0 නම්  You must give/supply one integers කියල ප්‍රින්ට් කරල program එකෙන් exit කරනව.


Nested if-else-fi

මෙතනදි කතා කරන්නෙ if else එකක් ඇතුලෙ තියෙන තවත් if else එකක් ගැන බලන්න පහල තියෙන උදාහරණෙ.

##########################################
#!/bin/sh 


if [ $# -eq 0 ] 
then 
echo "$0 : You must give/supply one integers" 
exit 1 
fi 

if test $1 -gt 0 
then 
if test $1 -eq 5 
then 
echo “ Yes its five ” 
else 
echo “ Yes its not five ” 
fi 
else 
echo "$1 number is negative" 
fi 

##########################################

 මෙතන පළවෙනි If එක ඇතුලෙදි ආයෙමත් වාරයක් චෙක් කරනව ලබාදීපු අගය 5 ට සමානද නැද්ද කියල. මෙන්න මේ වගේ if else එකක් ඇතුලෙ තව තව if else ලියන එකට අපි කියනව Nested if-else-fi කියල. මෙන්න මේ වගේ තමයි syntax එක

if condition
        then
                if condition
                then
                        .....
                        ..
                        do this
                else
                        ....
                        ..
                        do this
                fi
        else
                ...
                .....
                do this
        fi

Multilevel if-then-else

දැන් අපි කතා කරන්න හදන්නෙ Multilevel if else ගැන.ම්ම්ම්ම්ම්...... අපි මුලින්ම කලින් කරපු if else ගැන ආයෙ පොඩ්ඩක් මතක් කරගන්න පොඩි වැඩක් කරල බලමු.

අපට මෙන්න මෙහෙම ප්‍රොග්‍රැම් එකක් හදාගන්න ඕන මොකද්ද දන්නවද? ළමයෙකුගෙ ලකුණු ඇතුලත් කරහම ඒ ළමයගෙ result එක ප්‍රින්ට් වෙන්න ඕන A , B ,C ,S ද F ද කියල.

75 -100 අතර  නම් A
65 -75 අතර  නම් B
45 -65 අතර  නම් C
45 ට අඩු නම් F
මුලින්ම ඔයාල try කරල බලන්න මේක කරල බලන්න.
##########################################

#!/bin/sh 


if [ $# -eq 0 ] 
then 
echo "Please Enter Marks First" 
exit 1 
fi 

if test $1 -ge 75 
then 
echo "A" 
fi 
if test $1 -ge 65 
then 
echo "B" 
fi 
if test $1 -ge 45 
then 
echo "C" 
else 
echo "F" 
fi 


##########################################

මෙක තමයි ඒ program එක ලියන වැරදි විදිය බලන්න වරදින තැන. ලකුණු 85 විතර ලබා දුන්නොත් A , B , C කියන තුනම ලැබෙනව එල නෙ !  අපේ විභාග දෙපාර්තමේන්තුව වගේ එහෙම වෙන්න බෑ අපට මෙන්න මේ program එක ලියන්න multilevel ඉෆ් එල්ස් යොදාගන්න පුලුවන් මෙන්න මේ වගේ

##########################################
#!/bin/sh 


if [ $# -eq 0 ] 
then 
echo "Please Enter Marks First" 
exit 1 
fi 

if [ $1 -ge 75 ] 
then 
  echo "A" 
elif [ $1 -ge 65 ] 
then 
  echo "B" 
elif [ $1 -ge 45 ] 
then 
  echo "C" 

else 
  echo "F" 
fi 

##########################################

if else කියන එක කෙටි කරල ලියල තියෙන්නෙ elif  කියල.[] වරහන් යොදන ආකාරයත් හොදට බලන්න ඒක ගොඩක් වැදගත්


Loops in Shell Scripts

                                        ලූප් මගින් අපට පුලුවන් මොකක් හරි එකම කමාන්ඩ් එකක් නැවත නැවත රන් කරන්න.සරලව කිව්වොත් එකම දේ ආයෙ ආයෙ කරන්න. Bash ශෙල් වලදි අපි loop වර්ග දෙකක් ගැන කතා කරනව. ඒව තමයි

1. for loop
2. while loop 

For Loop 

හිතන්න මෙහෙම අපට ඕන ටර්මිනල් එකේ welcome කියල 15 වාරයක් ප්‍රින්ට් කරන්න. මෙන්න මේ විදියට ඒක කරන්න පුලුවන්.

##########################################
#!/bin/sh 


echo "Welcome " 
echo "Welcome " 
echo "Welcome " 
echo "Welcome " 
echo "Welcome " 
echo "Welcome " 
echo "Welcome " 
echo "Welcome " 
echo "Welcome " 
echo "Welcome " 
echo "Welcome " 
echo "Welcome " 
echo "Welcome " 
echo "Welcome " 
echo "Welcome " 



##########################################

වැඩේ කැතයි නේද? 100 විතර ප්‍රින්ට් කරගන්න උනොත් මොනව වේද? දැන් අපි ඒක for loop එකක් මගින් කරල බලමු.

##########################################
#!/bin/sh 


for my in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
do 
echo "Welcome " 
done 
##########################################

 ඔන්න ඔච්චරයි ලියන්න තියෙන්නෙ. මෙතන my කියල තියෙන්නෙ වේරියබල් නේම් එකක් ඒකට කැමති නමක් දෙන්න පුලුවන්. In 1 2 3 ..  කියල තියෙන්නෙ repeat වෙන්න ඕන වාර ගණන.do හා  done කියන එක අතර ලියන්න ඕන අපට repeat කරගන්න ඕන කමාන්ඩ් ටික.

දැන් මෙන්න මේ program එක බලන්න අපට මේකෙන් ගන්න පුලුවන් ඕනම එකක ගුණිතය   සරලව කිව්වොත් චක්කරේ.
###########################################################
#!/bin/sh 


if [ $# -eq 0 ] 
then 
echo "Please Enter Number First" 
exit 1 
fi 
n=$1 
for i in 1 2 3 4 5 6 7 8 9 10 11 12 
do 
echo "$n * $i = `expr $i \* $n`" 
done
###########################################################
for loop එකේ syntax එක මෙන්න මෙහෙමයි
         
 for { variable name } in { list }
            do
                     මෙහි ලියන සියලු කමාන්ඩ් execute වේ.
            done
බලන්න පහල තියෙන syntax එක දිහා

for (( expr1; expr2; expr3 ))
         do
              මෙහි ලියන සියලු කමාන්ඩ් execute වේ.
         Done

  මේ තියන විදිය තමයි ගොඩක් දුරට for loop ලියන්න use කරන්නෙ.

##########################################
#!/bin/sh 


for (( i = 0 ;  i <= 5;  i++  )) 
do 
  echo "Welcome $i times" 
done 

##########################################

(( ))  ඇතුලෙ කොටස් තුනකින් සමන්විත වෙනව i=0 කියන්නෙ I කියන වේරියබල් එක initialization කරන අවස්ථාව I <=5  කියල කියන්නෙ repeat වෙන්න ඕන අවශය වාර ගණන. I++ කියන එකෙන් වෙන්නෙ I ගෙ අගය එකකින් වැඩි කරන එක( i=i+1 කියන එකම තමයි)
 දැන් බලන්න මේකත්

##########################################
#!/bin/sh 


for (( i = 0 ;  i <= 5;  i++  )) 
do 
  j=i+1 
   echo “ Hi $i” 

done 


##########################################
 

Nesting of for Loop
         මේකට් nesting if else වගේම තමයි loop එකක් ඇතුලෙ තව loop එකක් දාල රන් කරවන එක තමයි මෙතනදි සිද්ධ වෙන්නෙ.
##########################################
#!/bin/sh 


for (( i = 0 ;  i <= 5;  i++  )) 
do 
  for (( j= 0 ;  j <= 5;  j++  )) 
do 
echo “Welcome $i welcome $j” 
  
done 
done 


##########################################
 
මේක කරල බැලුවද ? Inner loop එක ඇතුලෙ තියෙන කමාන්ඩ් එක 25 වතාවක් රන් වෙනව කියල පේනව නේද ?
අපි දැන් මෙන්න මේ වගේ එකක් ප්‍රින්ට් කරගන්න try එකක් දීල බලමු.
*
**
***
****
*****

මෙන්න මේකට ලියන්න ඕන program එක මෙහෙමයි
##########################################
#!/bin/sh 


for (( i = 1 ;  i < 6;  i++  )) 
do 
  for (( j= 0 ;  j <i;  j++  )) 
do 
echo  -n "*" 
   
done 
echo "" 
done 


#############################################
පළවෙනි loop එක එක පාරක් රන් වෙද්දි අනිත් ඇතුලෙ තියෙන loop එක රන් වෙන වාර ගණන එකින් එක වැඩි වෙන එක සිද්ධ වීමෙනුයි * රටාවකට print වීම සිද්ධ වුණේ echo "" මගින් කරේ * ගණන ප්‍රින්ට් කරල නිව් ලයින් එකකට කර්සර් එක යවපු එක.

දැන් ඔයාල මේ පහල තියෙන චෙස් බොර්ඩ් එකක් විදියට output එක ලැබෙන program එක study කරල බලන්න.

##########################################
#!/bin/sh 


for (( i = 1; i <= 9; i++ )) ### Outer for loop ### 
do 
   for (( j = 1 ; j <= 9; j++ )) ### Inner for loop ### 
   do 
        tot=`expr $i + $j` 
        tmp=`expr $tot % 2` 
        if [ $tmp -eq 0 ]; then 
            echo -e -n "\033[47m " 
        else 
            echo -e -n "\033[40m " 
        fi 
  done 
 echo -e -n "\033[40m" #### set back background colour to black 
 echo "" #### print the new line ### 
done 

##########################################

Post a Comment