Shell Programming පාඩම-කොටස 07

ලිනක්ස් ශෙල් ප්‍රොග්‍රැමින් ගැන ඉගෙන ගන්න.

Moderator: Mr.Angel

Shell Programming පාඩම-කොටස 07

Postby root » Sun Oct 19, 2014 2:09 pm

14. වේරියබල් ඇක්සස් කිරීම හා ප්‍රින්ට් කිරීම

මේ ගැන නම් ඔයාල කලින් ඉගෙන ගත්ත.වේරියබල් එකක් access කරන්නෙ මෙහෙමයි
$වේරියබල් එකේ නම

වේරියබල් හදන්නෙ මෙහෙමයි
flowers=rose
ඒ හදපු එක ප්‍රින්ට් කරන්නෙ මෙහෙමයි
echo $flowers

ප්‍රින්ට් කරනකොට අනිවා $ දාන්න ඔන නැත්තම් ප්‍රින්ට් වෙන්නෙ වේරියබල් එකේ තියෙන value එක නෙවෙයි echo ට ඉස්සරහින් තියෙන එකමයි. $ මගින් තමයි නිතරම වේරියබල් තේරුම් ගන්නෙ.

15.echo කමාන්ඩ් එක ගැන........

මේ කමාන්ඩ් එක අපි කලින් use කරානෙ. ඒකෙන් අපි කරේ අපට අවශ්‍ය දේවල් ප්‍රින්ට් කරගනිපු එක.මේකෙ තව වැඩ කෑලි වගයක් තියෙනව අපි බලමු ඒවත්.

මේක හරියටම use කරන්නෙ මෙහෙමයි.
echo [options] [string, variables...]

මේ options කියන තැනට දාන ඒව ගැන අපි බලමු දැන්.

-n -මේකෙන් කියන්නෙ output එක තවත් අලුත් ලයින් එකකට යවන්න එපා කියල.
-e - මේකෙන් කියන්නෙ පහල තියෙන backslash හා specials characters වලින් ඉදිරිපත් වෙන අර්ත දැක්වීම් සක්‍රිය වෙන්න කියල.


දැන් කලින් කියපු දෙක උදාහරණ වලින් පැහැදිලි කර ගනිමු.

echo “Myname is kamal”
මේක රන් කරහම ටර්මිනල් එකේ ඊළඟ ලයින් එකේ Myname is kamal කියල ප්‍රින්ට් වෙලා ආයෙ කර්සර් එක පහල ලයින් එකට ගියා නේද ?(කර්සර් එක ට වම් පැත්තෙන් තව කම්පියුටර් එකේ නම user ගෙ නම වගේ විස්තර වගයකුත් තියෙනව මම ඒව ගැන සලකන්නෙ නැතුව තමයි කිව්වෙ)
Pic ….................................

දැන් මේක කරල බලන්න
echo -n “Myname is kamal”
මේක රන් කරහම ටර්මිනල් එකේ ඊළඟ ලයින් එකේ Myname is kamal කියල ප්‍රින්ට් වෙලා කර්සර් එක එතන ඉස්සරහම බ්ලින්ක් වෙවී තිබුන නේද ?
pic....................


-n මගින් new ලයින් එකකට යන එක නවත්තනව කියල තේරුනා නේද?


ඊළඟට බලමු -e ගැන
අපි echo මගින් ප්‍රින්ට් කරන්න හදන String (අකුරු ඉලක්කම් අයත් වන data type එක) එක ඇතුලෙ තියෙන special characters (key bord එකේ තියෙන backspace,escape වගේ keys නිරූපණය කරන characters ) වල නිරූපණය සක්‍රිය කරන්න කියන එක තමයි -e මගින් කියන්නෙ.

echo “Myname is kamal”

මේක රන් කරහම එන output එක දන්නවනෙ අපි දැන් මේකට special character එකක් එකතු කරමු. back space එක නියෝජනය කරන \b කියන එක තමයි එකතු කරන්නෙ.

echo “Myname is kamal'\b'”

දැන් හරි නම් out එක එන්න ඔන Myname is kama කියල ඒ මොකද \b කියන special character එකෙන් නිතරම ඊට කලින් තියෙන අකුර මකන නිසා (back space key එක ඔබන කොට වෙන දේ) ඒත් එහෙම වෙලා නෑ out එක එන්නෙ “Myname is kamal\b” කියල ඒ කියන්නෙ special character එකට අදාල දේ වෙලා නෑ කියන එක. ඊළඟට මේක රන් කරල බලන්න

echo -e “Myname is kamal'\b'”

මේකෙදි නම් out එක එනව “Myname is kama” කියල -e යොදපු නිසා special character වලට අදාල නිරූපණ සක්‍රිය වෙලා.

මෙතන තියෙනව වැදගත් වන special character කිහිපයක්
\a alert (bell)
\b backspace
\c suppress trailing new line
\n new line
\r carriage return
\t horizontal tab
\\ backslash


මේව use කරල බලන්න ඔයාල.

16. Shell ගණිත කර්ම

අපි දැන් බලමු කොහොමද මේ shell Programming වලදි ගණිත කර්ම වැඩ කරගන්නෙ කියල . +,-,*,/,% වගේ වැඩ වලට එකම වගේ ක්‍රමයක් තමයි තියෙන්නෙ දැන් බලන්නෙකො ඒක.

expr value1 math-operator value2

උදා- expr 5 + 6
operator එක දෙපැත්තෙ මේවගේ space දෙකක් තියෙන්න ඕන නැත්තම් වැරදියි.
5 + 6
අනිත් හැම එකක්ම වගේ ඔහොම තමයි.බලන්නකො උදාහරණ ටික.

0.1එකතු කිරීම
expr 12 + 3

0.2 අඩු කිරීම
expr 6 – 1

0.3 බෙදීම
expr 10 / 2

0.4 ප්‍රතිශත
expr 20 % 3
මේකෙ උත්තරය 2 එහෙම වෙන්නෙ විස්ස 3න් බෙදුවහම 18 ඉතුරු 2.

0.5 වැඩි කිරීම
මෙතනදි නම් පෙඩි වෙනසක් තියෙනව අපි සාමාන්‍යයෙන් වැඩි කරනකොට භාවිතා කරන්නෙ * ලකුණනෙ ඒත් shell Programming වලදි වැඩි කිරීම් සදහා භාවිතා කරන්නෙ \* කියන ලකුණ .

expr 2 \* 4


echo එකත් එක්ක බලමු දැන්.

මෙන්න මෙහෙම ලිව්වහම මොකක් වෙයි ද ?
echo “expr 6 + 2”
echo 'expr 6 + 2'

කරල බලන්න වැඩ කරන්නෙ නම් නෑ. ඒත් මෙහෙම කරොත් නම් හරි
echo `expr 6 + 2 `

මොකද්ද වෙනස සමහර විට එක පාරටම පේන එකක් නෑ expr 6 + 2 දෙපැත්තෙ තියෙන්නෙ Single quotes (' ') නෙවෙයි. Back quote (` ` ) කියන ජාතිය.(ඒව තියෙන්නෙ keybord එකේ escape key එකට පහලින් tab key එකට උඩින් ~ තියෙන key එකේ)

17. Quotes පිළිබඳ
quotes ඒ කියන්නෙ මෙන්න මේව " , ' , ` ගැන තමයි දැන අපි කතා කරන්න හදන්නෙ.
1. Double Quotes (“ ” ) - “My name is kamal”

double quotes ඇතුලෙ ලියන ඒව ගැන කිව්වොත් කම්පුටරේ ඒව තේරුම් ගන්නෙ අර්ථයක් නැති දෙයක් විදියට.ඒවයින් ප්‍රෝග්‍රෑම් එකට කිසිම බලපෑමක් වෙන්නෙ නෑ.

2. Single quotes(' ') -'My name is kamal'
මේකත් කලින් එක වගේ තමයි.

3. Back quote (` `) - “Date is `date`”
මේව ඇතුලෙ ලියන්නෙ execute වෙන commands

උදාහරණ

echo “i have a computer”
echo 'my name is mad'
echo “this months calendar `cal` ”


18.The read Statement

අපි කම්පියුටර් එකේ කීබෝඩ් එකෙන් ඇතුලත් කරන දත්තයක් වේරියබල් එකකට save කර ගන්න විදිය තමයි දැන් බලන්නෙ. ඔයාලත් එහෙම අවස්ථා දැකල ඇති terminal එක use කරනකොට user name , password ඇතුලු කරන්න තියෙන අවස්තාවත් මෙහෙම එකක්.
මුලුන්ම මේ පොඩි වැඩේ කරල බලන්න.ටර්මිනල් එකේ මෙහෙම ටයිප් කරල enter key එක ඔබන්න.
read myinput

ඔයාලට පේනව නේද කර්සර් එක බිලින්ක් වෙවී තියෙනව කියල ඊලඟට මොකක් හරි වචනයක් type කරල එන්ටර් කරහම සුපුරුදු විදියට කර්සර් එක එනව. දැන් echo command එක use කරල myinput කියන UDV එක ප්‍රින්ට් කරල බලන්න එතකොට ඔයාට දකින්න ලැබෙයි ඔයා ඉන්පුට් කරපු අගය තමයි ආයෙ ප්‍රින්ට් වෙලා තියෙන්නෙ කියල.
Read කියන එකෙන් තමයි මේ ඉන්පුට් කරන values අල්ලගන්නෙ අපි දැන් මේ සම්බන්ධයෙන් පොඩි උදාහරණයක් බලමු.
ඔයාලත් මේ shell script එක ලියල රන් කරල බලන්න.

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

$ gedit my
#
# Hi this is my input test Programm
#
clear
echo "Please Enter Your Name"
read myinput
echo " your input is :-$myinput"

###################################################
2.
####################################################

$ gedit my
#
# Hi this is my Simple calculator
#
clear
echo "Please Enter Your First Value"
read myinput1

echo "Please Enter Your second Value"
read myinput2

echo "your Total Value is ` expr $myinput1 + $myinput2 `"


###################################################
මතකනෙ මේව රන් කරන්න කලින් chmod වලින් මොඩ් කරල ඉන්න ඔන හරිද ?

19 .කැළෑ කාඩ්
හි.. ඔයාල බලයි මේ මොන මගුලක්ද කියල කැළෑ කාඩ් (Wild Card) කියන්නෙ.අපි බලමු ඒ ගැන දැන්. ඔයාලට කම්පියුටර් එකේ තියෙන එකම ජාතියෙ files ඔක්කොම බලාගන්න ඔන උනහම කරන දේ දන්නවනෙ search bar එකේ *.අදාල file වර්ගයෙ extension එක ගහල search කරනවනෙ. අපි හිතමු ඔයාලට ඕන කියල තියෙන ඔක්කොම Mp3 files ටික බලා ගන්න කියල එතකොට කරන්න ඔන *.mp3 කියල search කරන එක.ඔයාල හිතුවද ඇයි මේ * දාන්නෙ කියල එහෙම දාන්නෙ අපි හරියටම එතනට දාන්න ඕන එක දන්නෙ නැති නිසා. තවත් එකක් ගත්තොත් අපේ කම්පුටර් එකේ තියෙන මුල අකුරු තුන abc කියල තියෙන Text file ඔක්කොම බලාගන්න ඕන එතකොට Search කරන්න ඕන මෙහෙම abc*.txt මෙන්න මේවගේ ඒවට යොදාගන්න සලකුණු අපි හදුන්වනව wild card කියල. මූලිකවම අපි wild card වර්ග තුනක් ගැන කතා කරනව.

1. * -මේකෙන් පුලුවන් string එකක හරි characters set එකක හරි තියෙන දේවල් ගලපල බලන්න.
භාවිතා කරන ආකාර.
01. ls * -ඉන්න ඩිරෙක්ටරි එකේ තියෙන ඔක්කොම දේවල් පෙන්නනව.
02 .ls m*-ඉන්න ඩෙරෙක්ටරි එකේ තියෙන m අකුරෙන් පටන් ගන්න ඔක්කෙම file පෙන්නනව.(m අකුර වෙනුවට කැමති එකක් දාගන්න පුලුවන්)
03.ls *.c  -extension එක c තියෙන හැම file එකක්ම පෙන්නනව.
04.ls ab*.c -extension එක c තියෙන file name එක ab වලින් පටන් ගන්න හැම file එකක්ම පෙන්නනව.
2. ?- මේකෙන් පුලුවන් ඔනම තනි අකුරක් ගලපල බලන්න.

භාවිතා කරන ආකාර.

01.ls ? - file name එක තනි අකුරක් විතරක් තියෙන files බලාගන්න පුලුවන්.
02.ls fo?- fo කියල නම පටන් ගන්න දිග අකුරු තුනක් වන සියලුම files බලාගන්න පුලුවන්.

3. […] - වරහන් දෙක ඇතුලෙ තියෙන ඔනෑම character එකක් ගලපල බලන්න පුලුවන්.

භාවිතා කරන ආකාර.

1. ls [mad]* - m , a , d කියන අකුරු වලින් පටන් ගන්න සියලුම files බලාගන්න පුලුවන්. ls [a-f]* කියල දුන්නොත් a සිට f දක්වා නම් වලින් පටන් ගන්න files බලා ගන්න පුලුවන්.

[!a-f] කියල හරි [^a-f] කියල හරි දුන්නෙත් a සිට f දක්වා නම් වලින් පටන් ගන්න files ඇර අනිත් ඒව ඔක්කොම බලා ගන්න පුලුවන්.

20.එකම කමාන්ඩ් ලයින් එකේ කමාන්ඩ් කිහිපයක් රන් කිරීම.

කමාන්ඩ්1;කමාන්ඩ්2

මෙහෙම රන් කරහම ඒ කමාන්ඩ් දෙකම එක පාර රන් වෙනව.
මේක බලන්නකො.
date;who
දෙකම කමාන්ඩ්. මේක රන් කරහම කමාන්ඩ් දෙකේම ප්‍රතිඑල පෙන්නනව.

21.Command line Processing

ටර්මිනල් එක open කරල මෙන්න මෙහෙම ටයිප් කරන්න.
ls mad_terminal
එතකොට මෙන්න මේවගේ error පණිවිඩයක් පෙන්නාවි
ls: cannot access mad_terminal: No such file or directory
මේකියන්නෙ mad_terminal කියල file එකක් හරි directory එකක් වත් නැතිලු ඒක ඇතුලෙ තියෙන ඒව පෙන්නන්න. (ls මගින් පුලුවන්නෙ directory එකක තියෙන content එක බලාගන්න)
මෙතනදි ls කියන්නෙ execute වෙන කමාන්ඩ් එක ඒකට ඉස්සරහින් තියෙන ඒවට අපි කියනව arguments කියල කලින් කරපු එකේ තියෙන argument එක තමයි mad_terminal කියන එක.පහල තියෙන උදාහරණ වලින් මේගැන පහසුවෙන් තේරුම් ගන්න පුලුවන් වෙයි.

1. ls mad - කලින් කරපු එක වගේමයි. කමාන්ඩ් එක ls ආගියුමන්ට් එක mad ආගියුමන්ට් ගනන එකයි.
2. clear - කමාන්ඩ් එක clear ආගියුමන්ට් නැත.
3. date - කමාන්ඩ් එක clear ආගියුමන්ට් නැත.
4. tail -22 mad - කමාන්ඩ් එක tailආගියුමන්ට් -22 හා mad ආගියුමන්ට් ගනන දෙකයි.
5. cp he he.in-කමාන්ඩ් එක cpආගියුමන්ට් he හා he.in ආගියුමන්ට් ගනන දෙකයි.



අපි බලමු ඊළඟට ඇයි මේ arguments කියන ඒව භාවිතා කරන්නෙ කියල.

22. ඇයි මේ Command Line arguments අවශ්‍ය වෙන්නෙ.

ප්‍රධාන කාරණා දෙකක් තියෙනව.
1. කමාන්ඩ් එකට අවශ්‍ය option එකක් ලබා දීමට.
echo -e “mad”
මේකෙ මේ -e කියල තියෙන්නෙ පළමු argument එක ඒක echo කියන command එකේ option එක.
2. කමාන්ඩ් එකට මොන files ද reading and writing කරන්න ඕන කියල ලබා දෙන එක.
rm කියන කමාන්ඩ් එකෙන් පුලුවන් file එකක් remove කරන්න ඒ කිව්වෙ delete කරන්න ඉතින් එහෙම කරන්න මොන file එකද අයින් කරන්න ඔන කියල කමාන්ඩ් එකට දෙන්න ඔන. ඒක කරන්නෙ මෙහෙමයි.

rm file එකේ නම
rm filename

ඊළඟට බලමු කොහොමද command line arguments අපේ shell ස්ක්‍රිප්ට් එකට pass කරන්නෙ කියල.
අපි හදපු my.shell කියල ශෙල් script එකක් තියනව කියල හිතමු. දැන් ටර්මිනල් එකෙන් ඒක රන් කරමු 24 කියන argument එකත් pass කරගෙන.
./my.shell 24

මේවගේ අපට කැමති arguments ගණනක් pass කරන්න පුලුවන්.ඊළඟට බලමු කොහොමද අපි ටර්මිනල් එකෙන් පාස් කරපු arguments ශෙල් එක ඇතුලෙදි අල්ල ගන්නෙ කියල.අපි හිතමු අපි අපි argument තුනක් පාස් කරා කියල ඒ තුන අපට $1 , S2 , $3 කියල හදා ගනිපු වේරියබල් තුනකින් ඒ පාස් කරපුව අල්ල ගන්න පුලුවන්. සරලවම කිව්වෙත් $1 කියල හදපු වේරියබල් එකට පළමු argument එකත් $2 ට දෙවනි argument එකත් S3 ට තුන්වෙනි argument එකත් assign වෙනව.තවමත් පැහැදිලි නැත්තම් මේ උදාහරණය බලන්න.


අපි මුලින්ම හදාගනමු my.shell කියල script එකක් ඒකෙ මෙන්න මෙහෙම ටයිප් කරල save කරගන්න.
#########################################

# gedit my
#!/bin/bash
# Catch arguments
# sh scriptname 1 2 3

echo "My 1st Argument is : $1"
echo "My 2nd Argument is : $2"
echo "My 3rd Argument is : $3"

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

දැන් ටර්මිනල් එකේ මේක රන් කරනකොට මෙන්න මේ විදියට argument තුනකුත් එක්ක රන් කරන්න.
./my.sh 5 9 4

resutl එක මෙන්න මේ විදියට පෙනේවි.

My 1st Argument is : 5
My 2nd Argument is : 9
My 3rd Argument is : 4

අපි පාස් කරපු එක shell එක ඇතුලෙදි අල්ලගෙන ප්‍රින්ට් කරපු එක තමයි මෙතනදි සිද්ද උනෙ.තව වැදගත් වෙන දේවල් කිහිපයක් බලමු ඊළඟට
01. $0 කියන වේරියබල් එකක් හැදුවොත් ඒකට assign වෙනව shell එකේ නම.
2. $* හරි $@ කියන ඒවයින් ටර්මිනල් එකෙන් එවන argument ඔක්කෙම එක පාරට අල්ල ගන්න පුලුවන්.
මේ උදාහරන කරල බලන්න ඒවයින් තේරුම් ගන්න පුලුවන් ලේසියෙන්ම.

Arguments කැමති ගානකුත් එක්ක මේක රන් කරන්න.

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

# gedit my
#!/bin/bash
# Catch arguments
#
echo "My Arguments are : $@"

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



Arguments තුනක් එක්ක මේක රන් කරන්න.

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

# gedit my
#!/bin/bash
# Catch arguments
#
echo "My Argument name is : $0"
echo "My Arguments are : $1"
echo "My Arguments are : $2"
echo "My Arguments are : $3"


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

තව මතක තියා ගන්න ඕන කරුණක් තමයි $0,$2,$3 කියල අර්ගියුමන්ට් අල්ල ගන්න වේරියබල් අපට script එක ඇතුලෙ ආයෙ භාවිතා කරන්න බැරි බව.

  • 0

User avatar
root
Site Admin
 
Posts: 82
Joined: Mon Jul 15, 2013 3:46 pm
Has thanked: 0 time
Been thanked: 0 time
Reputation: 0

Return to Shell Programming

Who is online

Users browsing this forum: No registered users and 1 guest