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
##########################################