2013-10-12

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






  1. ඇයි මේ 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 එකේ නම.

02.$* හරි $@ කියන ඒවයින් ටර්මිනල් එකෙන් එවන 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 එක ඇතුලෙ ආයෙ භාවිතා කරන්න බැරි බව.

24 .Redirection (ප්‍රතිදිශාව). 

 
මේ කතන්දරෙන් කියන එකත් ඒ තරම් අමාරු දෙයක් නෙවෙයි අපි බලමු දැන් ඒ ගැන. අපි සාමාන්‍යයෙන් මොකක් හරි කමාන්ඩ් එකක් රන් කරපුවහම ඒකෙ ප්‍රතිඑලය ටර්මිනල් එකේ ප්‍රින්ට් වෙන එකනෙ වෙන්නෙ. හොඳම උදාහරණෙ තමයි ls කමාන්ඩ් එක එක ටයිප් කරහම ඔයලට ටර්මිනල් එකේම අදාල out put එක පෙන්නන එක. අපට පුලුවන් ඔන්න ඔය දෙන out put එක අපි හදාගනිපු file එකකට අරගන්න, එහෙමත නැත්තම් file එකක් read කරල එකෙ තියන ඒව අරගෙන ටර්මිනල් එකට ලබා ගන්න. ඔන්න ඔය කතාවට තමයි redirection කියල කියන්නෙ.
ඔන්න බලන්න එක කරන හැටි.මුලින්ම ඔය දැන් ඉන්න directory එකේ man.txt කියල text file එකක් හදාගන්න. ඊළඟට ටර්මිනල් එකේ මෙහෙම ටයිප් කරල එන්ටර් ඔබන්න . (ටර්මිනල් එකෙනුත් ඒ directory එක ඇතුලෙ ඉන්න ඔන. )

ls > man.txt


දැන් ඔයාල man.txt කියන file එක ඔප්න් කරල බැලුවෙත් ඔයාලට පෙනෙයි ls මගින් ටර්මිනල් එකේ ටයිප් වෙන්න ඕන ටික man.txt කියන file එකේ save වෙලා තියෙන බව.

ලේසි ක්‍රමේ : - කලින් කරා වගේ මුලින් man.txt කියන file එක හදල ඉන්න ඔන නෑ. ඔය ls > man.txt කියන කමාන්ඩ් එක නිකම්ම ටර්මිනල් එකේ ටයිප් කරහම man.txt එක ඔටෝ හැදිල ඒකෙ ls මගින් අවශ්‍ය දේවල් ටික ලියවෙනව.

ප්‍රධාන Redirection සලකුණු (symbols) තුනක් තියෙනව.ඒව තමයි

      1. >
      2. >>
      3. <
        අපි දැන් බලමු ඒවයි තියෙන වැඩ කිඩ ටික.

          1. > - මේක ඔයාල කරල බැලුවනෙ. මේ ලකුණ යොදා ගත්තම හැම තිස්සෙම write කරන්න ඔන file එක අලුතෙන්ම හැදෙනව. කලින් එහෙම file එකක් තියෙනම් කිසිම කතාවක් නැතුව ඒක overwrite වෙනව.කරලම බලන්නකො.

          2. >> - මෙන්න මේවිදියට තමයි මේක භාවිතා කරන්නෙ.

            ls >> fileName

            මේකෙ තියන විශේෂත්වෙ තමයි කලින් එකේ වගේ overwrite වෙන්නෙ නැතුව එකම file එක write වෙන එක. ඒ කිව්වෙ මෙහෙමයි අපි හිතමු අපි write කරන්න ඉන්න file එක ඇතුලෙ කලින් save කරපු තව මොනව හරි දේවල් තියෙනව කියල ඒව වෙනස් නොවී ඒවට යටින් අලුත් දේවල් ටික save වෙන එක.ඉතින් මේකෙන් පුලුවන් කලින් දේවලුත් එක්ක අලුත් දේවලුත් තියා ගන්න.

          3. < - මේකෙන් තමයි file එකක තියෙනෙ ඒව read කරන වැඩේ කරන්නෙ.
            එක කරන්න පුලුවන් මෙහෙම. මුලින්ම හදන්න මොනව හරි ටයිප් කරපු දේවල් තියෙන ටෙක්ස්ට් file එකක් ඒකෙ නම දෙන්න my.txt කියල දැන් ටර්මිනල් එකෙන් එක තියන directory එකට ගිහින් මෙන්න මෙහෙම ටයිප් කරල රන් කරන්න.

            cat < my.txt
cat කියන කමාන්ඩ් එකෙන් file දෙකක් මූට්ටු කරන්නයි එව ඇතුලෙ තියන ඒව ප්‍රින්ට කරන්නයි පුලුවන්.
මෙව්ව ගැන වැඩි විස්තර පස්සෙ පස්සෙ දැන ගන්න පුලුවන්.
දැන් මේවයින් පොඩි උදාහරණයක් බලමු.
ටර්මිනල් එක ඔපන් කරල මෙන්න මේ කමාන්ඩ් එක රන් කරන්න.

cat > myfile.txt

එතකොට කර්සර් එක බිලින්ක් වෙවී තියෙනව එතකොට ඔයාල ඔය පහල තියෙන පින්තුරෙ වගේ ඔය නගර වල නම් ටික එන්ටර් කරල ඉවරවෙලා CTRL + D ඔබල save කරන්න.



 දැන් ඔය ඉන්න directory එකේ ඒ නගර ටික save උන myfile.txt කියල file එකක් හැදිල ඇති. අපට ඔන ඒ file එකේ තියන නගර වල නම් alphabet එකේ පිලිවෙළට හදන්න. ඒකට කරන්නෙ මෙන්න මේ වැඩේ.මෙන්න මේ කමාන්ඩ් එක රන් කරන්න.

sort < myfile.txt > sorted
ඊළඟට මේක රන් කරන්න
cat sorted
එතකොට sort උන පිලිවෙලට ප්‍රතිඑලය දැකගන්න පුලුවන්. තවත් එකක් තමයි sorted කියල file එකකුත් හැදිල තියෙන බව දකින්න පුලුවන් අදාල directory එකේ .ඒකෙ තමයි sort උන ලිස්ට් එක සේව් වෙලා තියෙන්නෙ.

තියෙන කමාන්ඩ් එක රන් කරහම වෙන්නෙ myfile.txt එකේ තියෙන ඒව read කරල sort කරල sorted කියන නමින් file එකක් හදල ඒකට සේව් කරන එක.
sort -කියන කමාන්ඩ් එක නිතරම අනුපිලිවෙලට සකසන දේවල් වලට භාවිතා කරන්න පුලුවන්.