අපි Terminal තොවිලය පටන් අරගෙන සෑහෙන දුරක් දැන් ඇවිල්ලා. දැන් නම් කට්ටියට මේ පාඩම් එපා වෙලත් ඇති. එකෙක් හරි කවදා හෝ කියවයි කියන බලාපොරොත්තුව ඇතුව මම මේ ලියන්නෙ. තව වැඩිය මම මේක කරගෙන යන්නෙ නෑ. වැඩේ ඉවර කරන්නත් දැන් ගොඩක් කිට්ටුයි. එහෙනම් අපි අදත් මූලික දේවල් ටිකක් ඉගෙනගනිමු.
Shell script එකක් debug කරමු.
Debug කරනවා කියන්නෙ දෝෂ හොයලා නිවැරැදි කිරීම. Bash shell එකෙන් අපිට -x
සහ -v
කියලා ඔප්ෂන් දෙකක් දීලා තියෙනවා. මේ දෙක උදව්වෙන් පහසුවෙන් script එකක් debug කරන්න පුළුවන්.
-x
option එකෙන් අපේ variables වල හරි අගයන් බලාගන්න පුළුවන්.-v
option එකෙන් shell එකේ run වෙන lines ඒ ආකාරයෙන්ම බලාගන්න පුළුවන්.
මම මෙන්න මේ පහළ script එක දැන් මේ option දෙකම යොදාගෙන run කරලා බලන්නයි යන්නෙ.
මතක තියාගන්න, -x
සහ -v
ඔප්ෂන් run කරවන්න නම් sh
හෝ bash
කියන කමාන්ඩ් දෙක යොදාගන්න වෙනවා. මෙන්න මේ විදියට.
දැන් අපි -v
ඔප්ෂන් එක බලමු.
ඔන්න දැන් ඔයාට තියෙන්නෙ මෙතෙක් ලබාගත්ත දැණුම උපයෝගී කරගෙන විවිධ script ලියන එක. මේ debug tools භාවිතා කරලා වැරදි හොයාගන්නත් දැන් පුළුවන්.
Note! Shell එක පුහුණු වෙනකන් code copy paste කරන්න යන්න එපා. පුළුවන් තරම් අතින්ම ටයිප් කරන්න. නැත්නම් code මතක හිටින්නෙ නෑ.
exit command
Exit කමාන්ඩ් එකෙන් වැඩ දෙකක් වෙනවා. එකක් තමයි script එක නවතාදමන එක. අනික් දේ තමයි script එකේ exit status එක ලබා දෙන එක.
Exit status එක 0 නම්, ඒ කියන්නෙ නිවැරැදිව script එක run වුණා කියලා. 0 හැර වෙන අගයක් නම් මොකක් හරි දෝෂයක් තියෙනවා. මේ exit status එක වෙනත් program විසින් පාවිච්චියට ගන්නවා, මොකද මේකෙන් බලාගන්න පුළුවන් කලින් run වුණ script එක හරියට වැඩ කළාද කියලා.
අපි දැන් උදාහරණයක් ගනිමු.
මේ script file එක මම run කරනවා, ඊට පස්සෙ අපි කලින් ඉගෙනගත්ත විදියට, $? කියන විශේෂ variable එක යොදාගෙන පරීක්ෂා කරලා බලමු අපි කලින් run කරපු script එකේ exit status එක මොකක්ද කියලා.
අපිට මේ command එක ඉදිරියෙදි මීට වඩා වැදගත් වැඩ වලට පාවිච්චි කරන්න වෙනවා. ඒ නිසා මේක අමතක කරන්න එපා.
Bash Script වල සත්ය අසත්ය බව විමසන ආකාරය.
මම හිතන්නෙ, තීරණ ගැනීම පදනම් වෙන්නෙ True සහ False හෙවත් සත්ය හෝ අසත්ය කියන දෙක මඟින් බව බොහෝ දෙනා දන්නවා ඇති.
අපි බලමු මේක Bash Scripting වලදි වෙන්නෙ කොහොමද කියලා. මේකට, අපිට ඕන කරනවා test කියන කමාන්ඩ් එක.
String comparisons:
String දෙකක් සන්සන්දනය කරලා ඒවා සමානද, අසමානද කියලා බලන්නෙ සහ ඒ string එකේ length එක 0 ද නැද්ද කියලා බලන්නෙ මෙහෙමයි.
මේ script එක තේරුම්ගන්න උත්සාහ කරමු.
මුලින්ම මෙතන මම string1, string2 සහ string3 යනුවෙන් string තුනක් අරන් තියෙනවා. ඊට පස්සෙ,
test -n $1
කියන්නෙ අපි ලබාදෙන positional parameters වලින් පළමු එක පරීක්ෂා කරලා ඒකෙ length එක 0 නොවන අගයක්ද කියලා පරීක්ෂා කිරීම. ඒ කියන්නෙ පරීක්ෂා කරන string එකේ length එක 0 නෙවෙයි නම් මේකෙ output කරනවා Yes කියලා.
($1 කියන්නෙ විශේෂ variable එකක් බවත් ඒවා positional parameters විදියට ලබාදෙන බවත් කලින් සාකච්ඡා කළා)
&& echo "Yes" || echo "No"
කියන්නෙ ඔව් නම් Yes සහ නෑ නම් No කියලා print වෙන්න මම එකතු කළ code එක.
ඊළඟට තියෙන්නෙ test -z $1
කියන එක, මේකෙන් පරීක්ෂා කරන්නෙ දෙන ලද variable එකේ length එක 0 ට සමානද? කියලා පරීක්ෂා කරන එක. තවත් සරල කළොත්, පරීක්ෂා කරන string එකේ length එක 0 නම් මේකෙන් output කරනවා Yes කියලා.
ඊළඟට කරලා තියෙන්නෙ string දෙක සමානද සහ අසමානද කියලා පරීක්ෂා කරලා බැලීම බව වැටහෙනවා ඇති.
අපි මේ script එකට positional parameter එකකුත් දීලා run කරලා බලමු output එක මොන වගේද කියලා.
Output එක තේරුම්ගනිමු.
අපි positional parameter එකක් ලබා දුන්නා, ඒකෙ length එක 0 වෙන්න බෑනෙ. ඒ නිසා Yes කියලා output වෙලා තියෙනවා. 0 ද කියලා පරීක්ෂා කළාම length එක 0 නොවන නිසා ඊළඟට No කියලා output වෙලා තියෙනවා.
string1 සහ string2 සමාන නිසා Yes විදියට output වෙලා තියෙනවා. ඒ වගේම string2 සහ string3 වෙනස් නිසා ඒත් Yes කියලා print වෙලා තියෙනවා. මෙතනදි පරීක්ෂා කරන්නෙ length එක නෙවෙයි, අදාළ string එක. -n සහ -z ඔප්ෂන් වලදී තමයි length එක පරීක්ෂා කරන්නෙ. උදාහරණ ගනිමින් logic එක පැහැදිලි කරගන්න.
Number comparisons:
අපි string comparison වලට සලකුණු භාවිතා කළත්, සංඛ්යා compare කරන්න පාවිච්චි කරන්නෙ වෙනම operators සෙට් එකක්. මේ තියෙන්නෙ ඒවා.
-eq
equal/සමානද =-ne
not equal/අසමානද !=-gt
grater than/විශාලද >-ge
grater than or equal to/විශාල හෝ සමානද >=-lt
less than/කුඩාද <-le
less than or equal to/කුඩා හෝ සමානද <=
මේක පුහුණු වෙන්න මෙන්න මේ විදියට ඔයත් script ලියලා පුහුණු වෙන්න.
මෙන්න output එක.
File Checking
test කමාන්ඩ් එකෙන් විවිධ ආකාර ගොඩකට file පරීක්ෂා කරන්න පුළුවන්. ඒවයින් කීපයක් අපි බලමු.
-r
file <- ෆයිල් එක අදාළ තැන තියේ නම්, සහ readable නම් True output කරනවා.-w
file <- ෆයිල් එක තියේ නම් සහ writable නම් True-f
file <- ෆයිල් එක තියේ නම් සහ ඒක directory එකක් නොවේ නම් True-d
file <- ෆයිල් එක තියේ නම් සහ ඒක directory එකක් නම් True-s
file <- ෆයිල් එක තියේ නම් සහ සයිස් එක 0 ට වඩා වැඩි නම් True
උදාහරණයක් ගනිමු. මම testfile.txt කියලා ෆයිල් එකක් හදලා ඒකට Android Wedakarayo කියන වචන දෙක ඇතුළත් කළා මුලින්ම.
මෙන්න output එක.
මේකෙ 0 න් කියවෙන්නෙ සත්ය බව සහ 1 න් කියවෙන්නෙ අසත්ය බව වග ඔබට වැටහේවි
මීට වඩා ගොඩක් වැඩ test කමාන්ඩ් එකෙන් කරගන්න පුළුවන්. ඒ ටික දැනගන්න පුළුවන් test එකේ manual page එකෙන්. ඒක ගන්න දන්නවනෙ. මම කලින් කියලා දීලා තියෙනවා. man test
ඊළඟ දවසෙ අපි if condition එකෙන් පාඩම අරඹමු. නැවත හමුවෙමු. ඔබට ජය!