You are on page 1of 187

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -1- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.

,
சசெம்சமமொழியில் கற்பபமொம்
சஷெல் ஸ்கிரிப்ட

பணியமொ. பிரசென்னமொ
askprasanna@gmail

மின்னூல சவெளியீடு :
FreeTamilEbooks.com

அட்டடைப்படைம், மின்னூலமொக்கம் :
ம.பவெல. பிரசென்னமொ
udpmprasanna@gmail.com

உரிடம :

Creative Commons Attribution - ShareAlike 4.0 International License.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -2- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


இந்நூல
சபற்ற, வெளர்த்த, தவெறிடும் பபமொத தடுத்தமொட்சகமொண்டு
அறசநெறியில பபணிக்கமொத்திடும் எனத அம்மமொவிற்குக்
கமொணிக்டக.

ச.மரிய மதபலனமொ பி.ஏ.பி.எட்.,


இடடைநிடல ஓய்வு ஆசரிடய

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -3- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சபமொருளடக்கம்
நூலுடர:......................................................................................................................................................11
இளவெலுடர:..............................................................................................................................................12
எழிலுடர:...................................................................................................................................................13
நென்றிகள:.....................................................................................................................................................14
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் - பகுதி 1..................................................................15
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – பகுதி 2 தரவு வெடககள....................................21
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் - 3 சசெயல வெடககள, நிடலகள........................27
சசெம்சமமொழியிலகற்பபமொம்சஷெலஸ்கிரிப்ட் – 4 இயங்குதளத்தின்ஏற்றநிடல, மமொறிகடளப்
பயன்படுத்ததல........................................................................................................................................33
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – 5 இயங்குதளத்தின் ஏழ ஓடு நிடலகள......38
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் - 6 சசெயற்பமொடு அலலத நிரலதண்டு
(Functions)....................................................................................................................................................43
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் 7 - கட்டுப்பமொட்டு அடமவுகள (if condition). .46
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட்– 8 சுழற்ச அலலத ஆகக்கட்டைடள (for loop) 52
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட்– 9 சுழற்ச அலலத ஆகக்கட்டைடள (for loop)
சதமொடைர்ச்ச...................................................................................................................................................57
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் -10 வெடளவுக் கட்டைடளயின் பவெற வெடககள
........................................................................................................................................................................62
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் -11 சபமொழசதலமொம் கட்டைடள அலலத while
loop – entry controlled loop..........................................................................................................................67
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் -12 வெடரயிலும் கட்டைடள அலலத until loop –
exit controlled loop........................................................................................................................................72
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் -13. பதர்வுக் கட்டைடள அலலத பதர்வெமொடண
(case statement).............................................................................................................................................77
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் -14. பதர்வுக் கட்டைடள இரந்தமொல கட்டைடள
பவெறபமொடுகள (case statement vs else if ladder).....................................................................................82
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் -15. சுழற்சயில முறிவுக்கட்டைடள (break
statement in loop)..........................................................................................................................................86

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -4- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் -16. சுழற்சயில சதமொடைர் கட்டைடள அலலத
இடடைவிடைமொக் கட்டைடள (continue statement in loop)..........................................................................91
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் -17 கட்டைடளவெரி
அளவுரக்களஅலலதகட்டைடளவெரிதரமதிப்புக்கள (command line parameters or command
line arguments).............................................................................................................................................96
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் -18.கட்டைடளவெரி அளவுரக்கள அலலத
கட்டைடளவெரி தரமதிப்புக்கள (command line parameters or command line arguments) -
சதமொடைர்ச்ச.................................................................................................................................................100
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் -19. உறக்கக் கட்டைடள அலலத தூக்கக்
கட்டைடள (sleep command).....................................................................................................................105
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் -20. அளவுரக்கள அலலத தரமதிப்புக்கள
(command line arguments or command line parameters) சதமொடைர்ச்ச..................................................109
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் -21...........................................................................114
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – 22 மமொற்றக் கட்டைடள (shift command)........119
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – 23 Trap command (கண்ணி -கட்டைடள).......124
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – 24 (getopts command) சபமொரத்தம் சபறம்
கட்டைடள...................................................................................................................................................129
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – 25 (cut command) சவெட்டுக் கட்டைடள........134
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – 26 (paste command) ஒட்டுக் கட்டைடள.........137
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – 27 (tput command) இடு கட்டைடள................140
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – 28 (tput command) இடு கட்டைடள................145
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – 29 (tput command) இடு கட்டைடள சதமொடைர்ச்ச
......................................................................................................................................................................150
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – 30 (nohup command) சசெயலிழக்கமொக்
கட்டைடள...................................................................................................................................................154
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – 31.........................................................................157
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – 32.........................................................................161
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – 33.........................................................................165
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – 34 தப்பிடும் விடசெகள (escape sequences)...170
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – 35 சவெளிபயறம் வெழிக்கட்டைடள (exit
command)....................................................................................................................................................176
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – 36 உளளமொர்ந்த கட்டைடமப்புக் கட்டைடளகள
(Internal Commands and Builtins)............................................................................................................180

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -5- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் – 37 இரட்டடை அடடைப்புக் குறி......................185
முடிவுடர:.................................................................................................................................................189
நூல ஆசரியர் :.........................................................................................................................................190

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -6- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நூலுரர:

“சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட” இந்தத் தடலப்டபச் சசெமொலலும் சபமொழபத ஏபதமொ


திரசமமொழிடயச் சசெமொலகின்பறமொம் என மனதிற்குத் பதமொன்றகிறத. இலினக்சு (Linux) இயங்குதளத்தில
ஏறத்தமொழ பன்னிசரண்டு ஆண்டுகள பட்டைறிவு இரப்பினும், இப்சபமொழததமொன் இத பபமொன்ற ஒர
நூடலத் தமிழில தரத் தரணம் பிறந்திரக்கிறத.
இந்நூலில ஒவ்சவெமொர பகுதியிலும், அதில அடமந்தளள ஆங்கிலக் கடலச்சசெமொற்களுக்கு
இடணயமொகத் தமிழ்ச்சசெமொற்கடளத் தந்திரக்கிபறன். சசெம்சமமொழியில என்ற நூல சதமொடைங்குவெதமொல,
ஒவ்சவெமொர பகுதியிலும் ஒர கவிடத வெடரந்திரக்கிபறன். தமிழ் வெழிக்கலவி கற்பறமொர் இடத சபரிதம்
விரம்புவெர்.
இந்தக் கவிடதகள புதக்கவிடதயில பசெரமொமல, நெமொன் என்பறமொ படித்த மரபுக் கவிடதயின்
தமொக்கத்தில விடளந்தடவெ. இடவெ முழடமயமொக எந்தப் பமொ வெடகயிலும் பசெரமொமல இரப்பினும்,
மரபுக்கவிடத பபமொன்பற அடமந்திரப்பத சறப்பு.
இலினக்சு ஏற்கனபவெ சதரிந்திரப்பபமொர், இந்நூடலப் படிப்பின் சஷெல ஸ்கிரிப்ட்டடை எளிய
தமிழில கற்கலமொம். நெமொன் சசெமொலகிபறன், நீங்கள பகளுங்கள என்ற வெடகயில நூல இலலமொமல, கற்பபமொம்
என்ற பதத்தின் மூலம், நெமொனும் உங்களுடைன் பசெர்ந்த கற்கிபறன் என்படத அறியத்தரகிபறன்.
எனக்குத் சதரிந்தடவெகடள இயன்ற வெடரயில இனிய தமிழில எடுத்தடரக்க முன்றிரக்கிபறன்.
ஒவ்சவெமொர பகுதியிலும் பல நிரலகள இடைம் சபற்றிரக்கின்றன. அவெற்றின் விளக்கங்கள பத்திகளில
இடைம் சபற்றளளன. நிரல்+பமொ=நிரற்பமொ என்ற கிளவியின் மூலம் நெமொனறிந்த தமிடழ நெமொடைறியச் சசெய்ய
விடழகின்பறன்.
நூலில, முதலில நிரற்பமொ வெரம். பிறகு அதற்கமொன விளக்கம் உண்டு. நிரலகளுக்கு வெரிடசெ எண்கள
தரப்பட்டுளளன. புரியமொத சசெமொற்களுக்கு அலலத சபமொதவெமொகப் பயன்படுத்தம் ஆங்கிலப் பதங்களுக்கு
விளக்கங்கள அடடைப்புக்குறிகளுக்குள வெழங்கப்பட்டுளளன. பகுதிகளின் ஈற்றில கடலச்சசெமொற்களும்
அவெற்றிற்கமொன விளக்கங்களும் ஆங்கிலத்தில விளக்கப்பட்டுளளன. படைங்கள, அதற்கமொன விளக்கங்கள,
அட்டைவெடணகள ஆகியனவும் அளிக்கப்பட்டுளளன.
“கற்பபமொம்” என்ற தமிழ் கம்ப்யூட்டைர் இதழில சதமொடைரமொக சவெளிவெந்த இந்தக் கட்டுடரகடளத்
சதமொகுத்த ஒர நூலமொகத் தரவெதில சபரமகிழ்ச்ச சகமொளகிபறன். எனக்கு இத மிகவும் பயனுளள
நூலமொகத் சதரிகின்றத. உங்களுக்கும் அபத உணர்வு ஏற்படும் என்பற கரதகின்பறன்.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -7- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


இளவலுரர:

உலசகங்கும் இரக்கின்ற அன்புத் தமிழ் ஆர்வெலர்களுக்கு, எனத பணிவெமொன வெணக்கங்கள. எனத


தடமயனமொர் பணியமொ. பிரசென்னமொ அவெர்களின் சசெம்சமமொழியில கற்பபமொம் சஷெலஸ்கிரிப்ட் என்ற இந்நூல
கணினி அறிவியலில ஒர டமல கல. “நீரின்றி அடமயமொத உலகு” என்ற கூற்டறப் பபமொல, கணினி,
டகபபச, மற்றம் எண்ணிலடைங்கமொ மின் கரவிகள(Devices /Gedgets) இயங்கத் பதடவெ ஒர வெலுவெமொன
இயங்குதளம் (Operting System).
அத்தடகய இயங்குதளங்களுள Linux முடிசூடைமொ மமொ மன்னன். அந்த Linux இயங்குதளத்தில
பணியமொ.பிரசென்னமொ மின்னூலமொசரியரின், திறன் என்பத நெமொன் அரகில இரந்த கண்டு வியந்தத. அவெர்
தமிழின் பமொல சகமொண்டுளள அவெமொ தமிழ் கம்ப்யூட்டைர் இதழின் வெமொயிலமொக தமிழகசமங்கும் விரிந்த
பரவெலமொயிற்ற.
பின்னமொளில, இத்தகு மின்னூலின் வெமொயிலமொக உலகத் தமிழர்களின் (குறிப்பமொக கனடைமொ,
நெமொர்பவெ,ஃபிரமொன்ஸ், மற்றம் ஈழம்) அன்டபப் சபற்ற சதமொடைர்ந்த வீர நெடடை பபமொடுகிறத. இந்நூலில
அவெர் மிகச்சறப்பமொக ஆங்கமொங்பக சற நிரற்பமொக்கடளயும் அதன் விளக்கத்டதயும் கூறி, படிப்பவெடர
ஆர்வெமடடையச் சசெய்திரக்கிறமொர். அவெர் கணினி அறிவியடல தமிழின் வெழியமொக சமன்பமலும் சறப்பு
சபறச் சசெய்ய உலகத் தமிழர்களின் ஆதரவு சபரகிடை வெமொழ்த்தகிபறன்.
அன்புத்தம்பி,
பமொ.அறிவு ஆபரமொக்கிய இரமொபஜேஷ.
சமன்சபமொரள கட்டுமமொன பமலமொளர், டிசஎஸ், சபங்களூர.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -8- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


எழிலுரர:

நெமொம் எங்கு சசெலகிபறமொம் என்ற நிடனத்தப் பமொர்க்க முடியமொத, அளவிற்கு சதமொழிற்நுட்பமமொனத


சவெகு விடரவெமொக வெளர்ந்த வெரகிறத. உலக மயமமொக்கலின் வெமொயிலமொக, நெமொம் பலபவெற வெமொய்ப்புகடளப்
சபற்ற நெமொள பதமொறம் வெளர்ந்த வெரகிபறமொம். சவெளிநெமொட்டுக்குரிய பளளிகளும் இந்தியமொவில அதிகரித்த
வெரகிறடமயமொல அடனத்த சவெளிநெமொட்டு வெமொய்ப்புகளும் எளிடமயமொய் நெம் நெமொட்டிற்கு வெந்த
விடுகின்றன. அடதப்பபமொலபவெ, குழந்டதகளும் தங்கள தமொய்சமமொழி தவிர்த்த பிறசமமொழிகடளப்
பயிலவெதில ஆர்வெம் கமொட்டி வெரகிறமொர்கள. ஆரமொய்ச்ச என்பத பிறசமமொழிகடளப் பயின்ற அதன் மூலம்
வெரவெதிலடல. தமொய்சமமொழியில பயின்ற அடதத் திறம்படைக் கற்ற அதிலிரந்த ஆய்வெறிக்டக வெரவெபத
சறந்தத.
தமொய்சமமொழி வெழிக்கற்றபல அதன் வெழி தடடையறச் சந்திக்கவும் சபரிதம் உதவுகிறத. இன்டறய
நெமொளில எந்தப் பணி சசெய்தமொலும், அதற்கு கணினி கலவியறிவு பதடவெப்படுகிறத. தமிழ்வெழிக் கலவி
கற்றவெர்கள தங்கள தமொய்சமமொழியில பயில இந்நூல சபரிதம் உதவும் என்பதில எள முடனயளவும்
ஐயமிலடல.
ஆசரியரின் அளப்பரிய இப்பணிடயப் பமொரமொட்டுகிபறன். தமிழ் வெழிக்கலவி கற்பறமொர் இந்நூல
பயின்ற இன்புற அன்புடைன் அடழக்கிபறன்.
அன்பு மடனவி,
விர்ஜின் பிரசென்னமொ.
திட்டை ஒரங்கிடணப்பமொளர்,
சசெயிண்ட் ஜேமொன்ஸ் கலலூரி, சபங்களூர

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -9- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நன்றிகள:
எலலமொம் வெலல இடறவென் சதமொடைங்கி, இளவெலுடர தந்த எனத தம்பிக்கும், எழிலுடர தந்த எனத
மடனவிக்கும், மின்னுல எழிலுற அடமத்த எனத அரடம உடைன்பிறப்பு ம.பவெல.பிரசென்னமொவுக்கும்,
மற்றம் தமிழ் கம்ப்யூட்டைர் பதிப்பகத்தமொரக்கும் மற்றம் இந்நூல சவெளிவெரத் சதரிந்பதமொ, சதரியமொமபலமொ
உதவிபயமொர் அடனவெரக்கும் எனத சநெஞ்செமொர்ந்த நென்றிகள.

“உளன் எனின் உளன் என்பதும்


இலன் எனின் இலன் என்பதும்
உலபகமொர் கூற்பற; உயர்ந்த அன்பப
ஆண்டவன் என்பது அறத்தின் வமொழ்த்பத !!”

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -10- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட - பகுதி 1

“பயிற்சயமொல வெரமமொம் பயனர் பதமொழடம


கட்டைடள வெரிடசெ சகமொண்டி யங்கும்
தமொனமொய்ச் சசெயலகள தடடையறச் சசெய்யும்
ஃபின்லமொந் தந்தசமன் சபமொறிக்குற நிரபல”
நிரற்பமொ-1

முன்னுடர:
இயங்குதளம் என்பத பயனரக்கும், கணினிக்குமிடடைபய இரக்கும் ஒர இடடைமுகப்பமொகும்.
சபமொதவெமொக ஒர இயங்குதளத்திடன நிறவெல சசெய்வெத மட்டுபம பயனரின் அடனத்தத்
பதடவெகடளயும் பூர்த்தி சசெய்த விடைமொத. பயனரின் அன்றமொடைத் பதடவெகள தமொனியங்கு மயமமொக்கப்படைல
பவெண்டும். அப்சபமொழதமொன் சபமொறிநிடறஞரின் பவெடல எளிதமொகும். பயனரின் பதடவெகள விடரவெமொக
முடியும். அவ்வெமொற தமொனியங்கு மயமமொக்கலுக்கு, இயங்குதளத்தில உளள கட்டைடளகடள சதமொடைர்பு
படுத்தி நிரலகள, குறநிரலகள எழதப்படைல பவெண்டும். அடவெயும் சபமொதமயமமொக்கலுக்கு ஏற்ற
வெண்ணம் எழதப்படைல பவெண்டும். அதற்கமொக நெமொம் சஷெல ஸ்கிரிப்ட் கற்க பவெண்டும்.

சஷெல ஸ்கிரிப்ட் என்றமொல என்ன?


இலிசனக்ஸஸ இயங்குதளத்தில பலலமொயிரக்கணக்கமொன கட்டைடளகள உளளன. அவெற்டற நெமத
சசெயலுக்கு ஏற்ற வெண்ணம் எடுத்த குறநிரலகள எழதப்படுவெபத சஷெல ஸ்கிரிப்ட்
என்றடழக்கப்படுகிறத. சஷெல ஸ்கிரிப்ட் என்பத ச, ச++ பபமொன்ற ஓர் உயர்நிடல சமமொழி கிடடையமொத.
தன்மயமமொக்கலுக்கமொகபவெ சஷெலஸ்கிரிப்ட்டுகள பயன்படுத்தப் படுகின்றன. கணினி சமமொழிகடளப்
சபமொதவெமொக இரண்டுவெடகயமொகப் பிரிக்கலமொம். ஒன்ற கம்டபலர் முடற சமமொழிகள இரண்டு
இன்டைர்ப்சரட்டைர் சமமொழிகள. கம்டபலர் சமமொழிகள பிடழகடள சமமொத்தமமொகக் கமொண்பிக்கும்.
இன்டைர்பிரட்டைர் சமமொழிகள ஒவ்சவெமொர படியமொகக் (step by step execution) கமொண்பிக்கும். இதில
சஷெலஸ்கிரிப்ட் என்பத இரண்டைமொம் வெடகடயச் பசெர்ந்தத. சஷெல ஸ்கிரிப்ட்டுகள சபமொதவெமொக
எலலமொவெடகயமொன இலினக்ஸ இயங்குதளங்களிலும் இயங்கும். விண்படைமொஸ் வெடக இயங்குதளங்களில
இதற்கு இடணயமொக பபட்ச் ஸ்கிரிப்டுகள பயன்படுத்தப்படுகின்றன.

யமொசரலலமொம் படிக்கலமொம்:
சபமொறி நிடறஞர்கள (System Administrators), சமன்சபமொறிஞர்கள (software engineers), நிரலர்கள
(programmers), யுனிக்ஸ், லினக்ஸ் ஆர்வெலர்கள (Unix & Linux enthusiasts) ஆகிபயமொரக்குப் படித்த எளிதில
புரிந்த சகமொளளும் வெண்ணம் இத்சதமொடைர் அடமக்கப் சபற்றிரக்கிறத. சதமொடைடரப் படித்தப் புரிந்த
சகமொளள இயங்குதள அடமப்பு (OS architecture), குடறந்தபட்செம் சதமொடைக்க நிடல நிரசலழதம் திறடம
(at least beginner level programming skills) ஆகியடவெ இரக்க பவெண்டும்.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -11- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


ஷிபபங்க் (Shebang)
ஷிபபங் என்பத நெமொம் எழதக்கூடிய குறநிரல, எந்த வெடகயமொன சஷெலலில இயக்கப்படை பவெண்டும்
என்பதடனக் குறிக்கிறத. இத ஷிபபங் ஷெமொபபங் ஹமொஷபபங், சபபௌண்ட் பபங், ஹமொஷ எக்ஷ்கிசலம்,
பஹஷ பிலிங் என்ற பலவெமொறமொக அடழக்கப்படுகிறத. இடத #! என்ற குறநிரலில குறிப்பிடுவெத
வெழக்கம்.

சஷெலலின் வெடககள:
இலிசனக்டஸப் சபமொறத்தவெடரயில பலவெடகயமொன சஷெலகள கமொணப்படுகின்றன. ஆனமொல நெமத
குறநிரலகள குறிப்பிட்டை சஷெலலில மட்டுபம நெடடைசபறபவெண்டுசமன்பதற்கமொகபவெ நெமொம் ஷிபபங்
என்ற நிரலின் சதமொடைக்கத்திபலபய குறிப்பிடை பவெண்டும். உளளிரப்பமொக சஷெல ஸ்கிரிப்ட்டுகள பபஷ
சஷெல எனப்படும் சஷெலலிபலபய இயக்கப்படும். ஆனமொல இத ஒவ்சவெமொர சபமொறி சபமொறத்தம்
மமொறபடும். எனபவெதமொன் நெமொம் இதடன ஒவ்சவெமொர நிரலின் சதமொடைக்கத்திலும் சசெய்ய பவெண்டும்.
இலடலபயல ஒர சபமொறியில சறப்பமொக இயங்கும் குறநிரல பவெற சபமொறியில (உளளிரப்பமொக
இரக்கும் சஷெல மமொற்றப்பட்டிரந்தமொல) செரிவெர இயங்கமொத.
1. பமொர்ன் சஷெல (Bourne shell (sh))

2. பமொர்ன் எசகயின் சஷெல (Boune Again SHell (BASH))

3. ச சஷெல (C Shell (csh))

4. டிச சஷெல (TC Shell (tsh))

5. கமொர்ன் சஷெல (Korn shell (ksh))

உளளிரப்பமொக அடனத்த வெடகயமொன லினிக்ஸஸ இயங்குதளத்திலும், பபஷ சஷெலலிபலபய


குறநிரலகள இயங்கும். sh என்ற கட்டைடள மூலம், அடத பமொர்ன் சஷெலலுக்கு மமொற்றலமொம். சசெமொலமொரிஸ்
இயங்குதளத்தில உளளிரப்பமொக கமொர்ன் சஷெலலமொனத சசெயற்படும்.
சஷெலகளுக்கிடடைபயயமொன பவெறபமொடு:
கீழ்க்கமொணும் அட்டைவெடணயமொனத நெமக்கு சஷெலகளுக்கிடடையமொன பவெறபமொடுகடள உணர்த்தகிறத.
இங்கு zsh என்ற இன்சனமொர சஷெலலும் எடுத்தமொளப் பட்டுளளத. அதவும் நெமொம் சஷெல சமமொழிடயப்
பயன்படுத்தக்கூடிய ஒர் இன்டைர்பிரட்டைர்தமொன்.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -12- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


+++ மிக நென்ற
++ நென்ற
+ இரக்கிறத
- ஆற்றலற்தமொய் இரக்கிறத.
-- இலடல

இத பபமொன்ற டபத்தமொன் ஸ்கிரிப்ட், பர்ல ஸ்கிரிப்ட், ரூபி ஸ்கிரிப்ட் ஆகியவெற்றிற்கும் பவெறபட்டை


சஷெலகள உண்டு.

முன்னறிவுத் பதடவெகள:
சஷெல ஸ்கிரிப்ட் சமமொழி பயிலவெதற்கு ச சமமொழி சதரிந்திரக்க பவெண்டும் என்ற சலர் சசெமொலவெதண்டு.
கண்டிப்பமொக சதரிந்திரக்க பவெண்டும் என்பதலல. சதரிந்திரந்தமொல சஷெல ஸ்கிரிப்ட் பயிலவெதற்கு
எளிதமொக இரக்கும். லினக்சு இயங்குதளத்தின் கட்டைடளகள நென்கு சதரிந்திரக்க பவெண்டும்.
அப்சபமொழத எலலமொ வெடகயமொன சசெயலகடளயும் நெமொம் நென்கு கட்டுப்படுத்தி, தமொனியங்கு நிரலகடள
எழத முடியும். எனபவெ சஷெல ஸ்கிரிப்ட் என்பத சபமொதவெமொக சல லினக்சு கட்டைடள வெரிகளின்
சதமொடைர்ச்சயமொகும். புதிதமொக சஷெல ஸ்கிரிப்ட் கற்றக் சகமொளவெதற்கும், ஏற்கனபவெ கற்றவெர்கள அடத
பமம்படுத்திக் சகமொளவெதற்கும் இத்சதமொடைர் தடணபுரியும்.
நிரல 1:
#!/bin/bash
echo “Welcome to Linux Shell script world”

நிரல இயக்கும் முடற:


பமற்கூறிய நிரடல ஏபதனும் ஒர உடரத் சதமொகுப்பமொனில தட்டைச்சு சசெய்த, அலலத வி(ம்)
சதமொகுப்பமொனில (vi(m) editor) எழதி பசெமித்தக் சகமொளளவும். எடுத்தக்கமொட்டைமொக, script1.sh என

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -13- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சபயரிடைலமொம். குறநிரலின் பகமொப்பமொனத, .sh என்ற பின்சனமொட்டுடைன் இரக்க பவெண்டிய
பதடவெயிலடல. இரப்பினும், இந்தப் பின்சனமொட்டு நிரலர்களுக்கு குறநிரலகடளப் பிரித்தறிய
உதவுகிறத.
#sh -x script1.sh என்ற கட்டைடளவெரி குறிப்பிட்டை குறநிரடல வெரிவெரியமொக இயக்கி சவெளியீட்டடைத்
தரகிறத.
#sh -v script1.sh என்ற வெரியமொனத சவெளியீட்டடை நிரலரக்குப் புரியும் வெண்ணம் விளக்குகிறத.
இரப்பினும் இக்கட்டைடள வெரிகளமொடவெ ஒர குறநிரடல பிடழதிரத்தப் பயன்படுத்ததல சறப்பு.
ஏற்கனபவெ பிடழதிரத்திய நிரலகடள கீழ்க்கமொணும் கட்டைடளவெரிகள மூலமமொக இயக்கிப்பமொர்க்கலமொம்.
#chmod +x script.sh இந்தக்கட்டைடள வெரி ஒர நிரடல அடனத்தப் பயனர்களும் இயக்கிப்பமொர்க்கும்
உத்தரவிடனத் தரகிறத. இவ்வெரி தரமொவிட்டைமொல நிரடல பயனர்கள யமொரம் இயக்க முடியமொத.
#./script.sh இத ஒர நிரடல இயக்கி சவெளியீட்டடைத் தரகிறத. பிடழகள இரப்பின், பிடழகடளப்
படிப்படியமொகக் கமொண்பிக்கும்.
இங்கு படிப்படியமொக என்பத, நெமொன்கு வெரி நிரலில இரண்டைமொம் வெரியிலும் மூன்றமொம் வெரியிலும்
பிடழயிரப்பின், முதலில இரண்டைமொம் வெரியிடனயும், அத செரி சசெய்யப்பட்டை பின்பப மூன்றமொம் வெரியின்
பிடழடயயும் கமொண்பிக்கும்.
பமற்குறிப்பிட்டை நிரல Welcome to Linux Shell script world என்ற சவெளியீட்டிடனத் தரம். echo கட்டைடள
தன்னுள இரக்கும் வெமொக்கியத்திடன சவெளிக்கமொட்டுகிறத.
ஐயம்: சஷெல ஸ்கிரிப்ட் விண்படைமொஸ் இயங்குதளத்தில இயங்குமமொ?

தீர்வு: சபமொதவெமொக லினக்சல இயங்கும் சஷெல ஸ்கிரிப்ட்டுகள, விண்படைமொசல இயங்கமொத. சல


சபமொதவெமொன echo பபமொன்ற கட்டைடளவெரிகள ஒபர மமொதிரியமொன சவெளியீட்டடைத் தரம்.
விண்படைமொசுக்சகன்ற தனியமொக batch file programming இரக்கிறத. (filename.bat) அவெற்றில
விண்படைமொசுக்கமொன கட்டைடளகடள இயக்கிப் பமொர்த்த ஸ்கிரிப்டுகள எழத முடியும். அடவெ முற்றிலும்

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -14- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


விண்படைமொஸ் இயங்குதளத்திற்கு மட்டுபம உரியன. விண்படைமொஸ் இயங்குதளத்தில உளள பவெர் சஷெல
மூலமமொக அடனத்த வெடகயமொன விண்படைமொஸ் கட்டைடளகடளயும் இயக்கலமொம். இதன் முதல பதிப்பமொன
பவெர் சஷெல 1 விண்படைமொஸ் எக்ஸ்பி எஸ்பி2 விபலபய வெந்திரந்தமொலும், விண்படைமொஸ் ஏழ, எட்டு
இயங்குதளங்களில இதன் பமம்பட்டை பதிப்பிடனப் பயன்படுத்தி சஷெல ஸ்கிரிப்ட்டுக்கு இடணயமொன
குறநிரலகடள எழதி இயக்க முடியும். தமொனியங்கு சசெயலகள சசெய்விக்க முடியும். Cygwin எனப்படும்
லினக்சு மமொதிரி சசெயலியில (Linux Simulation) சஷெல ஸ்கிரிப்ட்டுகடள இயக்கிப் பமொர்க்கலமொம்.

பமலும் நிரலகடள எழத அறியும் முன் இலினக்சு இயங்குதளத்தின் கட்டைடமவிடனப் பற்றி


அறிபவெமொம். பின்வெரம் படைம் இலினக்சு இயங்குதளத்தின் கட்டைடமவிடன எளிதில விளக்கும் வெண்ணம்
அடமந்தளளத.
i) சசெயலி பமலமொண்டம

ii) நிடனவெக பமலமொண்டம

iii) பகமொப்பு பமலமொண்டம

iv) வென்சபமொரள பமலமொண்டம

v) வெடலயக பமலமொண்டம

ஆகியடவெ முதன்டமயமொனதமொக இங்கு விளங்குகின்றன.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -15- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


கரலச்சசெமொற்கள:
சபமொதமயமமொக்கல – generalization
இடடைமுகப்பு – interface
குறநிரலகள – scripts
தன்மயமமொக்கல – automation
உளளிரப்பு – by default
சபமொறி – system
கட்டைடமவு – architecture
(கற்பபமொம்…)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -16- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – பகுதி 2 தரவ வரககள

எண்கள உடரகள என்றிர தரவுகள


சகமொண்டு புடனந்திடை கணக்கு எளிடம
ஏரணப் பிடழயற் சறழதிடைல பவெண்டும்
எண்ணிய தீர்வு இன்பமமொய் வெரபவெ
நிரற்பமொ – 2

ஒர இயங்குதளமமொனத பின்வெரம் ஐந்த வெடகயமொன பமலமொண்டமகடளச் செரிவெரடகயமொள பவெண்டும்.


vi) சசெயலி பமலமொண்டம (process management)

சசெயலி பமலமொண்டமயமொனத ஓர் இயங்குதளத்திலுளள அடனத்த வெடகயமொன


சசெயலிகடளயும் கண்டுணர்ந்த அவெற்டற உரிய வெடகயில இயக்குதடளக் குறிக்கிறத.
சசெயல என்பத என்ன ஒர வெடகயமொன விடனயமொகவும் இரக்கலமொம். எடுத்தக்கமொட்டிற்கு
கூட்டைல, கழித்தல, வெகுத்தல, சபரக்கல என அடிப்படடை கணக்கீட்டு விடனகடளயும்
எடுத்தக்சகமொளளலமொம்.
vii) நிடனவெக பமலமொண்டம (memory management)

நிடனவெக பமலமொண்டமயமொனத எந்த வெடகயமொன சசெயலுக்கு எவ்வெளவு நிடனவெகம்


பதடவெப்படும் என்படத ஆய்ந்தறிந்த சசெயற்படை பவெண்டும். இதிலும் முதன்டம
நிடனவெகம், இரண்டைமொம் நிடனவெகம் என இரண்டு வெடககள உண்டு. முதன்டம நிடனவெகம்
சபமொதவெமொக RAM (Random Access Memory) ஐக் குறிக்கிறத. இரண்டைமொம் நிடனவெகம்
வென்வெட்டிடனக் குறிக்கிறத.
சமய்நிகர் நிடனவெகம்: இத வென்வெட்டின் ஒர பகுதியமொக இயங்கினமொலும், சபமொதவெமொக RAM
ஆனத முழவெதம் சசெயலிகளமொல டகயகப்படுத்தப்பட்டைமொல, இத RAM ஆகச் சசெயலபடும்.
இலினக்சு இயங்குதளத்தில இத சபமொதவெமொக ஒன்றடர முதல இரண்டு மடைங்கு RAM
அளவிடனக் சகமொண்டிரக்கும் வெண்ணம் அடமக்கப்படைல பவெண்டும். இத சபமொதவெமொக
விதியமொக இரப்பினும், அதிக அளவு RAM பயன்படுத்தப்படும் சபமொழத இதற்கு
விதிவிலக்குகளும் உளளன.
viii) பகமொப்பு பமலமொண்டம (file management)

பகமொப்பு என்பத பலபவெற வெடகயமொன தரவுகளின் அலலத பதிவுகளின் கூட்டைடமவு ஆகும்.


இவெற்டறச் செரிவெர பமலமொண்டம சசெய்தல இயங்குதளத்தில பவெடலகளில
இன்றியடமயமொததமொகும். அவ்வெமொற சசெய்யமொவிடில பயனர் பகமொப்புக்கடள அணுகும்
சபமொழத குழப்பம் பநெரலமொம். இலினக்செமொனத ext4, ext3, ext2, vfat, swap பகமொப்பவெடமவுகடள
தன்னகத்பத சகமொண்டிரந்தமொலும், அத VFS என்ற Virtual File System சகமொண்படை சபமொதவெமொக
பயனர்களுக்கு தனத சவெளியீட்டிடனத் தரகிறத. இங்கு VFS என்பத ஒர தற்கமொலிக

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -17- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


பகமொப்படமவெமொக உளளத. ஒர குறிப்பிட்டை கட்டைடள எவ்வெமொற இயங்குகிறத என்பதடன
ஓர் எடுத்தக்கமொட்டின் மூலம் கமொணலமொம்.
ls என்ற கட்டைடளயமொனத listing என்பதன் சுரக்கமமொகும். அதமொவெத ஒர பகமொப்படமவில
அலலத ஓர் அடடைவில இரக்கும் பகமொப்பு மற்றம் தடண அடடைவுகடள கமொட்டும்
கட்டைடளயமொகும். இந்தக் கட்டைடள சகமொடுக்கப்பட்டைவுடைன் அத ஒர fork (தடணச்சசெயல) ஐ
உரவெமொக்கி, execute(“ls”) என ஏற்கனபவெ ச சமமொழியில எழதப்பட்டை ஒர நிரடல அடழக்கும்.
(இலினக்சு ச சமமொழியில எழதப்பட்டை இயங்குதளம் என்பதறிக.) அத குறிப்பிட்டை
கரவியிடனத் திறந்த (வென்வெட்டு/குறவெட்டு/நிடனவெக அட்டடை) தற்கமொலிக நிடனவெகத்தில
ஏற்றிக் சகமொண்டு குறிப்பிட்டை கட்டைடளடயக்குறிய (ls) சவெளியீட்டிடனத் தரம்.
#ls இத listing கட்டைடள
#strace ls இத listing கட்டைடள சகமொடுத்தனமொல என்னசவெலலமொம் நெடைக்கிறத என்படத பயனர்
அறிய உதவும் கட்டைடள.
ix) வென்சபமொரள பமலமொண்டம (hardware management)

சபமொதவெமொக ஓர் இயங்குதளத்தில வென்வெட்டு, நிடனவெக அட்டடைகள, குச்ச நிடனவெகங்கள,


குறவெட்டுக்கள, அடைர்குறவெட்டுக்கள, சதமொடல வென்வெட்டுக்கள பபமொன்றடவெ
டகயமொளப்படுகின்றன. இத அலலமொமல கமொப்புப்படி எடுக்கும் சபமொழத, பவெறபட்டை
கமொப்புப்படி ஒலி நெமொடைமொக்கபளமொ(முந்நெமொட்களில) அச்செடிக்கும் சபமொழத அச்சுப்சபமொறிகபளமொ
டகயமொளப்படுகின்றன. இதில எந்த வெடகயமொன கரவிகடளக் டகயமொண்டைமொலும் பயனரக்குத்
பதமொழடம சகமொடுக்கும் வெண்ணம் வென்சபமொரள பமலமொண்டம சசெய்யப்படைல பவெண்டும்.
x) வெடலய பமலமொண்டம (network management)

இத இரண்டு வெடகப்படும்.
1. கம்பியுளள வெடலயம்
2. கம்பியிலலமொ வெடலயம்
இந்த இரண்டுபம வெடரயறக்கப்பட்டை வெடலய அடுக்குகள மற்றம் வெடலயக்கரவி
இயக்கிகள சகமொண்டு சசெயலபடுகின்றன.
இந்த ஐந்த வெடகயமொன பமலமொண்டமகளும் ஒன்றக்சகமொன்ற சநெரங்கிய சதமொடைர்புடடையடவெ. இடவெ
அடனத்டதயும் செரிவெர சசெயலபடுத்தவெபத ஒர திறனுளள இயங்குதள த்தின் பவெடலயமொகும்.
ஒவ்சவெமொர சமமொழி சபமொறத்தம் தரவு அடமவுகள பவெறபடும். இங்கு சஷெல நிரலகடளப் சபமொறத்த
அளவில எண்கள மற்றம் உடரகள என இர வெடக தரவுகபள உளளன. உயர் நிடல சமமொழிகளமொன ச, ச+
+, ஜேமொவெமொ சமமொழிகளில நெமொம் ஒர மமொறிடயப் பயன்படுத்த பவெண்டுசமனில அதடன நெமொம் சவெளியிடை
சவெண்டும். ஆனமொல சஷெல நிரலமொனத உயர் சமமொழி இலலமொததமொல நெமொம் அவ்வெமொற சவெளியிடைத்
பதடவெயிலடல.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -18- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


எண்கள
இங்கு எண்களமொனத, இயல எண்கள, முழக்கள, என பவெறபடுத்தி அறியப்படுவெதிலடல. அடவெ
அந்தந்த இடைங்கடளப் சபமொறத்த மமொறபட்டு நிற்கின்றன. அவெற்டற நெமத பதடவெகளுக்பகற்ப
பயன்படுத்திக் சகமொளளலமொம்.

உடரகள
எந்த வெடகயமொன உடரயமொக இரப்பினும் அடவெ இரட்டடை பமற்பகமொளகுறிக்குள எழதப்படைல,
அணுகப்படைல பவெண்டும். உடரகளுக்குளபள ஒப்பிடும் சபமொழத அபத பபமொன்ற சசெயதல பவெண்டும்.
எண்கள, உடரகள ஆகியவெற்டறப் பற்றி விரிவெமொக பிறகு வெரம் நிரலகளின் விளக்கத்தின் சபமொழத
கமொணலமொம்.
ஐயம்: சஷெல ஸ்கிரிப்ட்டுகள அர்பர (Array) எனப்படும அடுக்குமமொறிகடள ஆதரிக்குமமொ?
தீர்வு: சஷெலஸ்கிரிப்ட் அர்பர எனப்படும் அடுக்குமமொறிகடள பநெரடியமொக ஆதரிக்கமொத. இரப்பினும் ஒர
பரிமமொண அடுக்குமமொறிகடள (one dimensional array) நெமொம் பநெரடியமொக நிகர்படுத்தி (assign)
பயன்படுத்தலமொம். அடவெ குறித்த நிரலகடள பின்னமொல பமொர்க்கலமொம். அடுக்குமமொறிகள அடனத்தம் சுழி
அடிப்படடை சதமொடைக்கத்டதக் (zero-based index) சகமொண்டைடவெயமொகும். அடுக்குமமொறிகளுக்கு வெரம்சபலடல
எதவும் கிடடையமொத. ஆனமொல உயர்நிடல சமமொழிகளமொன ச,ச++,ஜேமொவெமொ பபமொன்ற இர பரிமமொண (two
dimensional), முப்பரிமமொண (three dimensional), பலபரிமமொண(multi-dimensional) அடுக்குமமொறிகடள சஷெல
ஸ்கிரிப்ட் ஆதரிக்கமொத.
ls கட்டைடளயின் சபமொழத பின்வெரம் படைத்தில உளளத பபமொல இயங்குதளத்தில சசெயற்பமொடுகள
நிகழம்.

இங்கு VFS என்பத Virtual File System என்படதக் குறிக்கும். இனி எண்கள உடரகள ஆகியவெற்டற
எவ்வெமொற நிரலில பயன்படுத்தலமொம் என்படதக் கமொணலமொம்.
எண்கடள நிரலில அறிக்கும் முடற:
i=5
j=6
உடரகடள நிரலில அறிவிக்கும் முடற:
one=”This is one”
two=”This is two”

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -19- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


three=”3” இங்பக 3 என்ற எண் உடரயமொகக் கரதப்படுகிறத. பின்வெரம் நிரலில இவெற்டற நெமொம்
அடழக்கலமொம்.
நிரல 2:
#!/bin/bash
echo “i value is $i”
echo “j value is $j”
echo “first string is $one”
echo “second string is $two”
echo “third string is $three”
ஒர குறநிரல(shellscript) எப்படியிரக்க பவெண்டும்?
குறநிரலமொனத பின்வெரம் ஐந்த முதன்டமயமொன சகமொளடககடளக் சகமொண்டைதமொக இரக்க பவெண்டும்.
1. குறநிரலமொனத பிடழகளின்றி இரத்தல பவெண்டும்.
2. நிரலமொனத ஏரணப் பிடழயறத் சதளிவுற அடமதல பவெண்டும்.
3. நிரலமொனத ஒர குறிப்பிட்டை சசெயலிடனச் சசெய்தல பவெண்டும்.
4. குறநிரலமொனத பதடவெயற்ற சசெயலகடளச் சசெய்தல கூடைமொத.
5. குறநிரலகள திரம்பப் பயன்படுவெதற்கு ஏற்றதமொக அடமதல பவெண்டும்.

நிரல 3:
தற்சபமொழத சபமொறியில உளநுடழந்திரக்கும் (system login users) பயனர்களின் சபயர்கடள மட்டும்
வெரிடசெப்படுத்தம் குறநிரடல கீழ்க்கண்டைவெமொற எழதலமொம்.
சபமொதவெமொக w அலலத who ஆகிய இரண்டு கட்டைடளகள மூலம் ஒர சபமொறியினுள உளநுடழந்திரக்கும்
பயனர்களின் அடனத்த விபரங்கடள அறிய முடியும். கீழ்க்கமொணும் கட்டைடள அதற்கு உதவுகிறத.
#who | sort | cut -d‘ ’ -f1
இங்கு who என்பத முதன்டமக் கட்டைடள ஆகும். sort என்பத சவெளியீட்டிடன அகரவெரிடசெயில
அடமக்க உதவும் கட்டைடளயமொகும். cut என்பத ஒர குறிப்பிட்டை field எனப்படும் நிடரயிடன (column)
மட்டும் பிரிக்க உதவும் கட்டைடளயமொகும். d என்பத delimiter or separator என்றடழக்கப்படும் பிரிப்பமொன்
ஆகும். f1 எனத முதல நிடரயிடனக் (column) குறிக்கிறத. இதற்கமொன முழநிரடலக் கீழ்க்கமொணுமமொற
எழதலமொம்.
#!/bin/bash
# whos – a program which displays the login usernames of a particular system.
who | sort | cut -d‘ ’ -f1
பின்வெரம் படைங்கள எவ்வெமொற குறிப்பிட்டை நிரடல எழதி இயக்க பவெண்டும் என்ற விளக்குகின்றன. (vim
whos.sh; chmod +x whos.sh; ./whos.sh)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -20- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -21- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,
கரலச்சசெமொற்கள:
அடிப்படடை கணக்கீட்டு விடனகள - Basic arithmetic operations
முதன்டம நிடனவெகம் - Primary memory
இரண்டைமொம் நிடனவெகம் - Secondary memory
சமய்நிகர் நிடனவெகம் - Virtual memory or swap memory
தற்கமொலிக பகமொப்படமவு - Temporary file system
எண்கள - Numbers, Integers, Floats, Double etc.
உடரகள - Texts, Strings
அச்சுப்சபமொறிகள - Printers
கமொப்புப்படி ஒலிநெமொடைமொக்கள - Backup tapes
கம்பியுளள வெடலயம் - Wired network
கம்பியிலலமொ வெடலயம் - Wireless network
வெடரயறக்கப்பட்டை வெடலய அடுக்குகள - predefined network layers
வெடலயக்கரவி இயக்கிகள - network device drivers
ஏரணம் - logic
தரவுகள - data
சவெளியீடுதல - declaration
சுழி - zero

(கற்பபமொம்…)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -22- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட - 3 சசெயல் வரககள,
நிரலகள

சபற்பறமொர் குழந்டத இலலமொர் உதவியர்


என்பற தளத்தில உண்டைமொம் சசெயலகள
ஓட்டைம் நிற்றல உளளுடற உறக்கம்
குறக்கிடு மற்றம் குறக்கிடைமொ நிடலகபள.
- நிரற்பமொ 3

நிரற்பமொ விளக்கம்:
நிரற்பமொவிடன மனப்பமொடைம் சசெய்த டவெத்தக் சகமொண்டைமொல இலினக்சு இயங்குதளத்தின்
சசெயலகடளயும், அவெற்றின் நிடலகடளயும் எளிதில நிடனவுக்கு சகமொண்டுவெர இயலும். இங்கு
சபற்பறமொர் என்பத parent process ஐயும், குழந்டத child process, இலலமொர் என்பத orphan process உதவியர்
என்பத daemon process ஆகியவெடறயும் குறிப்பிடுகிறத. எனபவெ நெமொன்கு முதன்டமயமொன சசெயலகள
உளளன. அவெற்றின் நிடலகளமொக ஓட்டைம் (running or active state), நிற்றல (stopping state), உளளுடற (dead or
zombie state), உறக்கம்(sleeping state) உறக்கத்தின் தடண நிடலகளமொக குறக்கிடு உறக்கம்(interruptable sleep
state), குறக்கிடைமொ உறக்கம்(uninterruptable sleeping state) ஆகியடவெ உளளன.
சபற்பறமொர் சசெயல (Parent Process) என்பத ஒன்ற அலலத அதற்கு பமற்பட்டை சசெயலகடளத் தன் சசெயல
நிடறபவெறவெதற்கமொகத் தன்னகத்பத சகமொண்டைதமொகும்.
குழந்டத சசெயல (Child Process) என்பத பவெசறமொர சசெயலமொனத உரவெமொக்கிய சசெயலமொகும்.
சபற்பறமொர் சசெயலமொனத முடிந்த பிறகும், குறிப்பிட்டை குழந்டத சசெயல தன்னமொலமொகச் சசெயலபட்டுக்
சகமொண்டிரத்தல இலலமொர் சசெயல (Orphan Process) அலலத சபற்பறமொர் இலலமொச் சசெயல எனப்படும்.
ஏபதனும் ஒர சசெயலின் உதவிக்கமொக பின்புலத்தில சசெயலபடுவெத உதவியர் (Daemon Process) சசெயல
எனப்படும்.
உளளுடற நிடல (Zombie state) என்பத, ஒர குறிப்பிட்டை சபற்பறமொர் சசெயலமொனத முடிந்த பிறகும்,
அதனுடடைய அட்டைவெடணயில இரக்கும் ஒர சசெயல. இத சசெயலின் ஒர சசெத்த நிடல.
ஓட்டைம் என்பத தற்பபமொத சசெயலிலும், உறக்கம் என்பத முன்னர் சசெயலிலும் இரந்த நிடலகளமொகும்.
நிற்றல என்பத முடிந்த (Stop state) நிடலயமொகும்.

விளக்கப்படைம்:
பின்வெரம் விளக்கப்படைங்கள இந்த சசெயலகடளயும், அவெற்றின் நிடல மற்றம் தடண நிடலகடள
விளக்கும் வெண்ணம் அடமந்தளளன.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -23- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


ஐயம்: சஷெல ஸ்கிரிப்ட்டுக்கடள ஆண்ட்ரமொய்டு டகபபசயில இயக்க முடியுமமொ?
தீர்வு: Terminal emulator என்னும் சசெயலிடயப் பயன்படுத்தி echo முதலமொன கட்டைடளகடள இயக்கலமொம்.
http://www.appsapk.com/android-terminal-emulator/ என்ற சதமொடுப்பில அத கிடடைக்கிறத. உதவிப்பக்கமும்
சசெயலியில உண்டு. ஆனமொல இத அடனத்தக் கட்டைடளகடளயும் சசெய்யமொத. அடனத்த வெடகயமொன
நிரலகடளயும் இயக்கிப்பமொர்க்க ஆண்ட்ரமொய்டு பபசயமொனத root அலலத hack சசெய்யப்படை பவெண்டும்.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -24- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


Complete Linux Installer http://www.appsapk.com/complete-linux-installer/ என்ற சதமொடுப்பில உளள
சபமொதியிடன பதிவிறக்கி நிறவிக்சகமொண்டைமொல, அடனத்த வெடகயமொன குறநிரலகடளயும் எழதி
மகிழலமொம். ஆனமொல இத புதியவெர்களுக்கு உகந்ததலல. ஏபதனும் தவெறமொன நிரல எழதி
கணிப்சபமொறியில பழபதற்பட்டைமொல, அடத மண்டும் நிறவிக் சகமொளளலமொம். ஆனமொல டகபபசயில
பழபதற்பட்டைமொல மண்டும் அடனத்தம் மண்டு வெரமமொ என்பத மிகப்சபரம் ஐயபம.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -25- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சன்ன சன்ன நிரலகடள எழதி மகிழலமொம். சபரிய நிரலகளுக்கு இத பபமொன்ற ஆண்ட்ரமொய்டு சசெயலிகள
வெழிவெகுத்தமொலும், அடவெ சதமொழிற்நுட்ப வெடகயில பரிந்தடரக்கப்படுவெதிலடல. (Professionally not
recommended)
குறநிரல 3: (Terminal Emulator மூலம் இயக்கலமொம்)
#!/bin/bash
#Script that displays today’s date
echo "Today's date is:"
date +"%A, %B %-d, %Y"
நிரல விளக்கம்:
Terminal emulator மூலம் இயக்கும் சபமொழத, cd sdcard என்ற சகமொடுத்த, ஒர அடடைவிடன (directory/folder)
உரவெமொக்கிக் சகமொளளவும். mkdir script என்ற கட்டைடள இதற்கு உதவும். பின்பு cd script என்பதற்குள
சசென்ற பவெண்டிய நிரலகடள எழத்தத் சதமொடைங்கலமொம். டகபபசடய root சசெய்தமொலதமொன் உடரத்
சதமொகுப்பமொன்கடள கட்டைடள வெரியில பயன்படுத்த முடியும். இலடலயில quick office மூலம் நிரடலத்
சதமொட்சடைழதி/தட்சடைழதி அடத Terminal emulator இல இயக்கலமொம். இதன் சவெளியீடைமொனத, நிரல
இயக்கிய கிழடம, மமொதம் பததி, ஆண்டு ஆகியவெற்டற சவெளியிடும். எடுத்தக்கமொட்டைமொக, நிரல
அக்படைமொபர் 1 அன்ற இயக்கப்பட்டைமொல சவெளியீடு இவ்வெமொற கிடடைக்கும். Today’s date is: Wednesday,
October 1, 2014
குறநிரல 4 : (Terminal Emulator மூலம் இயக்கலமொம்)
இந்த நிரல, எவ்வெமொற சஷெல ஸ்கிரிப்ட் மூலமமொக ஒர எச்டிஎம்எல பகமொப்பிடன உரவெமொக்கப்
பயன்படுகிறத என்ற பமொர்க்கலமொம். எடுத்தக்கமொட்டைமொக எச்டிஎம்எல பகமொப்பு பின்வெரமமொற டவெத்தக்
சகமொளபவெமொம். இடத எவ்வெமொற சஷெல ஸ்கிரிப்ட் மூலமமொகச் சசெய்யலமொம் எனப் பமொர்க்கலமொம்.
<HTML>
<HEAD>
<TITLE>
The title of your page
</TITLE>
</HEAD>

<BODY>
Your page content goes here.
</BODY>
</HTML>
குறநிரல 4 - பதிப்பு 1: (Terminal Emulator மூலம் இயக்கலமொம்)
#!/bin/bash
# make_page - A script to produce an HTML file
echo "<HTML>"
echo "<HEAD>"
echo " <TITLE>"
echo " The title of your page"

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -26- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


echo " </TITLE>"
echo "</HEAD>"
echo ""
echo "<BODY>"
echo " Your page content goes here."
echo "</BODY>"
echo "</HTML>"
இந்த நிரடல இயக்கும் சபமொழத, (பகமொப்பிடன இப்சபயரில பசெமிக்க பவெண்டும் என்பதறிக.)
main_page.sh > filename.html என்ற சகமொடுத்தமொல அபத அடடைவில HTML பகமொப்பு உரவெமொகும். நெமொம் பமொர்த்த
சவெறம் echo கட்டைடள சகமொண்டு அரடமயமொக ஒர HTML நிரல தயமொரிக்கப்பட்டுவிட்டைத.
நிரல 4 - பதிப்பு 2 (Terminal Emulator மூலம் இயக்கலமொம்)
இபத நிரடல echo கட்டைடள இலலமொமபலபய கீழ்க்கமொணுமமொற எழதி இயக்கலமொம். இதில cat கட்டைடள
ஒர பகமொப்பிடன உரவெமொக்கப் பயன்படுகிறத. _EOF_ என்பத End Of File என்படதக் குறிக்கிறத.
#!/bin/bash
# make_page - A script to produce an HTML file
cat << _EOF_
<HTML>
<HEAD>
<TITLE>
The title of your page
</TITLE>
</HEAD>

<BODY>
Your page content goes here.
</BODY>
</HTML>
_EOF_
நிரடல இயக்கும் பநெரம், main_page.sh > filename.html என்ற சகமொடுத்தமொல ஒர HTML பகமொப்பு உரவெமொகும்.

கரலச்சசெமொற்கள: (Technical terms)


சபற்பறமொர் – Parent process
குழந்டத – child process
இலலமொர் – orphan process
உதவியர் – daemon process
ஓட்டைம் – running state

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -27- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிற்றல – stopping state
உளளுடற – zombie state
உறக்கம் – sleeping state
குறக்கிடு – interruptable sleep state
குறக்கிடைமொ – uninterruptable sleep state
அடடைவு – Folder or directory

(கற்பபமொம்...)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -28- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில்கற்பபமொம்சஷெல்ஸ்கிரிப்ட – 4
இயங்குதளத்தின்ஏற்றநிரல, மமொறிகரளப் பயன்படுத்துதல்

இயங்கு தளத்தின் ஏற்ற நிடலயில


முதன்டமக் பகமொப்பமொம் டமயம் சதமொடைக்கம்
ஏழ்நிடல சதரிந்த எடுத்தி யமொங்கு
இடணப்புக் பகமொப்பு எழிலுற வெரபம.
-நிரற்பமொ 4

நிரற்பமொ விளக்கம்:
லினக்சு இயங்குதளத்தின் ஏற்ற நிடலயில அதமொவெத boot ஆகும் சபமொழத முதலிபல டமயக்பகமொப்பமொன
kernel பகமொப்பு ஏற்றப்படுகிறத. பின்பு சதமொடைக்கம் எனப்படும் initrd.img பகமொப்பு ஏற்றப்படுகிறத. பின்பு
இயங்குதளத்தின் ஏழ நிடலகளில எந்த நிடலயமொனத அடமக்கப்படை பவெண்டும் என்ற /etc/inittab
பகமொப்பில கட்டைடள இரக்கிறபதமொ அந்த நிடலயில இயங்குதளம் சதமொடைங்கப் படுகிறத. வென்வெட்டு
அடமவுகடளக் சகமொண்டை /etc/fstab என்ற இடணப்புக் பகமொப்பில உளளவெமொற இயங்குதளம் தனத
பவெடலகடளச் சசெய்ய சதமொடைங்குகிறத.

மமொறிகடளப்பயன்படுத்ததல: (Variable usage)


மமொறிகளில சபமொதவெமொக இரண்டு வெடககள உண்டு. ஒன்ற env என்ற கட்டைடள மூலம் கிடடைக்கும்
environment variable எனப்படும் சூழல மமொறிகள. இரண்டைமொவெத பயனர் தனத நிரலில வெடரயடற சசெய்யும்
மமொறிகள (user-defined variables). # வெரியில env என்ற சகமொடுக்க அடனத்த சூழல மமொறிகளும் கிடடைக்கப்
சபறம்.

ஐயம்:சஷெலஸ்கிரிப்ட்மூலம்தீங்குவிடளவிக்கும்நிரலகடளஎழதமுடியுமமொ?

தீர்வு:கரத்தஅடிப்படடையிலபமொர்த்தமொலதீங்குவிடளவிக்கும்நிரலகடள (destruction scripts)


பநெரடியமொகபவெமொமடறமுகமமொகபவெமொஎழதஇயலும்.ஒரசபமொறியின்மூலப்பயனரமொக (root
user)இரப்பின்சபமொறிக்குஎததீங்குசசெய்யும்என்றஅறிந்தநிரலடமப்பதஇன்றியடமயமொதத
மூலப்பயனர்ஏபதனும்தவெறசசெய்தமொலஅடதபவெறயமொரமொலும்மளடமக்க(undo) முடியமொத.
மமொற்றீடுதல
நிரல 5: (Terminal Emulator லஎழதிஇயக்கலமொம்)
இந்த நிரலில title என்பத மமொறியமொக அடமக்கப்பட்டுளளத. அந்த மமொறியிடன அடழக்கும் சபமொழத
$title என்ற அடமக்கப்படைபவெண்டும்.
#!/bin/bash
# make_page - A script to produce an HTML file

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -29- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


title="My System Information"
cat<<- _EOF_
<HTML>
<HEAD>
<TITLE>
$title
</TITLE>
</HEAD>
<BODY>
<H1>$title</H1>
</BODY>
</HTML>
_EOF_
நிரலின் சவெளியீடைமொனத பின்வெரமமொற அடமயும். (chmod +x niral5.sh; ./niral5.sh)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -30- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சூழலமமொறிகள:
பின்வெரம் நிரலகளில சூழல மமொறிகடள எங்ஙனம் பயன்படுத்தலமொம் என்படதக் கமொண்பபமொம்.
நிரல 6: (Root சசெய்யப்பட்டை Terminal Emulator லஎழதிஇயக்கலமொம்)
இங்கு $HOSTNAME என்பத சபமொறியின் சபயரமொகிய environment variable ஐக் குறிக்கிறத.
#!/bin/bash
# make_page - A script to produce an HTML file
title="System Information for"
cat<<- _EOF_
<HTML>
<HEAD>
<TITLE>
$title $HOSTNAME
</TITLE>
</HEAD>
<BODY>
<H1>$title $HOSTNAME</H1>
</BODY>
</HTML>
_EOF_
நிரலின் சவெளியீடைமொனத பின்வெரமமொற அடமயும். (chmod +x niral6.sh; ./niral6.sh)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -31- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல 7: (Root சசெய்யப்பட்டை Terminal Emulator லஎழதிஇயக்கலமொம்)
இந்நிரலில date என்ற கட்டைடளயும், HOSTNAME, USER ஆகிய சூழல மமொறிகளும் பயன்படுத்தப்
பட்டிரக்கின்றன.
#!/bin/bash
# make_page - A script to produce an HTML file
TITLE="System Information for $HOSTNAME"
RIGHT_NOW=$(date +"%x %r %Z")
TIME_STAMP="Updated on $RIGHT_NOW by $USER"
cat<<- _EOF_
<HTML>
<HEAD>
<TITLE>
$TITLE
</TITLE>
</HEAD>
<BODY>
<H1>$TITLE</H1>
<P>$TIME_STAMP
</BODY>
</HTML>
_EOF_
கீழ்க்கண்டை கட்டைடள வெரிகடளக் சகமொண்டு இயக்க, நிரலின் சவெளியீடு படைத்தில உளளத பபமொல
கிடடைக்கும்.
#chmod +x niral7.sh
#./niral7.sh

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -32- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


இயங்கு தளத்தில ஏழ வெடக நிடலகள அவெற்றின் பயன்பமொடுகடள அடுத்த தடலப்பில பமொர்க்கலமொம்.

கரலச்சசெமொற்கள: (Technical terms)


இயங்குதளம் – Operating system
ஏற்றநிடல – Booting stage
முதன்டமக்பகமொப்பு – First file
டமயம் – kernel (core of the operating system)
சதமொடைக்கம் – initrd file
ஏழ்நிடல – seven run levels of the operating system
இடணப்புக்பகமொப்பு - /etc/fstab file (file system table configuration file)
மூலப்பயனர், பவெர்ப்பயனர் - root user
மளடமத்தல - undo
அழிப்புநிரல - destruction script
மமொறிகள - variables
சூழலமமொறிகள - environment variables
மமொற்றீடுதல - Substitution
(கற்பபமொம்…)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -33- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – 5 இயங்குதளத்தின் ஏழ
ஓடு நிரலகள

நிறத்தம் ஒற்டறப் பயனர் வெடலயிலமொ


பலபய னர்வெடல யுளபல பயனர்
பிற்கமொல உயர்வு பயனர் வெடரகடல
மறசதமொடைக் கம்இயங் குநிடல ஏபழ.
- நிரற்பமொ 5

நிரற்பமொ விளக்கம்:
இப்பமொவில இயங்குதளத்தில உளள ஏழ நிடலகள விளக்கப்பட்டுளளன.
நிறத்தம் என்பத init 0 என்ற நிடலடயக் குறிக்கிறத. இத shutdown சசெய்யப்பட்டை நிடலயமொகும்.
ஒற்டறப்பயனர் என்பத single user என்படதயும் வெடலயிலமொ பலபயனர் என்பத multiuser without network
என்படதயும், வெடலயுள பலபயனர் என்பத multiuser with network என்படதயும், பிற்கமொல உயர்வு future
enhancement or unused என்படதயும், பயனர் வெடரகடல என்பத GUI-Graphical User Interface என்படதயும்,
மறசதமொடைக்கம் என்பத restart என்படதயும் குறிக்கிறத.
init 0 – shutdown
init 1 – single user mode
init 2 – multi user mode without network
init 3 – multi user mode with network
init 4 – unused for future enhancement purpose
init 5 – XII or GUI mode
init 6 – reboot

கீபழ உளள படைம் இலினக்சன் ஏழ ஓடு நிடலகடளயும் விளக்கும் வெண்ணம் உளளத.

#vim /etc/inittab என்ற பகமொப்பிடன திறந்த இதடன அறியலமொம். உளளிரப்பமொக Red Hat Enterprise Linux
இல ஓடு நிடல 3 அலலத 5 ஆனத இரக்கும். Ubunt இல ஓடுநிடல 3 ஆக இரக்கும்.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -34- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல 8
#!/bin/bash
# make_page - A script to produce an HTML file
TITLE="System Information for $HOSTNAME"
RIGHT_NOW=$(date +"%x %r %Z")
TIME_STAMP="Updated on $RIGHT_NOW by $USER"
cat <<- _EOF_
<HTML>
<HEAD>
<TITLE>
$TITLE
</TITLE>
</HEAD>
<BODY>
<H1>$TITLE</H1>
<P>$TIME_STAMP
</BODY>
</HTML>
_EOF_
பமபலயுளள நிரலில எவ்வெமொற மமொற்றிடுதல உளளத என்படதக் கமொண்பபமொம். இங்கு RIGHT_NOW,
TIME_STAMP ஆகிய இரண்டு மமொறிகள பயன்படுத்தப்பட்டுளளன. இதன் மூலம் இந்த நிரலமொனத
எப்சபமொழத பமம்படுத்தப்பட்டுளளத (updated) என்படத அறியலமொம்.
நிரல 9:

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -35- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


#!/bin/bash
# system_page - A script to produce an system information HTML file
##### Constants
TITLE="System Information for $HOSTNAME"
RIGHT_NOW=$(date +"%x %r %Z")
TIME_STAMP="Updated on $RIGHT_NOW by $USER"
##### Functions
function system_info
{
# Temporary function stub
echo "function system_info"
}
function show_uptime
{
# Temporary function stub
echo "function show_uptime"
}
function drive_space
{
# Temporary function stub
echo "function drive_space"
}
function home_space
{
# Temporary function stub
echo "function home_space"
}
##### Main
cat <<- _EOF_
<html>
<head>
<title>$TITLE</title>
</head>
<body>
<h1>$TITLE</h1>
<p>$TIME_STAMP</p>
$(system_info)
$(show_uptime)
$(drive_space)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -36- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


$(home_space)
</body>
</html>
_EOF_
function show_uptime
{
echo "<h2>System uptime</h2>"
echo "<pre>"
uptime
echo "</pre>"
}
function drive_space
{
echo "<h2>Filesystem space</h2>"
echo "<pre>"
df
echo "</pre>"
}
function home_space
{
echo "<h2>Home directory space by user</h2>"
echo "<pre>"
echo "Bytes Directory"
du -s /home/* | sort -nr
echo "</pre>"
}
function system_info
{
echo "<h2>System release info</h2>"
echo "<p>Function not yet implemented</p>"
}

நிரல தண்டுகள (Functions):


இந்நிரலில ஃபங்ஷென்கள என்னும் நிரல தண்டுகள அறிமுகப்படுத்தப்பட்டுளளன. அதமொவெத ஒர
சபரிய நிரடல சறிதசறிதமொக உடடைத்த, ஒர சறிய பவெடலயிடனச் சசெய்த முடிப்பபத நிரல தண்டு
எனப்படுகிறத. (a function is a piece of a program, which is used to perform a particular task in the main program)
$(system_info)
$(show_uptime)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -37- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


$(drive_space)
$(home_space)
இங்கு நெமொன்கு நிரல தண்டுகள பயன்படுத்தப்பட்டுளளன. system_info சபமொறியிடனப் பற்றிய
சசெய்திகடளத் தரவெதமொக அடமந்திரக்கிறத. show_uptime என்னும் நிரல தண்டைமொனத, சபமொறியமொனத
எவ்வெளவு பநெரம் சசெயலபமொட்டிலிரக்கிறத என்ற சசெய்திடயத் தரகிறத. drive_space நிரல தண்டில
வென்வெட்டின் அளவு கமொலியிடைம் பபமொன்றடவெ வெடரயறக்கப்பட்டுளளத. home_space என்ற தண்டில
user’s home directory ன் அளவு விளக்கப்பட்டுளளத.

நிரல தண்டின் பயன்பமொடுகள (usage of functions in shell script):


1. ஒர குறிப்பிட்டை பவெடலயிடன மட்டுபம சசெய்யப்பயன்படுகிறத.
2. மண்டும் மண்டும் எழத பவெண்டிய நிரலவெரிகடள ஒபர முடற எழதி மண்டும் மண்டும்
முதன்டம நிரலில இரந்த அடழக்கலமொம்.
3. நிரலர்களின் பணி எளிதமொகிறத.
4. சபமொறியும் எளிதில நிரலவெரிகடளப் புரிந்த குழப்பமின்றி சசெயலபடை உதவுகிறத.
5. வெரங்கமொல நிரல பமம்பமொட்டிற்கு உதவுகிறத.
6. நிரலிடன புதியவெர்கள படிக்கும் சபமொழத, எளிதில புரியும் வெண்ணம் அடமகிறத.

கரலச்சசெமொற்கள:
நிறத்தம் – init 0 (shutdown or halt)
ஒற்டறப் பயனர் – single user (run-level 1)
வெடலயிலமொ பலபயனர் – multiuser without network (run-level 2)
வெடலயுள பலபயனர் – multiuser with network (run-level 3)
பிற்கமொல உயர்வு – future enhancement (run-level 4)
பயனர் வெடரகடல – Graphical user interface (GUI run-level 5)
மறசதமொடைக்கம் – restart (run-level 6)
நிரல தண்டு - functions
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -38- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட - 6 சசெயற்பமொடு அல்லது
நிரல்துண்டு (Functions)

சபரஞ்சசெயல ஒன்டறப் பிரித்த, படுத்தம்


சக்கல வெரிகடளச் சறதண் டைமொக்கி
பவெண்டும் சபமொழதில விடரவெமொய் அடழக்கக்
கட்டைடள வெரிகுடறப் பதமொம்நிரல தண்படை.
- நிரற்பமொ 6

நிரற்பமொ விளக்கம்:
சபரிய பவெடலடயச் சசெய்யக் கூடிய நிரலிடன சறிய தண்டுகளமொக்கி பதடவெயமொன சபமொழத அடழத்தப்
பயன்படுத்திக் சகமொளவெதமொல கட்டைடள வெரிகள குடறயும். விடரவெமொகச் சசெயலகள முடியும்.
நிரல 10:
#!/bin/sh
# A simple script with a function...
add_a_user()
{
USER=$1
PASSWORD=$2
shift; shift;
# Having shifted twice, the rest is now comments ...
COMMENTS=$@
echo "Adding user $USER ..."
echo useradd -c "$COMMENTS" $USER
echo passwd $USER $PASSWORD
echo "Added user $USER ($COMMENTS) with pass $PASSWORD"
}
###
# Main body of script starts here
###
echo "Start of script..."
add_a_user bob letmein Bob Holness the presenter
add_a_user fred badpassword Fred Durst the singer
add_a_user bilko worsepassword Sgt. Bilko the role model
echo "End of script..."

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -39- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல விளக்கம்:
இந்நிரலில பயனடரயும் அதற்குரிய கடைவுச்சசெமொலடலயும் எவ்வெமொற நிரல தண்டு சகமொண்டு
அடமப்படதக் கமொண்கின்பறமொம். ஒர சறிய நிரல தண்டைமொனத மண்டும் மண்டும் அடழக்கப்பட்டு
பலபவெற பயனர்கடளயும் அவெற்றிற்குரிய கடைவுச்சசெமொற்கடளயும் எளிதில அடமக்க வெழிவெகுக்கிறத.
கீபழ இந்நிரலில அடழக்கப்பட்டுளள மமொற்றிடும் மமொறிகடளக் கமொண்கின்பறமொம். இங்கு ஆற மமொறிகள
டகயமொளப்படுகின்றன. அடவெ பின்வெரமமொற
$1=bob
$2=letmein
$3=Bob
$4=Holness
$5=the
$6=presenter

நிரல 11:
#!/bin/sh
myfunc()
{
echo "I was called as : $@"
x=2
}
### Main script starts here
echo "Script was called with $@"
x=1
echo "x is $x"
myfunc 1 2 3
echo "x is $x"
நிரல விளக்கம்:
இங்கு myfunc() என்பத நிரல தண்டைமொகும். அத முதன்டம நிரலில (main program) இரந்த
அடழக்கப்படுகிறத. இந்நிரல மூலம் நெமொம் எவ்வெமொற ஓபர மமொறியமொனத முதன்டம நிரலிலும், தண்டு
நிரலிலும் மமொறிமமொறி அடழக்கப்படுகின்றத என்படதக் கமொண்கிபறமொம்.
நிரல 12:
#!/bin/sh
myfunc()
{
echo "\$1 is $1"
echo "\$2 is $2"
# cannot change $1 - we'd have to say:
# 1="Goodbye Cruel"
# which is not a valid syntax. However, we can

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -40- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


# change $a:
a="Goodbye Cruel"
}

### Main script starts here


a=Hello
b=World
myfunc $a $b
echo "a is $a"
echo "b is $b"
நிரல விளக்கம்:
நிரல 11 இல இரப்பத பபமொன்பற இந்நிரலிலும் நிரல தண்டின் மூலமமொக மமொறியிடன எப்படி
பவெறவெடகயமொகப் பயன்படுத்தவெத என்ற விளக்கப்பட்டுளளத. ஆகபவெ பமற்கூறிய, நிரலகளின்
மூலமமொக சகமொடுக்கப்பட்டை உளளீடுகள எவ்வெமொற பவெறவெடகயமொக நிரல சவெளியீட்டில கிடடைக்கின்றன
என்பத அறியப்படுகின்றத.
நிரலகடள இயக்கும் முடற: நிரலகளின் சவெளியீடுகள எதவும் இங்கு சகமொடுக்கப்படைவிலடல.
நிரலகடள எப்சபமொழதம் பபமொல உடரத்திரத்தியில எழதி filename.sh என்ற பசெமித்த ./filename.sh என்ற
சகமொடுக்க சவெளியீடு கிடடைக்கும். இந்நிரலகடள Terminal emulator இல இயக்கிப்பமொர்ப்படதக்
கமொட்டிலும், இலினக்சு இயங்குதளத்தில இயக்கிப்பமொர்ப்பத நெலலத. இலினக்சு இயங்குதளத்தில நெமொம்
பயன்படுத்தம் பல கட்டைடளகள குறநிரலகள அடனத்திலும் நிரல தண்டுகள மிகுதியமொகப்
பயன்படுத்தப்பட்டிரக்கின்றன.
நிரலகளின் தவெறகடள வெரிவெரியமொய்ப் பமொர்க்க sh –vx ./filename.sh என்ற கட்டைடளவெரி சகமொண்டு
இயக்கிப்பமொர்க்கலமொம்.

கரலச்சசெமொற்கள:
சசெயற்பமொடு – functions
நிரலதண்டு – functions
சக்கலவெரிகள – complex instructions
சபரஞ்சசெயல – big task or complex task
முதன்டம நிரல – main program
உடரத்திரத்தி – text editor

(கற்பபமொம்...)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -41- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட 7 - கடடுப்பமொடடு
அரமவகள (if condition)

இரந்தமொல பிறகு இஃபத நிகழம்


இடலசயனில மற்றடவெ இயங்கும்; இரந்தமொல
கூடு இலடல; அடுக்கு இரந்தமொல
உண்டு; இரந்தமொல ஏணியும் உண்படை.
-நிரற்பமொ 7

நிரற்பமொ விளக்கம்:
இரந்தமொல என்பத இப்பமொடைலில if condition ஐக் குறிக்கிறத. If condition செரியமொக இரந்தமொல ஒன்றம்,
தவெறமொக இரந்தமொல பிரிசதமொன்றம் நெடைக்கும். கூடு என்பத nested if statement ஐக்குறிக்கிறத. உயர்நிடல
சமமொழிகளமொன ச,ச++ உளளத பபமொன்ற இதில nested if statement கிடடையமொத. அடுக்கு இரந்தமொல என்பத
elif statement ஐக்குறிக்கிறத. அடுக்கடுக்கமொன elif statement கள பசெர்ந்த இரந்தமொல ஏணி அதமொவெத elif ladder
ஐ உரவெமொக்குகிறத. ஏற்கனபவெ ச, ச++ உயர்நிடல சமமொழி கற்றவெர்களுக்கு இத எளிதில புரியும்.
மற்றவெர்களுக்குப் புரியும் வெண்ணம் கீபழ படைம் சகமொடுக்கப் பட்டுளளத.

குறிப்பிட்டை கட்டைடளயமொனத செரிபமொர்க்கப்பட்டு, செரிசயனில ஒன்ற அலலத ஒன்றக்கு பமற்பட்டை


கட்டைடளவெரிகள இயக்கப்படும். தவெசறனில பிறிசதமொர வெடகயமொன கட்டைடள அலலத ஒன்றக்கு
பமற்பட்டை கட்டைடளவெரிகள இயக்கப்படும்.
கீழ்க்கமொணும் அடமப்பு இதடன எளிதமொக விளக்குகிறத.
முதல வெடகயமொன if condition syntax:

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -42- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


# First form

if condition ; then
commands
fi

இரண்டைமொம் வெடகயமொன if condition syntax:


# Second form

if condition ; then
commands
else
commands
fi

மூன்றமொம் வெடக if condition syntax:


# Third form

if condition ; then
commands
elif condition ; then
commands
fi

முதலவெடகயமொன இரந்தமொல கட்டைடளயிடன, if statement இலலமொமலும் டகயமொளலமொம். test என்ற keyword


இங்கு if க்கு மமொற்றமொகப் பயன்படுத்தப்பட்டிரக்கிறத. இரண்டைமொவெத # Second form இல []செதர
அடடைப்புக்குறிகள பயன்படுத்தப்பட்டிரக்கின்றன.

# First form

test expression

# Second form

[ expression ]

எளிய எடுத்தக்கமொட்டு:
நிரல 13 பதிப்பு 1:

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -43- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


if [ -f .bash_profile ]; then
echo "You have a .bash_profile. Things are fine."
else
echo "Yikes! You have no .bash_profile!"
fi

இங்கு இரண்டைமொம் வெடகயமொன if condition டகயமொளப்பட்டுளளத. –f என்பத குறிப்பிட்டை பகமொப்பமொனத


உளளதமொ இலடலயமொ என்பதற்கமொக அடமக்கப்பட்டுளளத. fi என்பத if condition முடிவெடடையும் சபமொழத
சகமொடுக்க பவெண்டிய அடமப்பமொகும். உயர் நிடல சமமொழிகள பபமொன்ற { } braces இங்கு
பயன்படுத்தப்படுவெதிலடல. then என்கிற keyword ம் இன்றியடமயமொதத.

பமபலயுளள படைத்தில அடுக்கடுக்கமொன if statement கள டகயமொளப்பட்டுளளன. இடவெ decision making


எனப்படும் தீர்வெறிவெதறிவெதற்கமொக பயன்படுத்தப்படுகின்றன. இத இரந்தமொல ஏணி elif ladder
என்றடழக்கப்படுகிறத.
பின்வெரம் அட்டைவெடணயமொனத, எவ்வெமொற நெமொம் if statement இல ஒப்பிட்டுப் பமொர்த்த, முடிசவெடுப்பத
என்படத விளக்குகிறத.
Expression Description
-d file True if file is a directory.
-e file True if file exists.
-f file True if file exists and is a regular file.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -44- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


-L file True if file is a symbolic link.
-r file True if file is a file readable by you.
-w file True if file is a file writable by you.
-x file True if file is a file executable by you.
file1 -nt file2 True if file1 is newer than (according to modification time) file2
file1 -ot file2 True if file1 is older than file2
-z string True if string is empty.
-n string True if string is not empty.
string1 = string2 True if string1 equals string2.
string1 != string2 True if string1 does not equal string2.
நிரல 13 பதிப்பு 2:
if [ -f .bash_profile ]
then
echo "You have a .bash_profile. Things are fine."
else
echo "Yikes! You have no .bash_profile!"
fi

நிரல 13 பதிப்பு 3:
if [ -f .bash_profile ]
then echo "You have a .bash_profile. Things are fine."
else echo "Yikes! You have no .bash_profile!"
fi

கீழ்க்கமொணும் சறிய நிரலகள சவெகு எளிதமொக விளக்குவெதமொக அடமந்தளளன.


நிரல 14
if [ $(id -u) = "0" ]; then
echo "superuser"
fi

நிரல 15
if [ $(id -u) != "0" ]; then
echo "You must be the superuser to run this script" >&2
exit 1
fi

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -45- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


பின்வெரம் நிரலில, ஒர நிரல தண்டில எவ்வெமொற நெமொம் இரந்தமொல கட்டைடள வெரிடயப் பயன்படுத்தவெத
என்பத விளக்கப்பட்டுளளத.
நிரல 16
function home_space
{
# Only the superuser can get this information

if [ "$(id -u)" = "0" ]; then


echo "<h2>Home directory space by user</h2>"
echo "<pre>"
echo "Bytes Directory"
du -s /home/* | sort -nr
echo "</pre>"
fi

} # end of home_space

நிரல 17
#!/bin/bash

number=1

if [ $number = "1" ]; then


echo "Number equals 1
fi

நிரல 18
#!/bin/bash

number=1

if [ $number = "1" ]; then


echo "Number equals 1"
else
echo "Number does not equal 1"
fi

நிரல 19
#!/bin/bash

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -46- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


number=1

set -x
if [ $number = "1" ]; then
echo "Number equals 1"
else
echo "Number does not equal 1"
fi
set +x
நிரலகடள வெழக்கம்பபமொல உடரத்திரத்தியில எழதி இயக்கிப்பமொர்க்கவும்.

கரலச்சசெமொற்கள:
If condition statement - இரந்தமொல கட்டைடளவெரி
Elif statement - இடலசயனில கட்டைடளவெரி
Nested if statement - கூடு இரந்தமொல கட்டைடளவெரி
Elif ladder - இரந்தமொல ஏணி
(கற்பபமொம்...)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -47- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட– 8 சுழற்ச அல்லது
ஆகக்கடடரள (for loop)

நிரலகளில பயன்படும் பநெரிய அறிக்டக


சுணக்கம் இன்றி சுழற்சயிற் சசெயற்படை
பதடவெச் சசெயலகள திரம்பச் சசெய்யும்
ஆகக் கட்டைடள சகமொண்டு எழதபவெ.
- நிரற்பமொ 8

நிரற்பமொவிளக்கம்:
ஒர நிரலில பயன்படைக்கூடிய கட்டைடள வெரிகள (program statements), சதமொடைர் சசெயலபமொடுகள
தங்குதடடையின்றி (சுணக்கம் இன்றி) விடரவெமொகச் சசெயலபடை, குறிப்பிட்டை கட்டுப்பமொட்டு சசெயலமுடற
நிடறவெடடைந்தமொல (get satisfied the given condition) சதமொடைர்ந்த சுழற்சமுடறயில (loop) ஒன்ற அலலத
ஒன்றிற்கு பமற்பட்டை கட்டைடளகள (single or multiple statements) இயங்க ஆகக் கட்டைடளயமொனத (for
statement) உதவுகிறத.
இரந்தமொல கட்டைடள எடுத்தக்கமொட்டுகள (If statement examples)
நிரல 20:
#!/bin/bash

echo -n "Hurry up and type something! > "


if read -t 3 response; then
echo "Great, you made it in time!"
else
echo "Sorry, you are too slow!"
fi
இங்கு read கட்டைடளயில -t 3 என்ற சகமொடுக்கப்பட்டுளளத. இங்கு சபமொறியமொனத (system) மூன்ற
சநெமொடிகள பயனரின் உளளீட்டிற்கமொக (user input) கமொத்திரக்கும். பயனர் செரியமொன பநெரத்தில தட்டைச்சு
சசெய்தமொல if condition satisfied ஆகி Great, you made it in time! என்ற சவெளியீடு கிடடைக்கும்.
இலடலசயனில, Sorry, you are too slow! என்ற சவெளியீடு கிடடைக்கும். வெழக்கம் பபமொல எழதி இயக்கிப்
பமொர்க்கவும். பயனர் சசெய்யும் தட்டைச்சு திடரயில பதமொன்ற பவெண்டைமொசமனில, read -s கட்டைடள
சகமொடுக்கவும். எடுத்தக்கமொட்டைமொக, பயனர் தமத கடைவுச்சசெமொலடல தட்டைச்சு சசெய்யும் சபமொழத அத
திடரயில பதமொன்றமொமலிரக்க இதடனப் ப்யன்படுத்தலமொம்.
நிரல 21:
#!/bin/bash

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -48- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


number=0
echo -n "Enter a number > "
read number

echo "Number is $number"


if [ $((number % 2)) -eq 0 ]; then
echo "Number is even"
else
echo "Number is odd"
fi
இந்நிரல புரிந்த சகமொளவெதற்கும், அடமப்பதற்கும் மிக எளித. ஓர் எண் ஒற்டறப் படடை எண்ணமொ
அலலத இரட்டடைப் படடை எண்ணமொ என்படத எளிதமொக அறிய உதவும் ஒர நிரல. வெழக்கம் பபமொல எழதி
இயக்கிப்பமொர்க்கவும்.
நிரல 22:
#!/bin/bash

echo -n "Enter a number between 1 and 3 inclusive > "


read character
if [ "$character" = "1" ]; then
echo "You entered one."
else
if [ "$character" = "2" ]; then
echo "You entered two."
else
if [ "$character" = "3" ]; then
echo "You entered three."
else
echo "You did not enter a number"
echo "between 1 and 3."
fi
fi
fi
இந்நிரல ஒன்றிலிரந்த மூன்றிற்குள (மூன்ற மற்றம் ஒன்ற உட்படை) ஏபதனும் ஒர எண்டண
உளளீடைமொகக் சகமொடுத்த அத என்ன என்படத விளக்குவெதமொக அடமக்கப்பட்டுளளத. இத இரந்தமொல
அடுக்குக்கட்டைடளடய (nested if statement) விளக்குவெதற்கமொக சகமொடுக்கப்பட்டுளளத. இபத பபமொன்ற ஒர
நிரலடமடவெப் பயன்படுத்தி, சகமொடுக்கப்பட்டை மூன்ற எண்களில சபரியத, சறியத என்ன (find the
biggest or smallest of given three numbers or find the second smallest and second largest numbers) என்பன பபமொன்ற
நிரலகடளச் சசெய்த பமொர்க்கவும்.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -49- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல 23:
#!/bin/sh
# This is some secure program that uses security.
VALID_PASSWORD="secret" #this is our password.
echo "Please enter the password:"
read PASSWORD
if [ "$PASSWORD" == "$VALID_PASSWORD" ]; then
echo "You have access!"
else
echo "ACCESS DENIED!"
fi
இந்நிரல சகமொடுக்கப்பட்டை கடைவுச்சசெமொல (password) செரியமொனதமொ இலடலயமொ என்படத அறியவுதவும்
வெண்ணம் அடமக்கப்பட்டுளளத. இடத உடர ஒப்பீட்டு நிரலமொகவும் (string comparison script) கூறலமொம்.
இதன் மூலம் பலபவெற உடர ஓப்பீட்டு சசெயலகள சசெய்த பமொர்க்கலமொம்.
ஆகக் கட்டைடளயின் சசெயலமுடறயிடன பின்வெரம் படைமமொனத நென்கு எடுத்தடரக்கிறத.

முதலில ஒர மமொறியமொனத சதமொடைக்க மதிப்பிரத்தல (initialization) சசெய்யப்படுகிறத. பிறகு குறிப்பிட்டை


மமொறியமொனத பசெமொதடன (testing the condition) சசெய்யப்பட்டு, செரிசயனில குறிப்பிட்டை சுழற்சயின்
உடைலமொனத (body of the loop) ஒரமுடற சசெய்யப்படுகிறத. தவெசறனில சுழற்ச நிறத்தப்பட்டு, அடுத்த
கட்டைடள சசெயலபடுத்தப்படுகிறத. பசெமொதடனயின் விடடை செரியமொக இரக்கும் வெடர குறிப்பிட்டை
கட்டைடள அலலத கட்டைடளகள சதமொடைர்ந்த திரம்பத் திரம்ப சசெய்யப்பட்டுக் சகமொண்படை இரக்கும்.
ஆகக் கட்டைடளயின் சபமொத அடமவெமொனத (General syntax) கீழ்க்கமொணுமமொற அடமகிறத.
for var in word1 word2 ... wordN
do
Statement(s) to be executed for every word.
done

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -50- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


பின்வெரம் இரண்டு நிரலகடளச் சசெய்த குறிப்பிட்டை சவெளியீடுகள கிடடைக்கின்றனவெமொ எனச்
செரிபமொர்க்கவும்.
நிரல 24:
#!/bin/bash
for var in 0 1 2 3 4 5 6 7 8 9
do
echo $var
done
சவெளியீடு:
0
1
2
3
4
5
6
7
8
9
நிரல 25:
#!/bin/sh
for FILE in $HOME/.bash*
do
echo $FILE
done
சவெளியீடு:
/root/.bash_history
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
பமலும் சல ஆகக் கட்டைடள எடுத்தக்கமொட்டுகள (more for loop examples:)
நிரல 26:
#!/bin/bash
for X in red green blue
do
echo $X
done
இங்கு X என்ற மமொறியில மூன்ற மதிப்புகள இரத்தப்பட்டு மண்டும் மண்டும் எடுக்கப்படுகின்றத.
நிரலின் சசெய்த சவெளியீடு கமொணவும்.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -51- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல 27:
#!/bin/bash
colour1="red"
colour2="light blue"
colour3="dark green"
for X in "$colour1" $colour2" $colour3"
do
echo $X
done
இங்கு X என்ற மமொறியில பமலும் மூன்ற மமொறிகள இரத்தப்பட்டு, அடவெ திரம்ப
அடழக்கப்படுகின்றத.
நிரல 28:
#!/bin/bash
for X in *.html
do
grep -L '<UL>' "$X"
done
இந்த நிரல குறிப்பிட்டை ஒர அடடைவுக்குள இரக்கும் அடனத்த எச்டிஎம்எல பகமொப்புகளிலும் <UL>
என்ற உடர இரக்கிறதமொ எனப்பமொர்த்த, அவெற்டற மட்டும் திடரயில சவெளியிடும். ஒர அடடைவிடன
உரவெமொக்கி, அவெற்றில சல எச்டிஎம்எல பகமொப்புகடள உரவெமொக்கி விட்டு, அவெற்றில UL உளளிட்டை சல
வெரிகடளத் தட்டைச்சு சசெய்த, பின்பு இந்நிரடல இயக்கிச் செரிபமொர்க்கவும்.
ஆகக் கட்டைடளயின் பவெற சல எடுத்தக்கமொட்டுகடள சதமொடைர்ந்த கமொணலமொம்.

கரலச்சசெமொற்கள:
பநெரிய அறிக்டக - Proper statements
சுணக்கம் - slow down
சுழற்சயிற் சசெயற்படை - running in a loop
பதடவெச் சசெயலகள திரம்பச் சசெய்யும் - while condition is right, do the statements again and again
ஆகக் கட்டைடள - for loop statement
சுழற்சயின் உடைல – body of the loop
மமொறி – variable
அடடைவு – directory or folder
உடர – string or text
சுழற்ச முடற - loop

(கற்பபமொம்…)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -52- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட– 9 சுழற்ச அல்லது
ஆகக்கடடரள (for loop) சதமொடர்ச்ச

சசமமொழியில உளள சீரிய அடமவு


அடிபிற ழமொமல இம்மிபி செகமொமல
குறநிரல ஆகக் கட்டைடளக் குமுண்டைமொம்
வெடளவுக் கட்டைடள பவெடல சசெய்யபவெ.
நிரற்பமொ - 9

நிரற்பமொவிளக்கம்:
சசமமொழியில நெமொம் பயன்படுத்தம் அபத சபமொத அடமவுடைன், குறநிரலிலும் நெமொம் ஆகக் கட்டைடள
வெரிகடள அடமக்கலமொம். சசமமொழியில அடமந்தளள அபத வெடகயமொன அடமப்பு அடமக்கப்படுவெதமொல
அடிபிறழமொமல, இம்மிபிசெகமொமல என்ற சகமொடுக்கப்பட்டுளளத. ஆகக் கட்டைடள இங்கு
வெடளவுக்கட்டைடள என்ற சகமொடுக்கப்பட்டுளளத.
ஆகக் கட்டைடளயின் பவெற சல எடுத்தக்கமொட்டுகடள சதமொடைர்ந்த கமொண்பதற்கு முன்னமொல நெமொம்
சசமமொழியில வெடளவுக்கட்டைடளயின் சபமொதஅடமவிடனக் கமொணலமொம்.
for ((i=0;i>=10;i++))
{
Set of statements
}
நெமொம் முன்பு பவெற வெடகயமொன குறநிரலகடளக் கண்படைமொம். இப்சபமொழத சசமமொழியின் சபமொத
அடமவிடனக் சகமொண்டை குறநிரலகடளக் கமொணலமொம்.
நிரல 29:

#!/bin/bash
# Random number generation using C language syntax
for (( i=1; i <= 5; i++ ))
do
echo "Random number $i: $RANDOM"
done
இந்நிரலில சசமமொழியிலுளள அபத வெடகயமொன சபமொத அடமவு உளளத. { } என்னும் குறியீடுகளுக்கு
(curly braces) மமொற்றமொக do, done என்னும் சசெமொற்கள உளளன. 5 முடற இந்த சுழற்சயமொனத
இயக்கப்படுகிறத. சவெளியீடு பின்வெரமமொற அடமகிறத.

சவெளியீடு:

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -53- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


$ ./niral29.sh
Random number 1: 23320
Random number 2: 5070
Random number 3: 15202
Random number 4: 23861
Random number 5: 23435

நிரல 30:
#!/bin/bash
# This program explains about infinite loop in shell script
i=1;
for (( ; ; ))
do
sleep $i
echo "Number: $((i++))"
done
இத ஒர முடிவுறமொ சுழற்ச வெடளவுக்கட்டைடளயமொக அடமகிறத. ஆகக் கட்டைடளக்குள இரக்கும்
கட்டைடள வெரிகள திரம்பத்திரம்ப இயக்கப்பட்டு சவெளியீடைமொனத கிடடைக்கிறத. இத சசமமொழியில
உளள அபத வெடகயமொன அடமவெமொகும். இங்கு மமொறியமொனத ஒன்ற கூட்டைப்பட்டு வெரவெதமொல,
வெடளவுக்கட்டைடள எத்தடன முடற இயக்கப்பட்டைத என்படதக் கமொண இயலுமமொற சவெளியீடு
அடமகிறத.

சவெளியீடு:
$ ./niral30.sh
Number: 1
Number: 2
Number: 3

நிரல 31:
#!/bin/bash
#for loop using comma

for ((i=1, j=10; i <= 5 ; i++, j=j+5))


do
echo "Number $i: $j"
done

இந்நிரலிலும் சசமமொழியில உளள அபத வெடகயமொன அடமவு எடுத்தமொளப்பட்டுளளத. இங்கு i மற்றம் j


என்ற இரண்டு வெடகயமொன மமொறிகள டகயமொளப்படுகின்றன. இரண்டும் தனித்தனியமொக ஒன்றடைன்

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -54- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


கூட்டைப்படுகின்றன அதவும் ஒபர ஒர கட்டைடள வெரியில. சவெளியீடைமொனத பின்வெரமமொற அடமகிறத.
இங்கு இரண்டு மமொறிகள எடுத்தக்கமொட்டிற்கமொக சகமொடுக்கப்பட்டுளளன. இபத பபமொல பல மமொறிகடள
ஒபர கட்டைடளவெரியில பயன்படுத்தி கணக்கீடுகடளச் சசெய்த சவெளியீடுகடள எளிடமயமொகக் கமொணலமொம்.

சவெளியீடு:
$ ./niral31.sh
Number 1: 10
Number 2: 15
Number 3: 20
Number 4: 25
Number 5: 30

நிரல 32:
#!/bin/bash
#! For loop with range in numbers

for num in {1..10}


do
echo "Number: $num"
done

இங்கு சசமமொழியின் சபமொத அடமவு டகயமொளப்படைவிலடல. ஆகக் கட்டைடள சகமொண்டு ஒன்ற முதல
பத்த வெடர அச்சடை கட்டைடள சகமொடுக்கப்பட்டுளளத.

சவெளியீடு:
$ ./niral32.sh
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5
Number: 6
Number: 7
Number: 8
Number: 9
Number: 10
இபத நிரடல சசமமொழி அடமவுடைன் பின்வெரமமொற அடமக்கலமொம்.
நிரல 33:
#!/bin/bash

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -55- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


#for loop with with C language syntax
for ((i=1;i<=10;i++))
do
echo “Number: $i”
done
நிரல 34:
#!/bin/bash
# Range of numbers with increments after “in” keyword

for num in {1..10..2}


do
echo "Number: $num"
done

சவெளியீடு:
$ ./niral34.sh
Number: 1
Number: 3
Number: 5
Number: 7
Number: 9

இந்நிரலில குறிப்பிட்டை மமொறியமொனத, இரண்டு இரண்டைமொக தமொவி ஓடுகிறத. இபத நிரடல சசமமொழியின்
அடமவுடைன் பின்வெரமமொற எழதி இயக்கலமொம்.

நிரல 35:
#!/bin/bash
#Niral 34 with C Language syntax
for ((i=1;i<=10;i=i+2)
do
echo ”Number: $i”
done

நிரல 36:
#!/bin/bash
# fileinfo.sh Fileinfo: operating on a file list contained in a variable
FILES="/usr/sbin/accept
/usr/sbin/pwck
/usr/sbin/chroot

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -56- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


/usr/bin/fakefile
/sbin/badblocks
/sbin/ypbind" # List of files you are curious about.
# Threw in a dummy file, /usr/bin/fakefile.

echo

for file in $FILES


do
if [ ! -e "$file" ] # Check if file exists.
then
echo "$file does not exist."; echo
continue # On to next.
fi

ls -l $file | awk '{ print $9 " file size: " $5 }' # Print 2 fields.
whatis `basename $file` # File info.
# Note that the whatis database needs to have been set up for this to work.
# To do this, as root run /usr/bin/makewhatis.
echo
done

exit 0
இங்கு குறிப்பிட்டை மமொறியில சல பகமொப்புகளின் வெழி (file path) இரத்தப்பட்டு, அங்பக உளள
பகமொப்புக்கள உளளனவெமொ இலடலயமொ, அவ்வெமொற இரந்தமொல அவெற்றின் பகமொப்பின் அளவு என்ன
ஆகியடவெ கண்டைறியப்படுகின்றன. பமற்கூறிய நிரலிடனச் சசெய்த பமொர்க்கவும்.

கரலச்சசெமொற்கள:
சபமொத அடமவு – general syntax
வெடளவுக்கட்டைடள – for loop
குறநிரல – shell script
முடிவுறமொ சுழற்ச வெடளவுக்கட்டைடள – infinite for loop
மமொறி - variable
(கற்பபமொம்...)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -57- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட -10 வரளவக்
கடடரளயின் பவற வரககள

சபமொழசதலமொம் கட்டைடள நுடழவு அடைக்கம்


வெடரயிலும் கட்டைடள சவெளிப்புற அடைக்கம்
என்பன பபமொன்ற இன்னும் உண்டைமொம்
வெடளவுக் கட்டைடள வெடககள இரண்படை.
- நிரற்பமொ 10

நிரற்பமொ விளக்கம்:
வெடளவுக் கட்டைடளயமொனத இன்னும் இரண்டு வெடககளில உயர் நிடல சமமொழிகளில
டகயமொளப்படுகிறத. ஒன்ற ஒர கட்டுப்பமொட்டிடன (condition) ஏற்றக் சகமொண்டு அத செரிசயனில
அதற்குரிய கட்டைடளகடள இயக்குதல. இத சபமொழசதலமொம் கட்டைடள சகமொண்டு சசெயலபடும்
வெடளவுக் கட்டைடளயமொகும் (while loop – entry controlled loop). இத நுடழவு அடைக்கம் அலலத நுடழவுக்
கட்டுப்பமொடு என்ற கரத்தரவில நிகழ்கிறத. இரண்டைமொவெத, சல கட்டைடள வெரிகடள இயக்கிவிட்டு
அதன்பிறகு குறிப்பிட்டை கட்டுப்பமொட்டிடன செரிபமொர்க்கும் கரத்தர. இத வெடரயிலும் கட்டைடள
சவெளிப்புற அடைக்கம் (while loop - exit controlled loop) என்ற அடழக்கப்படுகிறத. பின்வெரம் படைம்
இதடன நென்கு விளக்குவெதமொக அடமந்தளளத. இதடன முன் பசெமொதடன வெடளவுக் கட்டைடள (pretest loop)
பின் பசெமொதடன வெடளவுக் கட்டைடள (post test loop) என்றம் அடழக்கலமொம்.
வெடரயிலும் கட்டைடளக்கு எதிரமொக சபமொழசதலமொம் கட்டைடள (whle loop vs until loop) மூன்ற
படிகடளக் சகமொண்டுளளத.
1. வெடரயிலும் கட்டைடள சுழியலலமொத நிடல (non-zero status) வெடர சசெய்யப்படுகிறத.
2. சபமொழசதலமொம் கட்டைடள சுழி நிடல (zero status) வெடர சசெய்யப்படுகிறத.
3. வெடரயிலும் கட்டைடள எப்சபமொழதபம ஒர முடற தனத கட்டைடள வெரிகடள
இயக்கிவிடுகிறத.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -58- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


இன்னும் சல ஆகக் கட்டைடள எடுத்தக்கமொட்டுகள (some more for statement examples):
நிரல 37:
#!/bin/bash
# print the user names
i=1
for username in `awk -F: '{print $1}' /etc/passwd`
do
echo "Username $((i++)) : $username"
done
நிரல விளக்கம்:
இந்நிரலில ஒர சபமொறியிலுளள (system) பயனர் சபயர்கடள (usernames) மட்டும் பிரித்சதடுத்தக் கமொட்டைத்
பதடவெயமொன சநெறியமொளடக கமொட்டைப்பட்டுளளத. /etc/passwd என்ற பகமொப்பில உளள பல வெடகயமொன
சசெய்திகளில இத பயனர் சபயடர மட்டும் பிரித்சதடுக்கிறத. இதற்கமொக இங்கு awk கட்டைடள
பயன்படுத்தப்பட்டுளளத.
சவெளியீடு:
# ./niral36.sh
Username 1 : prasanna
Username 2 : arivu
Username 3 : nedilan
Username 4 : porrko

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -59- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


..
நிரல 37:
#!/bin/bash
i=1
cd ~
for item in *
do
echo "Item $((i++)) : $item"
done
நிரல விளக்கம்:
இங்கு குறிப்பிட்டை அடடைவிலுளள அடனத்த வெடகயமொன பகமொப்புக்கடளயும் கமொட்டும் வெடகயில நிரல
அடமக்கப்பட்டுளளத. cd ~ என்பத ஒர குறிப்பிட்டை பயனரின் வீட்டு அலலத முகப்பு அடடைவிடனக்
குறிக்கிறத.
சவெளியீடு:
# ./niral37.sh
Item 1 : positional-parameters.sh
Item 2 : backup.sh
Item 3 : emp-report.awk
Item 4 : item-list.sed
Item 5 : employee.db
Item 8 : storage
Item 9 : downloads
நிரல 38:
#!/bin/bash
i=1
for file in /etc/[abcd]*.conf
do
echo "File $((i++)) : $file"
done
நிரல விளக்கம்:
இந்த நிரலில குறிப்பிட்டை எழத்தக்களில ஏபதனும் ஒன்டறக் சகமொண்டு சதமொடைங்கக்கூடிய (a,b,c,d
ஆகியவெற்றில ஏபதனும் ஒர எழத்தில சதமொடைங்கக்கூடிய) பகமொப்புகள மட்டும் சவெளியிடைப்படும்
வெண்ணம் அடமக்கப்பட்டுளளத. மற்ற பகமொப்புகள நிரலின் சவெளியீட்டில கமொட்டைப்படைமொத.
சவெளியீடு:
# ./niral38.sh
File 1 : /etc/asound.conf
File 2 : /etc/autofs_ldap_auth.conf
File 3 : /etc/cas.conf
File 4 : /etc/cgconfig.conf

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -60- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


File 5 : /etc/cgrules.conf
File 6 : /etc/dracut.conf
நிரல 39:
#!/bin/bash
# Script for multiplication table for 5
#
if [ $# -eq 0 ]
then
echo "Error - Number missing form command line argument"
echo "Syntax : $0 number"
echo "Use to print multiplication table for given number"
exit 1
fi
n=5
for i in 1 2 3 4 5 6 7 8 9 10
do
echo "$n * $i = `expr $i \* $n`"
done
நிரல விளக்கம்:
பமபலயுளள நிரல, ஐந்தமொம் வெமொய்ப்பமொட்டிடன அடமக்க உதவுகிறத. இங்கு n=5 என்ற கட்டைடள வெரியில
பவெசறமொர எண்டண அடமத்தமொல, பவெற வெடகயமொன வெமொய்ப்பமொட்டிடன சவெளியீடைமொகக் கமொணலமொம்.
சவெளியீடு:
# ./niral39.sh
5*1=5
5 * 2 = 10
...
..
5 * 10 = 50
இபத நிரலிடன பவெற வெடகயமொன ஆகக் கட்டைடள சகமொண்டு (for loop another format) எழதி
இயக்கிப்பமொர்த்தப் பயிற்ச எடுக்கவும்.
சபமொழசதலமொம் கட்டைடள (while loop) எடுத்தக்கமொட்டுக்கடள பிறகு கமொணலமொம்.

கரலச்சசெமொற்கள:
வெடரயிலும் கட்டைடள – until loop
சபமொழசதலமொம் கட்டைடள – while loop
சவெளிப்புற அடைக்கம் – exit controlled
நுடழவு அடைக்கம் – entry controlled

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -61- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


வெடளவுக் கட்டைடள – loop statements
கரத்தர - concept
சுழி நிடல – zero status
சுழியலலமொத நிடல – non-zero status
சபமொறி – system
பயனர் சபயர் – username
வீட்டு அலலத முகப்பு அடடைவு – Home folder or home directory
(கற்பபமொம்...)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -62- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட -11 சபமொழசதலமொம்
கடடரள அல்லது while loop – entry controlled loop

நுடழவு அடைக்கம் நுட்பமமொய்க் சகமொண்டை


சபமொழசதலமொம் கட்டைடள புத்தணர் பவெமொடு
தன்னுடைல பூண்டை தவெறமொ வெரிகடள
சசெய்யுமமொம் சுழிநிடல வெரகின்ற வெடரயிபல.
- நிரற்பமொ 11

நிரற்பமொ விளக்கம்:
வெடளவுக்கட்டைடளயின் நுடழவிபலபய சகமொடுக்கப்பட்டுளள, கட்டுப்பமொடைமொனத நிடறவெடடைகிறதமொ
(whether the given condition is satisfied or not) எனச் செரிபமொர்த்த, செரிசயனில தனத உடைலிடன (body of the loop)
திரம்பத்திரம்ப சசெய்யும். சபமொதவெமொக, கட்டுப்பமொடைமொனத சுழிநிடலயமொகபவெ இரக்கும். இப்பமொவில,
சுழிநிடல வெரகின்ற வெடரயிபல என்ற வெரி, குறிப்பிட்டை கட்டுப்பமொடைமொனத நிடறவெடடைவெடதபய
குறிக்கிறத. கட்டுப்பமொடைமொனத நிரலிடனப் சபமொறத்த எந்த வெடகயமொனதமொகவும் இரக்கலமொம். இங்கு சுழி
என்பத சுழியத்டத (zero) மட்டும் குறிக்கமொமல, இலடல (condition is false) என்படதயும் குறிக்கிறத.

ஆகக் கட்டைடளக்கு பமலும் ஓர் எடுத்தக்கமொட்டு.


நிரல 40:
#!/bin/bash
#niral40
#chessboard
for (( i = 1; i <= 9; i++ )) ### Outer for loop ###
do
for (( j = 1 ; j <= 9; j++ )) ### Inner for loop ###

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -63- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


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
நிரல விளக்கம்:
இந்நிரல எவ்வெமொற ஒர செதரங்கப்பலடகயிடன (chess board) உரவெமொக்குவெத என்பதற்கமொகப்
பயன்படுகிறத. கட்டைடளவெரிகளும், அதற்குரிய இடணயமொன விளக்கங்களும் பின்வெரம்
அட்டைவெடணயில சகமொடுக்கப்பட்டுளளன.
கட்டைடள வெரிகள விளக்கங்கள
for (( i = 1; i <= 9; i++ )) Begin the outer loop which runs 9 times., and the outer loop
do terminates when the value of i exceeds 9
Begins the inner loop, for each value of i the inner loop is cycled
for (( j = 1 ; j <= 9; j++ ))
through 9 times, with the variable j taking values from 1 to 9.
do
The inner for loop terminates when the value of j exceeds 9.
tot=`expr $i + $j`
See for even and odd number positions using these statements.
tmp=`expr $tot % 2`
if [ $tmp -eq 0 ]; then If even number position print the white colour block (using echo
echo -e -n "\033[47m " -e -n "\033[47m "statement); otherwise for odd position print the
else black colour box (using echo -e -n "\033[40m " statement).
echo -e -n "\033[40m " These statements are responsible to print entire chess board on
fi screen with alternate colours.
done End of inner loop
Make sure its black background as we always have on our
echo -e -n "\033[40m"
terminals.
echo "" Print the blank line
End of outer loop and shell scripts get terminated by printing the
done
chess board.
சவெளியீடு:
#./niral40.sh

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -64- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சபமொழசதலமொம் கட்டைடளயின் சபமொதவெடமவு கள (Syntaxes of while loop):
மூன்ற சவெவ்பவெற சஷெலகளுக்கு சவெவ்பவெறமொக while கட்டைடளயின் சபமொதவெடமவுகள அடமகின்றன.
அடவெயமொனடவெ பின்வெரமமொற.
Ksh shell syntax:
while [[ condition ]] ; do
command1
command1
commandN
done
csh syntax:
while command
do
Statement(s) to be executed if command is true
done
Bash syntax:
while [ condition ]
do
command1
command2
commandN
done
இனி (while) சபமொழசதலமொம் கட்டைடளயின் எடுத்தக்கமொட்டுக்கடள கமொணலமொம்.
நிரல 41:
#!/bin/sh
#niral 41
a=0
while [ $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
நிரல விளக்கம்:
இனி a என்ற மமொறியமொனத, பத்த என்ற எண் வெரம் வெடர குறிப்பிட்டை கட்டைடளயிடனத் திரம்பத்திரம்ப
சசெய்த பின்வெரம் சவெளியீட்டிடன அளிக்கிறத. lt என்பத less than ஐக் குறிப்பதமொல 10 என்ற எண்டண

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -65- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


விட்டுவிட்டு ஒன்பத வெடர பதிப்பிக்கிறத (printing). இந்தக் கட்டைடளயிடன நெமொம் ஆகக் கட்டைடளக்கு
(an alternate for for command) மமொற்றமொகப் பயன்படுத்தலமொம்.
சவெளியீடு:
#./niral41.sh
0
1
2
3
4
5
6
7
8
9
நிரல 42:
#!/bin/bash
#niral 42
c=1
while [ $c -le 5 ]
do
echo "Welcome $c times"
(( c++ ))
done
நிரல விளக்கம்:
இந்த நிரலிலும் பமற்குறிய நிரல பபமொலபவெ குறிப்பிட்டை கட்டுப்பமொடு நிடறவெடடையும் (satisfying the given
condition) வெடர கட்டைடளகள சசெயலபடுத்தப்பட்டு சவெளியீடைமொனத பின்வெரமமொற அடமகிறத.
சவெளியீடு:
#./niral42.sh
Welcome 1 times
Welcome 2 times
Welcome 3 times
Welcome 4 times
Welcome 5 times
நிரல 43:
#!/bin/bash
#niral 43
# This generates a file every 5 minutes
while true; do
touch pic-`date +%s`.jpg

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -66- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


sleep 300
done
நிரல விளக்கம்:
இங்கு while கட்டைடளயமொனத, ஒர முடிவுறமொ வெடளவுக்கட்டைடளடயக் சகமொடுக்கிறத. அதமொவெத அத
எப்சபமொழதபம true ஆக இரக்கிறத. touch கட்டைடள ஒர குறிப்பிட்டை பகமொப்பிடன உரவெமொக்குவெதற்கமொக
சகமொடுக்கப்பட்டுளளத. sleep 300 கட்டைடள ஐந்த மணித்தளிகள (அலலத 300 சநெமொடிகள) சபமொறியிடன
ஒன்றம் சசெய்யவிடைமொமல தூங்க டவெக்கிறத.
சவெளியீடு:
#./niral43.sh
இந்த நிரலமொனத, ஐந்த மணித்தளிகளுக்கு ஒரமுடற ஒர படைக்பகமொப்பிடன குறிப்பிட்டை அடடைவிற்குள
உரவெமொக்குகிறத.

கரலச்சசெமொற்கள:
நுடழவு அடைக்கம் – entry controlled
சபமொழசதலமொம் கட்டைடள – while loop
தன்னுடைல பூண்டை – body of the loop
சுழிநிடல – zero status, condition is false
சுழியம், இலடல, இன்டம – zero
செதரங்கப்பலடக – chess board
(கற்பபமொம்...)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -67- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட -12 வரரயிலும் கடடரள
அல்லது until loop – exit controlled loop

சவெளிப்புற அடைக்கம் வெழியில கமொணும்


வெடரயிலும் கட்டைடள விரம்பி சமய்சபமொய்
கமொணமொமல சுழியறக் குடறந்த சதமொரமுடற
பயனும் சசெய்யுமமொம் பவெண்டு சமன்பற.
- நிரற்பமொ 12

நிரற்பமொ விளக்கம்:
வெடரயிலும் கட்டைடளயமொனத தனக்குக் சகமொடுக்கப்பட்டை கட்டுப்பமொடைமொனத செரி அலலத தவெற என்ற
எடதயும் பமொரமொமல, ஒர முடறயமொவெத தனக்குக் சகமொடுக்கப்பட்டுளள கட்டைடளகள அடனத்டதயும்
சசெய்த முடிக்கும். இங்கு சுழியற என்பத non-zero value ஐக் குறிக்கிறத.இத அடனத்த வெடகயமொன உயர்
நிடல சமமொழிகளிலும் உண்டு என்றமொலும், இடதப் பயன்படுத்தம் நிரலர்கள குடறபவெ.

சபமொதவெடமவு (General Syntax):


until expression
do
commands #body of the loop
done
பமபல குறிப்பிடைப்பட்டுளள சபமொதவெடமவு சகமொண்டை இக்கட்டைடள செற்பற அரிதமொக நிரலர்கள, மற்றம்
சமன்சபமொறிஞர்களமொல டகயமொளப்படுகிறத. சபரம்பமொலும், சபமொழசதலமொம் கட்டைடள (while loop
command) சகமொண்படை இத பபமொன்ற சசெயலகள சசெய்யப்படுகின்றன. இதவும் ஏறத்தமொழ சபமொழசதலமொம்
கட்டைடள பபமொன்றபத. இதில கட்டைடள உண்டம எனினும் அலலத சபமொய் எனினும் ஒர முடற
வெடளவுக் கட்டைடளயமொனத சசெயலபடும்.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -68- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல 44:
# cat monitor.sh
#!/bin/bash
#niral 44
file=/tmp/logfile
until [ $(ls -l $file | awk '{print $5}') -gt 2000 ]
do
echo "Sleeping for next 5 seconds"
sleep 5
done
date=`date +%s`
cp $file "$file-"$date.bak

நிரல விளக்கம்:
இந்நிரலில, குறிப்பிட்டை log பகமொப்பு உரவெமொக்கப்படுகிறத. அத 2000 டபட்டுகள ஆன பிறகு அடத
கமொப்புப்படி எடுத்த டவெக்கிறத. அத .bak என்னும் பின்சனமொட்டுடைன் இரக்கிறத. இங்கு வெடரயிலும்
கட்டைடளயமொனத சதமொடைர்ந்த சசெய்யப்படுகிறத. இந்த பகமொப்புகள அடனத்தம் /tmp என்ற அடடைவுக்குள
உரவெமொக்கப்படுகிறத.
சவெளியீடு:
# ./monitor.sh
Sleeping for next 5 seconds
Sleeping for next 5 seconds

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -69- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


# ls -l /tmp/logfile*
-rw-r--r-- 1 sss sss 2010 Jun 24 12:29 logfile
-rw-r--r-- 1 sss sss 2005 Jun 24 16:09 logfile-1277474574.bak
நிரல 45:
# cat mac_wait.sh
#! /bin/bash
#niral 45
read -p "Enter IP Address:" ipadd
echo $ipadd
until ping -c 1 $ipadd
do
sleep 60;
done
ssh $ipadd

நிரல விளக்கம்:

இக்குறநிரலமொனத, ssh கட்டைடளடயப் பயன்படுத்தி, மற்சறமொர சபமொறியிடன சதமொடல அணுகல மூலம்


அணுகும் (remote access) சபமொழத முதலில அத இடணப்சபமொலிக் கூவெல (ping command) மூலம்
சதமொடைர்பில இரக்கிறதமொ என செரி பமொர்க்கப்படுகிறத. பின்பு அறபத சநெமொடிகள தூங்குகிறத. பிறகு
மண்டும் கூவெல சசெய்கிறத. விடடைகள கிடடைத்தமொல மட்டும் சதமொடல அணுகலுக்கமொன கட்டைடளயிடனச்
சசெயலபடுத்தகிறத. இடணப்சபமொலிக் கூவெல விடடைதறமொவிடில சதமொடல அணுகல சசெய்த பநெரத்டத
வீணமொக்கமொத. பின்வெரம் எடுத்தக்கமொட்டைமொன சவெளியீட்டிடனக் கமொணவும்.
சவெளியீடு:
#./mac_wait.sh
Enter IP Address:192.143.2.10
PING 192.143.2.10 (192.143.2.10) 56(84) bytes of data.

--- 192.143.2.10 ping statistics ---


1 packets transmitted, 0 received, 100% packet loss, time 0ms

PING 192.143.2.10 (192.143.2.10) 56(84) bytes of data.


64 bytes from 192.143.2.10: icmp_seq=1 ttl=64 time=0.059 ms

--- 192.143.2.10 ping statistics ---


1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.059/0.059/0.059/0.000 ms
The authenticity of host '192.143.2.10 (192.143.2.10)' can't be established.
Are you sure you want to continue connecting (yes/no)? yes

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -70- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல 46:
#!/bin/bash
#niral 46
number=0
until [ $number -ge 10 ]; do
echo "Number = $number"
number=$((number + 1))
done

நிரல விளக்கம்:
இத மிக எளிடமயமொகத் தட்டைச்சுச் சசெய்த புரிந்த சகமொளள உதவும் நிரலமொகும். தன்புரிதலுடைன் சசெய்த
பமொர்க்கவும்.
சவெளியீடு:
நிரலிடனச் சசெய்த பமொர்த்த சவெளியீடு அறிய முயலுக.
நிரல 47:
#!/bin/bash
# This script copies files from my homedirectory into the webserver directory.
# A new directory is created every hour.
# If the pics are taking up too much space, the oldest are removed.

while true; do
DISKFUL=$(df -h $WEBDIR | grep -v File | awk '{print $5 }' | cut -d "%" -f1 -)

until [ $DISKFUL -ge "90" ]; do

DATE=`date +%Y%m%d`
HOUR=`date +%H`
mkdir $WEBDIR/"$DATE"

while [ $HOUR -ne "00" ]; do


DESTDIR=$WEBDIR/"$DATE"/"$HOUR"
mkdir "$DESTDIR"
mv $PICDIR/*.jpg "$DESTDIR"/
sleep 3600
HOUR=`date +%H`
done

DISKFULL=$(df -h $WEBDIR | grep -v File | awk '{ print $5 }' | cut -d "%" -f1 -)
done

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -71- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


TOREMOVE=$(find $WEBDIR -type d -a -mtime +30)
for i in $TOREMOVE; do
rm -rf "$i";
done

done
நிரல விளக்கம்:
இந்நிரலில குறிப்பிட்டை ஒர முகப்பு அடடைவெமொனத (home directory files) அதிலுளள பகமொப்புக்கடள ஒர
வெடல வெழங்கியில படிசயடுத்த டவெக்கப்படுகிறத.
ஒர புதிய அடடைவெமொனத (new directory) ஒவ்சவெமொர மணி பநெரத்திற்கும் உரவெமொக்கப்படுகிறத.
படைங்களமொனத அதிகமமொக இரப்பின், படழய படைங்கள நீக்கப்பட்டு விடும்.
சவெளியீடு:
பமபல குறித்த நிரல விளக்கங்கடளக் சகமொண்டு நிரலிடன சசெய்த பமொர்த்த விடடையறிய முயலுக.

கரலச்சசெமொற்கள:
சவெளிப்புற அடைக்கம் – exit controlled
வெடரயிலும் கட்டைடள – until loop
சமய்சபமொய் – Boolean value (it may be true or false)
சுழியற – non zero value
குடறந்த சதமொரமுடற – at least once
வெடல வெழங்கி – web server
படிசயடுத்தல – backup
இடணப்சபமொலிக் கூவெல – connection ping command
கூவெல விடடைகள – ping replies
தன்புரிதல – self explanatory
(கற்பபமொம்…)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -72- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட -13. பதர்வக் கடடரள
அல்லது பதர்வமொரண (case statement)

தன்னுள ஏற்ற தீர்வு வெரிகடள


வெடகக்சகமொர கட்டைடள வெண்ணம் பிரித்த
மற்றடவெ வெடகடம முடறயில பநெமொக்கித்
திறம்படைச் சசெய்யும் பதர்வெமொ டணபய.
நிரற்பமொ -13

நிரற்பமொ விளக்கம்:
இங்கு பதர்வு ஆடண எனப்படுவெத case கட்டைடளயிடனக் குறிப்பதமொகும்.
Case கட்டைடள எலலமொ உயர் நிடல சமமொழிகடளப் பபமொன்றம், சஷெல ஸ்கிரிப்டிலும், வெடகக்சகமொர
வெண்ணமமொகச் சசெயலபட்டு அதற்குரிய ஒன்ற அலலத அதற்கு பமற்பட்டை கட்டைடளகடள இயக்கித்
தீர்விடனத் தரகிறத.
இந்தக் கட்டைடளயின் சபமொதவெடமவெமொனத கீபழ சகமொடுக்கப்பட்டுளளத. இந்தக் கட்டைடளயிடன if else
ஏணிக்கு (else if ladder) மமொற்றமொகப் பயன்படுத்தலமொம்.
குறிப்பு: இங்கு case எனத் சதமொடைங்கும் பதர்வுக் கட்டைடள esac என்ற முடிதல பவெண்டும்.
சபமொத அடமவு (General syntax):
case word in
pattern1)
Statement(s) to be executed if pattern1 matches
;;
pattern2)
Statement(s) to be executed if pattern2 matches
;;
pattern3)
Statement(s) to be executed if pattern3 matches
;;
*)
Default statement(s)
esac
இங்கு * ஆனத மற்ற எந்த வெடகக் கட்டைடளகளிலும், இலலமொத வெடக (pattern) ஏபதனும் வெரப்சபற்றமொல
அதடன இயக்குவெதமொக அடமகிறத.
நிரல 48:
#!/bin/sh

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -73- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


#niral 48
FRUIT="kiwi"
case "$FRUIT" in
"apple") echo "Apple pie is quite tasty."
;;
"banana") echo "I like banana nut bread."
;;
"kiwi") echo "New Zealand is famous for kiwi."
;;
esac
நிரல விளக்கம்:
இங்கு நிரலமொனத kiwi என்ற வெடகயீட்டில வெரவெதமொல,கீழ்க்கமொணுமமொற சவெளியீடைமொனத அடமகிறத.
சவெளியீடு (Output):
New Zealand is famous for kiwi.
நிரல 49:
# cat filetype.sh
#!/bin/bash
#niral 49
for filename in $(ls)
do
# Take extension available in a filename
ext=${filename##*\.}
case "$ext" in
c) echo "$filename : C source file"
;;
o) echo "$filename : Object file"
;;
sh) echo "$filename : Shell script"
;;
txt) echo "$filename : Text file"
;;
*) echo " $filename : Not processed"
;;
esac
done
நிரல விளக்கம்:
இந்நிரலில சகமொடுக்கப்பட்டை அடடைவிற்குள (folder) பகமொப்பமொனத, எந்த வெடகயமொனத (type of the file and
extension) எனக் கண்டைறிவெதமொக அடமகிறத. சவெளியீட்டில, ச சமமொழிக் பகமொப்பு, உடரக்பகமொப்பு,

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -74- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


ஆப்சஜேக்ட் பகமொப்பு, பின்சனமொட்டு இலலமொத பகமொப்பு (file without extension or Not processed file) ஆகியடவெ
டகயமொளப்பட்டுளளத.
சவெளியீடு (Output):
# ./filetype.sh
a.c : C source file
b.c : C source file
c1.txt : Text file
fileop.sh : Shell script
obj.o : Object file
text : Not processed
t.o : Object file
நிரல 50:
# cat yorno.sh
#niral50.sh
#!/bin/bash
echo -n "Do you agree with this? [yes or no]: "
read yno
case $yno in

[yY] | [yY][Ee][Ss] )
echo "Agreed"
;;

[nN] | [n|N][O|o] )
echo "Not agreed, you can't proceed the installation";
exit 1
;;
*) echo "Invalid input"
;;
esac
நிரல விளக்கம்:
இந்நிரலமொனத ஒர பயனர் ஏற்கிறமொரமொ? மறக்கிறமொரமொ? என்படதக் பகட்டுப் சபறம் நிரலமொக அடமகிறத.
(an user is agreeing or disagreeing) பமொர்க்க மிக எளிடமயமொன நிரலமொக இரப்பினும், இத சகமொடுக்கப்படும்
உடரயிடன (checking the given text) செரிபமொர்க்க உதவுகிறத.
சவெளியீடு (Output):
# ./yorno.sh
Do you agree with this? [yes or no]: YES
Agreed
நிரல 51:

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -75- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


#!/bin/sh
# Wedding guest meals

# These variables hold the counters.


NUM_CHICKEN=0
NUM_STEAK=0
ERR_MSG=""

# This will clear the screen before displaying the menu.


clear

while :
do
# If error exists, display it
if [ "$ERR_MSG" != "" ]; then
echo "Error: $ERR_MSG"
echo ""
fi

# Write out the menu options...


echo "Chicken: $NUM_CHICKEN"
echo "Steak: $NUM_STEAK"
echo ""
echo "Select an option:"
echo " * 1: Chicken"
echo " * 2: Steak"
echo " * 3: Exit"

# Clear the error message


ERR_MSG=""

# Read the user input


read SEL

case $SEL in
1) NUM_CHICKEN=`expr $NUM_CHICKEN + 1` ;;
2) NUM_STEAK=`expr $NUM_STEAK + 1` ;;
3) echo "Bye!"; exit ;;
*) ERR_MSG="Please enter a valid option!"

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -76- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


esac

# This will clear the screen so we can redisplay the menu.


clear
done
நிரல விளக்கம்:
இத ஒர சமனு என்றடழக்கப்படைக்கூடிய, பயனர் பதர்ந்சதடுப்பமொன் (user menu) அடமப்பதற்கமொக
உதவும் நிரலமொகும். இதில நெமொம் ஏற்கனபவெ பமொர்த்த, சபமொழசதலமொம் கட்டைடள, இரந்தமொல கட்டைடள
ஆகியடவெயும் பயின்ற வெந்தளளன. நிரலிடன இயக்கிப்பமொர்த்த விடடையறிவும்.

கரலச்சசெமொற்கள:
பதர்வெமொடண – case statement
மற்றடவெ வெடகடம – default pattern
வெடக – pattern
தீர்வு வெரிக ள – solution or result statements
சபமொழசதலமொம் கட்டைடள – while statement
இரந்தமொல கட்டைடள – if statement
பயனர் பதர்ந்சதடுப்பமொன் – user menu
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -77- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட -14. பதர்வக் கடடரள
இருந்தமொல் கடடரள பவறபமொடுகள (case statement vs else if ladder)

பற்பல மதிப்புகள சபமொறப்பமொய் ஏற்கும்


இரந்தமொல கட்டைடள இயலபமொய்ச் சசெய்ய
மதிப்பு ஒன்டற மட்டும் ஏற்கும்
பதர்வுக் கட்டைடள திண்ணமமொய் விடரயுபம.
நிரற்பமொ -14

நிரற்பமொ விளக்கம்:
இரந்தமொல கட்டைடளயமொனத பற்பல மதிப்புகடள ஏற்கும் தன்டம சகமொண்டைதமொகும். பமலும் அத
செற்பற சமதவெமொகச் சசெயலபடும் தன்டம சகமொண்டைத. ஆனமொல பதர்வுக்கட்டைடளயமொனத ஒபர ஒர
மதிப்டப மட்டுபம தன்னகத்பத ஏற்கக்கூடியத. எனபவெ அத இரந்தமொல கட்டைடளயிடனக் கமொட்டிலும்
விடரவெமொகச் சசெயற்படைக்கூடியத. இத அடனத்த வெடகயமொன உயர் நிடல சமமொழிகளுக்கும் சபமொரந்தம்.
இரப்பினும், ஒன்றிற்கு பமற்பட்டை மமொறிகடளக் சகமொண்டு பதர்வுக் கட்டைடளயிடன நெமொம் சுற்றி
வெடளத்த ஒன்றிற்கு பமற்பட்டை மதிப்புக்கடள இரத்தி இயக்கலமொம்.
இத சதமொடைர்பமொக உளள நிரலகடள இப்சபமொழத கமொணலமொம். முதலில இரந்தமொல
ஏணிக்கட்டைடளயிடனக் (else if ladder command in shell script) கமொணலமொம்.
நிரல 52:
#!/bin/bash
#niral52.sh
#example for elif ladder in shell script
read -p "Enter value of i :" i

if [ $i -eq 5 ]
then
echo "Value of i is 5"
elif [ $i -eq 10 ]
then
echo "Value of i is 10"
elif [ $i -eq 20 ]
then
echo "Value of i is 20"
elif [ $i -eq 30 ]
then

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -78- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


echo "Value of i is 30"
else
echo "Value of i is not equal to 5,10,20 or 30"
fi
நிரல விளக்கம்:
இந்நிரலில ஒர மதிப்பமொனத உளளீடைமொகப் சபறப்படுகிறத. அத ஒவ்சவெமொர கட்டுப்பமொடுகளமொகச்
செரிபமொர்த்த உரிய கட்டுப்பமொடு நிடறவெடடைந்தவுடைன் அதற்குரிய கட்டைடள வெரிகடளச் சசெய்கிறத. இங்கு
ஒவ்சவெமொர கட்டுப்பமொடுகடளயும் செரிபமொர்ப்பதமொல, கண்டிப்பமொக பநெரமமொனத செற்பற அதிகம் பிடிக்கக்
கூடும். இரப்பினும், இடதச் சசெய்வெத கணினி என்பதமொல அத பயனரக்குத் சதரிய வெமொய்ப்பிலடல. ஒர
நிரலரின் (programmer) பமொர்டவெயில இடதப்பமொர்க்கும் சபமொழத, கணினியும் விடரவெமொகச் சசெயலபடை
பவெண்டும். விடடையும் உகந்த (optimal answers or optimal results) முடறயில கிடடைக்க பவெண்டும். பயனர்
பதமொழடமயுடைனும் இரக்க பவெண்டும் என்படவெகபள முதன்டமயமொக இரக்க பவெண்டும்.
நிரல 53:
#!/bin/bash
#niral53.sh
#script to find the greatest of the given three numbers
read -p "Enter value of i :" i
read -p "Enter value of j :" j
read -p "Enter value of k :" k
if [ $i -gt $j ]
then
if [ $i -gt $k ]
then
echo "i is greatest"
else
echo "k is greatest"
fi
else
if [ $j -gt $k ]
then
echo "j is greatest"
else
echo "k is greatest"
fi
fi
நிரல விளக்கம்:
இங்கு இரந்தமொல இலடல கூடு (nested if statement) சகமொண்டு குறநிரலமொனத எழதப்பட்டுளளத.
இங்கு மூன்ற உளளீடுகள சபறப்படுகின்றன. அடவெ ஒவ்சவெமொன்றமொக ஒப்பிட்டுப்பமொர்க்கப்பட்டு,
சவெளியீடுகள தரப்படுகின்றன. இங்கு ஒர இரந்தமொல கட்டைடளக்குளபள மற்சறமொர இரந்தமொல

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -79- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


கட்டைடள சகமொண்டு அடமவெதமொல, இத கூடு என்ற அடழக்கப்படுகிறத. இதவும், பதர்வுக்கட்டைடளடய
விடை சமதவெமொகபவெ சசெயலபடும்.
நிரல 54:
#!/bin/bash
#niral54.sh
printf 'Which Linux distribution do you know? '
read DISTR
case $DISTR in
ubuntu)
echo "I know it! It is an operating system based on Debian."
;;
centos|rhel)
echo "Hey! It is my favorite Server OS!"
;;
windows)
echo "Very funny..."
;;
*)
echo "Hmm, seems i've never used it."
;;
esac
நிரல விளக்கம்:
இங்கு பதர்வுக்கட்டைடளயமொனத மிகவும் எளிடமயமொகப் பயன்படுத்தப் பட்டிரக்கிறத. இங்கு
$DISTR என்ற ஒபர ஒர மதிப்டப மட்டுபம பதர்வுக்கட்டைடள சகமொண்டு சசெயலபடுகிறத. இங்கு
சவெவ்பவெறமொன உளளீடுகளுக்கு ஏற்றவெமொற சவெளியீடுகள கிடடைக்கின்றன. ஐந்த முடற நிரலிடன
இயக்கி அதற்பகற்ற சவெளியீடுகள கீபழ சகமொடுக்கப்பட்டுளளன. கண்டிப்பமொக இந்த நிரலமொனத
இரந்தமொல கட்டைடள (if statement script) சகமொண்டை நிரலிடன விடை விடரவெமொக இயங்கும். ஏசனனில,
இங்கு குறநிரலின் ஒர பகுதி இயங்கிய பின் ;; குறியீடுகள நிரலிடன நிறத்தி சவெளியீட்டிடனத்
தரகிறத.
நெலல டகபதர்ந்த நிரலர்கள (experienced programmers) பல இரந்தமொல கட்டைடளகடளப் (many if
statements) பயன்படுத்தவெடதத் தவிர்த்த, ஒர பதர்வுக்கட்டைடளடயப் (only one case statement)
பயன்படுத்தி நிரல எழதி விடரவெமொக சசெயலபமொட்டிடன முடித்த விடுவெமொர்கள.
நிரல சவெளியீடு:
# ./testcase.sh
Which Linux distribution do you know? centos
Hey! It is my favorite Server OS!
# ./testcase.sh
Which Linux distribution do you know? rhel
Hey! It is my favorite Server OS!

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -80- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


# ./testcase.sh
Which Linux distribution do you know? ubuntu
I know it too! It is an operating system based on Debian.
# ./testcase.sh
Which Linux distribution do you know? windows
Very funny...
# ./testcase.sh
Which Linux distribution do you know? pfff
Hmm, seems i've never used it.
நிரல 55: (multiple values)
#!/bin/bash
NOW=$(date +"%a")
case $NOW in
Mon)
echo "Full backup";;
Tue|Wed|Thu|Fri)
echo "Partial backup";;
Sat|Sun)
echo "No backup";;
*) ;;
esac
நிரல விளக்கம்:
இங்கு பதர்வுக்கட்டைடளயிலும் ஒன்றக்கு பமற்பட்டை மதிப்புக்கடளச் சுற்றிவெடளத்த
சகமொடுக்கப்பட்டுளளத. | என்ற குறியீடு அலலத என்படதக் குறிப்பதமொக அடமகிறத. $NOW என்ற
மமொறியிலும் ஒர மதிப்பு கணக்கிட்டு இரத்தப்பட்டுளளத. இபத நிரலிடன இரந்தமொல கட்டைடள (if
statement) சகமொண்டு இயக்கிப்பமொர்க்கவும். சறிய நிரல (small scripts) என்பதமொல நிரலர்களுக்கு நிரல
சவெளியீடும் விடரவு சதரியமொத. இபத கட்டைடளகள சபரிய நிரலுக்குக் (big scripts) சகமொடுக்கப்படும்
சபமொழத கண்டிப்பமொக பதர்வுக் கட்டைடளயமொனத (case statement) இரந்தமொல கட்டைடளடயக் (if statement)
கமொட்டிலும் விடரவெமொகச் சசெயலபடுவெத சதரியும்.

கரலச்சசெமொற்கள:
பற்பல மதிப்புகள – multiple values
இரந்தமொல கட்டைடள – if statement
பதர்வுக் கட்டைடள – case statement
திண்ணமமொய் – sure activity
உகந்த விடடைகள - optimal answers
இரந்தமொல இலடல கூடு - nested if statement
டகபதர்ந்த நிரலர்கள - experienced programmers
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -81- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட -15. சுழற்சயில்
முறிவக்கடடரள (break statement in loop)

நிரலில சசெயலகள பநெர்படை ஓடை


பவெண்டிய வெண்ணம் விடடைகள கிடடைத்ததம்
சுழற்சக் கட்டைடள சசெயடலத் தடுத்த
உந்தி சவெளிவெர உதவும் முறிபவெ.
நிரற்பமொ -15

நிரற்பமொ விளக்கம்:
குறிப்பிட்டை நிரலில பதடவெயமொன கட்டைடளகள வெரிடசெயில ஓடி, பவெண்டிய விடடைகள கிடடைத்ததம்,
சுழற்சக் கட்டைடளயமொனத (loop statement – while, until or for loop) தடுத்த நிறத்தப்பட்டு அந்தக் குறிப்பிட்டை
சுழற்சயிலிரந்த, சவெளிவெர உதவுவெபத முறிவுக் கட்டைடளயமொகும் (break command). பின்வெரம் நிரலகள
இவ்வெடக முறிவுக்கட்டைடளகடள எவ்வெமொற பயன்படுத்தவெத என்படத விளக்குவெதமொக அடமகின்றன.
நிரல 56:
#!/bin/sh
#niral56.sh
a=0
while [ $a -lt 10 ]
do
echo $a
if [ $a -eq 5 ]
then
break
fi
a=`expr $a + 1`
done
நிரல விளக்கம்:
இந்த நிரலில குறிப்பிட்டை சுழற்சக் கட்டைடளயமொனத, 10 முடற சசெய்ய கட்டைடள பிறப்பித்திரந்தமொலும்,
அத 5 முடற முடிந்ததபம முறிக்கப்படுகிறத. எனபவெ சவெளியீடைமொனத 5 எண்கள வெடரக்குபம
வெரகின்றத.
நிரல சவெளியீடு:
#./niral56.sh
0

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -82- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


1
2
3
4
5
நிரல 57:
#!/bin/sh
#niral57.sh
for var1 in 1 2 3
do
for var2 in 0 5
do
if [ $var1 -eq 2 -a $var2 -eq 0 ]
then
break 2
else
echo "$var1 $var2"
fi
done
done
நிரல விளக்கம்:
இந்த நிரலிலும் இரண்டு வெடகயமொன ஆகக் கட்டைடளகள உளளன(two different for statement). அதிலிரந்த
குறிப்பிட்டை சசெயல முடிந்தவுடைன் அபத பபமொலபவெ முறிவுக்கட்டைடளயமொனத (break command) நிரலிடன
முறித்த சவெளியீட்டிடனத் தரகின்றத.
நிரல சவெளியீடு:
#./niral57.sh
10
15
நிரல 58:
#!/bin/bash
#niral58.sh
# This script provides wisdom
# You can now exit in a decent way.
FORTUNE=/usr/games/fortune
while true; do
echo "On which topic do you want advice?"
echo "1. politics"
echo "2. startrek"
echo "3. kernelnewbies"

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -83- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


echo "4. sports"
echo "5. bofh-excuses"
echo "6. magic"
echo "7. love"
echo "8. literature"
echo "9. drugs"
echo "10. education"
echo

echo -n "Enter your choice, or 0 for exit: "


read choice
echo
case $choice in
1)
$FORTUNE politics
;;
2)
$FORTUNE startrek
;;
3)
$FORTUNE kernelnewbies
;;
4)
echo "Sports are a waste of time, energy and money."
echo "Go back to your keyboard."
echo -e "\t\t\t\t -- \"Unhealthy is my middle name\" Soggie."
;;
5)
$FORTUNE bofh-excuses
;;
6)
$FORTUNE magic
;;
7)
$FORTUNE love
;;
8)
$FORTUNE literature
;;

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -84- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


9)
$FORTUNE drugs
;;
10)
$FORTUNE education
;;
0)
echo "OK, see you!"
break
;;
*)
echo "That is not a valid choice, try a number from 0 to 10."
;;
esac
done
நிரல விளக்கம்:
இங்கு நெமொம் குறிப்பிட்டுப் பமொர்க்க பவெண்டிய ஒர அணியமொனத (beauty of the break statement),
முறிவுக்கட்டைடளயமொனத, ஒர சுழற்சக்கட்டைடளயிலிரந்த மட்டுபம கட்டுப்பமொட்டிடன சவெளிவெரச்
சசெய்கிறத ஒர முழ நிரலிலிரந்த அலல என்படதத் சதளிவு படுத்திக் சகமொளள பவெண்டும். இத இந்த
நிரலில நெமொம் கூடுதலமொகக் சகமொடுத்தளள echo கட்டைடளயின் மூலம் சசெயல விளக்கம்
சசெய்யப்பட்டுளளத. (This echo will also be executed upon input that causes break to be executed (when the user
types "0")). இந்த நிரலின் சவெளியீடைமொனத பயனர் சகமொடுக்கும் உளளீட்டிடனப் சபமொறத்த, ஒர சல
வெரிகள வெரலமொம் அலலத பிடழச் சசெய்தியமொக நெமொம் echo கட்டைடளயில சகமொடுத்தளள (echo "That is not a
valid choice, try a number from 0 to 10.") சவெளியீடும் வெரலமொம்.
நிரல சவெளியீடு:
#./niral58.sh
நிரலிடன இயக்கி பவெண்டிய வெண்ணம் உளளீடு சகமொடுத்த அதற்பகற்றமொற் பபமொன்ற வெரம்
சவெளியீட்டிடனக் கமொண்க.

கரலச்சசெமொற்கள:
பநெர்படை ஓடை – running sequentially
சுழற்சக் கட்டைடள – loop statement
உந்தி சவெளிவெர – jump and come out
முறிபவெ – break
முறிவுக்கட்டைடள – break statement
பயனர் உளளீடு – user input
அணி – beauty
கட்டுப்பமொடு – control

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -85- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெயல விளக்கம் – demonstration
சசெயலபமொடு - execution
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -86- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட -16. சுழற்சயில் சதமொடர்
கடடரள அல்லது இரடவிடமொக் கடடரள (continue statement in loop)

பணித்த பவெடல பண்புற நிடறவுற


வெடளவுக் கட்டைடள வெழியில விடரய
இடடையில புகும் இடடைவிடைமொக் கட்டைடள
தன்வெழி சசெலவெடத சதமொடைர்ந்த நீட்டுபம.
நிரற்பமொ -16

நிரற்பமொ விளக்கம்:
சகமொடுக்கப்பட்டை பவெடலயமொனத நெலல முடறயில முடிக்கப்படை வெடளவுக் கட்டைடளயமொனத தனக்கு
பணிக்கப்பட்டை வெழியில சசென்ற சகமொண்டிரக்கும் சபமொழத, இடடையில புகும் சதமொடைர் கட்டைடள
அலலத இடடைவிடைமொக் கட்டைடள, (continue statement) வெடளவுக் கட்டைடளயிடன தன்வெழியில இழத்த
தனக்குப் பிறகு உளள கட்டைடளகடளச் சசெய்ய விடைமொமல, மண்டும் சதமொடைக்கத்திலிரந்த சசெய்ய
டவெக்கும்.
சபமொதவெடமவு (General syntax:)
சதமொடைர் கட்டைடளயமொனத தனத சபமொதவெடமவிடன பின்வெரம் வெண்ணம் இரண்டு வெடகயமொகக்
சகமொண்டுளளத.
continue
continue n
எடுத்தக்கமொட்டுகள (examples):
...
..
for i in something
do
[ condition ] && continue
cmd1
cmd2

done
..
...
...
..
while true

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -87- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


do
[ condition1 ] && continue
cmd1
cmd2
[ condition2 ] && break
done
..
...
நிரல 59:
#!/bin/bash
#niral61.sh
x=0
while [ $x -le 5 ]
do
echo "Before continue : $x"
x=`expr $x + 1`
continue
echo "After continue : $x"
done
echo "While loop finished"
நிரல விளக்கம்:
இங்கு சதமொடைர்புக் கட்டைடளயமொனத எவ்வெமொற ஒர சற நிரலில பயன்படுத்தப் படுகின்றத என்பத
விளக்கப்பட்டுளளத. continue command வெரவெதமொல echo "After continue : $x" இந்தக் கட்டைடளயின்
சவெளியீடு வெரமொமபலபய இரக்கிறத.
நிரல சவெளியீடு:
Before continue : 0
Before continue : 1
Before continue : 2
Before continue : 3
Before continue : 4
Before continue : 5
While loop finished
நிரல 60:
#!/bin/sh
#niral 59.sh
#mysql backup script
#Must be run as the root user
MUSER="admin" # MySQL user
MHOST="192.168.1.100" # MySQL server ip

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -88- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


MPASS="MySQLServerPassword" # MySQL password

# format dd-mm-yyyy
NOW=$(date +"%d-%m-%Y")

# Backupfile path
BPATH=/backup/mysql/$NOW
# if backup path does not exists, create it
[ ! -d $BPATH ] && mkdir -p $BPATH
# get database name lists
DBS="$(/usr/bin/mysql -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do
# Bakcup file name
FILE="${BPATH}/${db}.gz"

# skip database backup if database name is adserverstats or mint


[ "$db" == "adserverstats" ] && continue
[ "$db" == "mint" ] && continue

# okay lets dump a database backup


/usr/bin/mysqldump -u $MUSER -h $MHOST -p$MPASS $db | /bin/gzip -9 > $FILE
done
நிரல விளக்கம்:
நிரலில எவ்வெமொற தரவுத்தளத்தில உளளடவெ கமொப்புப்படி சசெய்வெத என்பத குறித்த
சகமொடுக்கப்பட்டுளளத. இங்கு குறிப்பிட்டை இரண்டு சபயர்களில தரவுத்தளமமொனத
பசெமிக்கப்பட்டிரந்தமொல அடவெகடள விட்டுவிடும்படி பணிக்கப்பட்டுளளத. தரவுத்தளங்களின்
சபயர்கள adserverstats or mint இரந்தமொல அடவெகள கமொப்புப்படி சசெய்யப்படை மமொட்டைமொத. ஆனமொல இந்த
வெடளவுக் கட்டைடளயிலிரந்த கட்டுப்பமொடைமொனத சவெளிவெரமொமல சதமொடைர்ந்த அடுத்த தரவுத்தளத்திடன
கமொப்புப்படி எடுக்கச் சசென்ற விடும். அதற்கமொகபவெ சதமொடைர் கட்டைடள இங்கு சகமொடுக்கப்பட்டுளளத.
நிரல சவெளியீடு:
இந்நிரலமொனத டமஎஸ்கியுஎல தரவுத்தளத்திடன அடிப்படடையமொகக் சகமொண்டு எழதப்பட்டுளளத.
ஆதலமொல, முதலில தரவுத்தளத்திடன நிறவுதல சசெய்த பின்பு இந்நிரடல இயக்கிப் பமொர்க்கவும்.
இலடலசயனில, பிடழச்சசெய்தி கிடடைக்கும்.
நிரல 61:
#!/bin/bash
#niral61.sh
# convert all domain names to a lowercase
DOMAINS="$(echo $@|tr '[A-Z]' '[a-z]')"

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -89- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


# Path to named.conf
NAMEDCONF="/var/named/chroot/etc/named.conf"
# Check named.conf for error
NAMEDCHEKCONF="/usr/sbin/named-checkconf -t /var/named/chroot/"
# Display usage and die
if [ $# -eq 0 ]
then
echo "Usage: $0 domain1 domain2 ..."
exit 1
fi

# okay use for loop to process all domain names passed


# as a command line args
for d in $DOMAINS
do
# if domain already exits, skip the rest of the loop
grep $d $NAMEDCONF >/dev/null
if [ $? -eq 0 ]
then
echo "$d exits in in $NAMEDCONF, skiping ..."
continue # skip it
fi

# else add domain to named.conf


echo "Adding domain $d to $NAMEDCONF..."

echo "zone \"${d}\" {" >> $NAMEDCONF


echo " type master;" >> $NAMEDCONF
echo " file \"/etc/named/master.${d}\";" >> $NAMEDCONF
echo " allow-transfer { slaveservers; };" >> $NAMEDCONF
echo "};" >> $NAMEDCONF

# Run named configuration file syntax checking tool


$NAMEDCHEKCONF >/dev/null
if [ $? -ne 0 ] # error found?
then
echo "**** Warning: named-checkconf - Cannot reload named due to errors for $d ****"
else

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -90- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


echo "**** Domain $d successfully added to $NAMEDCONF ****"
fi
done
நிரல விளக்கம்:
இங்கு சகமொடுக்கப்பட்டுளள சடைமொடமன்கடள (சபயர்கடள), சபரிய எழத்திலிரந்த, சறிய எழத்தமொக
மமொற்றம் வெண்ணம் நிரல அடமந்தளளத. சடைமொடமனமொனத, ஏற்கனபவெ பகமொப்பில அடமந்திரப்பின்,
அடத சுழற்சக் கட்டைடள கண்டுசகமொளளமொமல விட்டுவிட்டு அடுத்த சடைமொடமடனப் பமொர்க்க பவெண்டும்.
அதற்கமொக இங்கு சதமொடைர்புக் கட்டைடள சகமொடுக்கப்பட்டுளளத. இங்கு $# என்பத கட்டைடள வெரி
மதிப்புக்கடளக் குறிக்கிறத. நிரலிடன இயக்கும் சபமொழத பின்வெரமமொற கட்டைடள சகமொடுத்த இயக்க
பவெண்டும்.
#./niral61.sh SOMETHING.COM SOMETHING1.COM
நிரல சவெளியீடு:
டி.என்.எஸ். வெழங்கி நிறவெப்பட்டுளள சபமொறிகளில மட்டுபம இயங்கக் கூடிய ஒர நிரலமொகும். பவெற
சபமொறிகளில இயக்க பிடழச்சசெய்தி கிடடைக்கும்.

கரலச்சசெமொற்கள:
பணித்த பவெடல – given task
பண்புற நிடறவுற – carried out fully
வெடளவுக் கட்டைடள – loop statement
இடடைவிடைமொக் கட்டைடள – continue statement
சதமொடைர்ந்த நீட்டுபம – to be continued automatically
கமொப்புப்படி – backup
கட்டைடள வெரி மதிப்புக்கள – command line arguments
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -91- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட -17 கடடரளவரி
அளவருக்களஅல்லதுகடடரளவரிதருமதிப்புக்கள (command line
parameters or command line arguments)

அளவுர சகமொண்டு அணிசசெய முடனவெதமொல


தனிப்பயன் ஆகிய தன்னிரல வெரிகள
இயக்க பநெரம் ஈனும் மதிப்புக்
சகமொண்டு விடடைகள சகமொடுத்திடை வெரபம.
நிரற்பமொ -17

நிரற்பமொவிளக்கம்:
அளவுர சகமொண்டு ஒர நிரடல அழகுற அடமக்க முற்படுவெதமொல, சபமொதப்பயன் சகமொண்டை நிரல வெரிகள
தனிப்பயன் சகமொண்டை வெரிகளமொக மமொறி அடனவெரக்கும் பயன்படும் வெடகயில அடமவுரம். இயக்க
பநெரத்தில சகமொடுக்கப்படும் மதிப்புக்கடள எடுத்தக்சகமொண்டு, அதற்பகற்றமொற்பபமொன்ற விடடைகள தரம்.

சபமொதவெடமவு (General syntax):


கீபழ, அளவுரக்கள பயன்படுத்தம் விதம் அதனத விளக்கங்கள உளளன.
1. $0 இத நிகழம் நிரலிடனக் குறிக்கிறத. (The name the script was invoked with. This may be a basename
without directory component, or a path name. This variable is not changed with subsequent shift commands.)
2. $1, $2, $3, ... இத ஒன்ற இரண்டு மூன்ற என்ற அளவுரக்கடள அலலத, தரமதிப்புக்கடள
எடுத்தக் சகமொளகிறத. (The first, second, third, ... command line argument, respectively. The argument may
contain whitespace if the argument was quoted, i.e. "two words".)
3. $# இத எத்தடன தரமதிப்புக்கள உளளன என நிரலுக்குத் தரகிறத. இதில $0 என்பத
எடுத்தக்சகமொளளப்படுவெதிலடல. (Number of command line arguments, not counting the invocation name
$0)
4. $@ இத தரமதிப்புக்கடள அபத வெரிடசெயில தரகிறத. ("$@" is replaced with all command line
arguments, enclosed in quotes, i.e. "one", "two three", "four". Whitespace within an argument is preserved.)
5. $* இதவும் தரமதிப்புக்கடள தரகிறத. சவெற்றிடைத்டதயும் (including spacebar) விட்டுவிடைமொமல
இத பசெர்த்தக்சகமொளகிறத. ($* is replaced with all command line arguments. Whitespace is not preserved, i.e.
"one", "two three", "four" would be changed to "one", "two", "three", "four". This variable is not used very often,
"$@" is the normal case, because it leaves the arguments unchanged.)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -92- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல 62:
#!/bin/bash
#niral62.sh
# use predefined variables to access passed arguments
#echo arguments to the shell
echo $1 $2 $3 ' -> echo $1 $2 $3'

# We can also store arguments from bash command line in special array
args=("$@")
#echo arguments to the shell
echo ${args[0]} ${args[1]} ${args[2]} ' -> args=("$@"); echo ${args[0]} ${args[1]} ${args[2]}'

#use $@ to print out all arguments at once


echo $@ ' -> echo $@'

# use $# variable to print out


# number of arguments passed to the bash script
echo Number of arguments passed: $# ' -> echo Number of arguments passed: $#'
நிரலவிளக்கம்:
பமபல உளள நிரலில இயக்க பநெரத்தில தரப்படும் அளவுரக்கள அலலத தரமதிப்புக்கள ஒர அர்பர
என்றடழக்கக் கூடிய மமொறியில இரத்தி டவெக்கப்படுகின்றன.
இங்கு மூன்ற தரமதிப்புக்கள மட்டுபம சகமொடுக்கப்பட்டுளளன. இபத பபமொன்ற அதிகமமொன
தரமதிப்புக்கடளயும் சகமொடுக்கலமொம்.
நிரலசவெளியீடு:
இந்த நிரல எளிடமயமொனத. எனபவெ சகமொடுக்கப்பட்டுளள வெரிகடளக் சகமொடுத்த இயக்கிப்பமொர்த்த
விடடை கமொணவும்.

நிரல 63:
#!/bin/bash
#niral63.sh
echo "Positional Parameters"
echo '$0 = ' $0
echo '$1 = ' $1
echo '$2 = ' $2
echo '$3 = ' $3

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -93- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரலவிளக்கம்:
இங்கு மூன்ற உளளீடுகள சகமொடுக்கப்பட்டுளளன. அடவெ பின்வெரமமொற
some_program word1 word2 word3
$0 would contain "some_program"
$1 would contain "word1"
$2 would contain "word2"
$3 would contain "word3"
நிரலசவெளியீடு:
நிரடல இயக்கும் சபமொழத மூன்ற உளளீடுகடள பின்வெரமமொற சகமொடுக்க பவெண்டும்.
#./niral63.sh one two three
நிரல 64:
#!/bin/bash
#niral64.sh
if [ "$1" != "" ]; then
echo "Positional parameter 1 contains something"
else
echo "Positional parameter 1 is empty"
fi
நிரலவிளக்கம்:
இங்கு சகமொடுக்கப்பட்டை நிரலமொனத செரியமொன உளளீடுகடள ஏற்றளளதமொ என இயக்க பநெரத்தில
செரிபமொர்க்கப்படுகிறத.
நிரலசவெளியீடு:
#./niral64.sh
சகமொடுக்கப்பட்டை உளளீட்டிடனப் சபமொறத்த சவெளியீடைமொனத அளிக்கப்படும்.

நிரல 65:
#!/bin/bash
#niral65.sh
if [ $# -gt 0 ]; then
echo "Your command line contains $# arguments"
else
echo "Your command line contains no arguments"
fi
நிரலவிளக்கம்:
இந்நிரலமொனத, அளவுரக்கள சகமொடுக்கப்பட்டுளளனவெமொ, அடவெ என்சனன்ன என்படதக் கண்டைறியும்
வெண்ணம் அடமக்கப்பட்டுளளத.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -94- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல 65:
கீழ்க்கமொணும் நிரலிடனச் சசெய்த பமொர்த்த விடடையறிய முயலுக.
#!/bin/bash
#niral66.sh
echo "You start with $# positional parameters"

# Loop until all parameters are used up


while [ "$1" != "" ]; do
echo "Parameter 1 equals $1"
echo "You now have $# positional parameters"

# Shift all the parameters down by one


shift
done

கரலச்சசெமொற்கள:
கட்டைடளவெரி அளவுரக்கள - command line parameters
கட்டைடளவெரி தரமதிப்புக்கள- command line arguments
அளவுர – parameters
அணிசசெய – decorate or write
தனிப்பயன் – customized
தன்னிரல – personal script
இயக்க பநெரம் – run time
ஈனும் மதிப்பு – given value
விடடைகள - output

(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -95- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட -18.கடடரளவரி
அளவருக்கள அல்லது கடடரளவரி தருமதிப்புக்கள (command line
parameters or command line arguments) - சதமொடர்ச்ச

தனியர் சசெய்த தவெறிலமொ நிரலகள


நெலல பயடன நீட்டித் தந்திடின்
பயன்பமொடு அடனத்தம் பயனர் சபற்றிடை
அளவுரக் சகமொண்டு அடமத்திடை வெரபம.
- நிரற்பமொ 18

நிரற்பமொவிளக்கம்:
தனியமொக ஒரவெர் சசெய்யும் பிடழயற்ற நிரலமொனத, நெமொளடடைவில மமொறமொமல நீடித்த உடழக்குசமனில
அந்த நிரல சகமொடுக்கும் பயன்பமொட்டிடன அடனத்தப் பயனர்களும் சபற்றிடை அளவுர சகமொண்டு
அடமத்திடைல பவெண்டும்.

நிரல 66:
கீழ்க்கமொணும் நிரலமொனத மிகவும் சபரிய நிரலமொகும். இந்த நிரலமொனத, ஒர சபமொறியின்
தகவெலகடளத்திரட்டித் தரவெதமொக அடமகிறத. இந்தத் தகவெலகள அடனத்தம் ஒர HTML பகமொப்பமொக
அடமகின்றன.
இத சபரிய நிரலமொடகயமொல, அடவெ பகுக்கப்பட்டு சறசற நிரல தண்டுகளமொகக் (functions)
சகமொடுக்கப்பட்டுளளத. ஒவ்சவெமொர நிரல தண்டும் ஒவ்சவெமொர பவெடலடயச் சசெய்கிறத. குறிப்பிட்டை
பவெடலடயச் சசெய்த முடித்தவுடைன் main க்கு கட்டுப்பமொட்டிடனக் சகமொடுக்கிறத.

#!/bin/bash
#niral66.sh
# system_page - A script to produce a system information HTML file
##### Constants

TITLE="System Information for $HOSTNAME"


RIGHT_NOW=$(date +"%x %r %Z")
TIME_STAMP="Updated on $RIGHT_NOW by $USER"

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -96- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


##### Functions

function system_info
{
echo "<h2>System release info</h2>"
echo "<p>Function not yet implemented</p>"

} # end of system_info

function show_uptime
{
echo "<h2>System uptime</h2>"
echo "<pre>"
uptime
echo "</pre>"

} # end of show_uptime

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -97- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


function drive_space
{
echo "<h2>Filesystem space</h2>"
echo "<pre>"
df
echo "</pre>"

} # end of drive_space

function home_space
{
# Only the superuser can get this information

if [ "$(id -u)" = "0" ]; then


echo "<h2>Home directory space by user</h2>"
echo "<pre>"
echo "Bytes Directory"
du -s /home/* | sort -nr
echo "</pre>"
fi

} # end of home_space

function write_page
{
cat <<- _EOF_
<html>
<head>
<title>$TITLE</title>
</head>
<body>
<h1>$TITLE</h1>
<p>$TIME_STAMP</p>
$(system_info)
$(show_uptime)
$(drive_space)
$(home_space)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -98- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


</body>
</html>
_EOF_

function usage
{
echo "usage: system_page [[[-f file ] [-i]] | [-h]]"
}

##### Main

interactive=
filename=~/system_page.html

while [ "$1" != "" ]; do


case $1 in
-f | --file ) shift
filename=$1
;;
-i | --interactive ) interactive=1
;;
-h | --help ) usage
exit
;;
*) usage
exit 1
esac
shift
done

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -99- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


# Test code to verify command line processing

if [ "$interactive" = "1" ]; then


echo "interactive is on"
else
echo "interactive is off"
fi
echo "output file = $filename"

# Write page (comment out until testing is complete)

# write_page > $filename


இத ஒர சற திட்டை அறிக்டக (mini-project) பபமொன்றத. இங்கு பல நிரலகள ஒன்றடைன் ஒன்ற பிடணந்த
ஒர சபரிய நிரலமொகக் கமொணப்படுகிறத. இங்கு சபமொதவெமொக நெமொம் லினக்சு இயங்கு தளத்தில
பயன்படுத்தம் கட்டைடளகடளப் பயன்படுத்தி, அதன் மூலமமொக வெரம் சவெளியீட்டிடன HTML
பகமொப்பமொக மமொற்றி சவெளியீடைமொனத தரப்படுகிறத. சபமொதவெமொக சபரிய திட்டை அறிக்டககள (major projects)
கூடை இம்முடறயிபலபய தயமொரிக்கப்படுகின்றன.
நெமொம் பயன்படுத்தம் அடனத்த வெடகயமொன குற நிரலகடளயும், இதபபமொன்ற அளவுரக்கள (parameters)
அலலத தரமதிப்புக்கள (arguments) சகமொண்டு அடமத்திட்டைமொல எலலமொப் பயனரம் பயன்படுத்தி
விடடையறிய இயலும்.

கரலச்சசெமொற்கள:
தனியர் – single user
நெலல பயடன நீட்டித் தந்திடின் – working for a long run
பயன்பமொடு – usage, utilization
பயனர் – user
அளவுர – parameters
சற திட்டை அறிக்டக – mini project
சபரிய திட்டை அறிக்டககள – major projects
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -100- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட -19. உறக்கக் கடடரள
அல்லது தூக்கக் கடடரள (sleep command)

ஒன்றன் பின்பன ஒன்றமொய் வெந்திடும்


வெரிகள தமொபம வெரிடசெ நிற்க
இடடைசவெளி விட்டு எழந்த தூங்கி
பவெடல சசெய்ய டவெத்திடும் உறக்கபம.
-நிரற்பமொ 19

நிரற்பமொவிளக்கம்:
ஒன்றன் பின் ஒன்றமொக வெரிடசெயமொன முடறயில அடமந்த கட்டைடள வெரிகள, குறித்த கமொல
இடடைசவெளியிடன விட்டு மண்டும் விட்டை வெரிகடளத் சதமொடைர்ந்த சசெய்ய உதவி சசெய்வெபத தூக்கக் (sleep
command) கட்டைடளயமொகும்.
General syntax: (சபமொத அடமவு)
தூக்கக் கட்டைடளயின் சபமொத அடமவிடன கமொணலமொம்.
sleep NUMBER[SUFFIX]
Where SUFFIX may be:
s for seconds (the default)
m for minutes.
h for hours.
d for days.

sleep --help
sleep --version
இந்தக் கட்டைடளயின் வெமொயிலமொக, நெமொம் ஒர சநெமொடியிலிரந்த சல நெமொட்கள வெடர தூங்க டவெக்க (sleep state)
முடியும்.
To sleep for 5 seconds, use:
sleep 5
To sleep for 2 minutes, use:
sleep 2m
To sleep for 3 hours, use:
sleep 3h
To sleep for 5 days, use:
sleep 5d

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -101- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல 67:
#!/bin/bash
#niral67.sh
#this script explains how sleep works in shell script
echo "Hi, I'm sleeping for 5 seconds..."
sleep 5
echo "all Done."
நிரல விளக்கம்:
இந்த நிரலமொனத. சகமொடுக்கப்பட்டுளளத பபமொன்ற ஐந்த மணித்தளிகள உறங்கி விட்டு, அதன் பிறகு all
Done என்ற அச்சடும்.
./niral67.sh
நிரல 68:
#!/bin/bash
#niral68.sh
## run commmand1, sleep for 1 minute and finally run command2 ##
command1 && sleep 1m && command2

## sleep in bash for loop ##


for i in {1..10}
do
do_something_here
sleep 5s
done
நிரல விளக்கம்:
இந்த நிரலிபல, sleep கட்டைடளயமொனத எவ்வெமொற for என்னும் வெடளவுக் கட்டைடளயிபல
பயன்படுத்தப்படுகிறத என்பத விளக்கப்பட்டுளளத. do_something_here என்ற இடைத்திபல நெமக்குத்
பதடவெயமொன வெரிகடள உளளிட்டு நிரலிடன நிரப்பலமொம்.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -102- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல 69:
#!/bin/bash
#niral69.sh
# this script uses sleep command
## run while loop to display date and hostname on screen ##
while [ : ]
do
clear
tput cup 5 5
date
tput cup 6 5
echo "Hostname : $(hostname)"
sleep 1
done
நிரல விளக்கம்:
./niral68.sh என்ற கட்டைடள மூலம் இயக்கிப்பமொர்ப்பின், நிரலமொனத திடரயில பநெரம் (time) மற்றம்
சபமொறியின் சபயர் (hostname) ஆகியவெற்டற ஒர சநெமொடி கமொல இடடைசவெளியில
பமம்படுத்தவெடதக்(update) கமொணலமொம். இங்கு tput cup 5 5 என்பத திடரயில சவெளியீடு சவெளியிடைப்படை
பவெண்டிய இடைத்திடனக் குறிக்கிறத. sleep 1 என்பத ஒர சநெமொடித் தூக்கத்டதக் குறிக்கிறத.
நிரல 69:
#!/bin/bash
#niral69.sh
#run another script in the main script
i=1
while [ "$i" -ne 0 ]
do
i=./runEmailAgent
sleep 10
done
நிரல விளக்கம்:
இங்கு நெமொம் ஏற்கனபவெ எழதிய பவெசறமொர குறநிரடல (script), குறிப்பிட்டை கமொல இடடைசவெளியில
திரம்பத்திரம்ப அடழக்கும் முடறயமொனத விளக்கப்பட்டுளளத.
இதில, ./runEmailAgent என்பத ஏற்கனபவெ எழதியடமக்கப்பட்டை பவெசறமொர நிரலமொகும். அடத நெமொம்
இந்நிரலில ஒர வெடளவுக்கட்டைடளயினுள அடழக்கிபறமொம்.
நிரல 70:
#!/bin/sh
#niral76.sh
#shell script example
before="$(date +%s)"

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -103- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


echo $before
sleep 3
after="$(date +%s)"
echo $after
elapsed_seconds="$(expr $after - $before)"
echo Elapsed time for code block: $elapsed_seconds
நிரல விளக்கம்:
இதவும் sleep கட்டைடளயிடனப் பயன்படுத்திச் சசெய்யப்படும் ஓர் எடுத்தக்கமொட்டு நிரலமொகும். இதடனச்
சசெய்த பமொர்த்த விடடையறிய முயலுக.
./niral70.sh

குறிப்பு: இந்த நிரலகள அடனத்தம் அடனத்த வெடகயமொன இலினக்சு இயங்குதளங்களிலும் (Red Hat,
Ubuntu, Suse Linux, Debian, Pinguy, Linux mint) இயங்கும்.

கரலச்சசெமொற்கள:
தனியர் – single user
நெலல பயடன நீட்டித் தந்திடின் – working for a long run
பயன்பமொடு – usage, utilization
பயனர் – user
அளவுர – parameters
சற திட்டை அறிக்டக – mini project
சபரிய திட்டை அறிக்டககள – major projects
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -104- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட -20. அளவருக்கள
அல்லது தருமதிப்புக்கள (command line arguments or command line
parameters) சதமொடர்ச்ச

ஒன்றமொய்ச் சுழியம் ஒன்பத இறவெமொய்


எண்டணச் சுரளமொய் எடதயும் அடழத்திடும்
எண்ணுதல நிகசழண் ஒழங்கு சவெளிநிடல
பின்சனண் என்சறலமொம் பூத்திடும் அளவுபர!
- நிரற்பமொ 20

நிரற்பமொவிளக்கம்:
சுழியம் சதமொடைங்கி ஒன்பத முடிய அடனத்த வெடகயமொன எண்களும் $ என்ற குறியீட்டுடைன் பயன்படுத்தி
அவெற்றின் மதிப்புக்கடள நிரலில இரத்தலமொம். ஒன்பதிற்கு பமல உளள எண்கடள அடழக்கும்
சபமொழத சுரள அடடைப்புக்குறிகளுக்குள அடழக்க பவெண்டும். சுரள அடடைப்புக்குறிகளுக்குள (curly
braces) { } அடழக்க பவெண்டும். அளவுரக்களின் எண்ணிக்டக $# என்ற குறிப்பிலும் அளவுர ஒழங்கு $@
என்பதிலும், நிகழ் சசெயலமுடற எண் அலலத நிகசழண் $$ என்ற குறிப்பிலும், சவெளிபயறம் நிடல $?
என்பதிலும், கடைந்த பின்புல சசெயலமுடற எண் (பின்சனண்) $! என்பதிலும் உளளிரப்பமொக
இரத்தப்பட்டிரக்கும்.
நிரல 71
#!/bin/bash
#niral71.sh
If [ $# = 3 ]
Then
echo “$@”
else
echo “Args are not three”
fi
நிரல விளக்கம்:
இந்த நிரலில, சகமொடுக்கப்பட்டை அளவுரக்கள எந்த வெடகயில வெந்தளளன. அளவுரக்களின்
எண்ணிக்டக மூன்ற இரக்கிறதமொ என்பத அறியப்படுகிறத.
நிரல 72
#!/bin/bash
#niral72.sh
echo “Provide user name”
read i

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -105- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


a = `w | awk ‘{print $1}’ | sort –n | uniq | grep $i`
if [ “$i” = “$a” ]
then
echo “user logged in”
else
echo “user not logged in”
fi
நிரல விளக்கம்:
சகமொடுக்கப்பட்டை நிரலில, நெமொம் தரம் பயனர் சபயரமொனத, இப்சபமொழத உளநுடழந்த இரக்கிறதமொ
என்பத அறியப்படுகிறத. இங்கு நெமொம் குறிப்பிட்டு அறிய பவெண்டிய கட்டைடள வெரி a = `w | awk ‘{print $1}’
| sort –n | uniq | grep $i`
இததமொன்.
நிரல 73 - நிரல 72 (பதிப்பு 2)
#!/bin/bash
#niral73.sh
echo –n “Please enter a username:”
read user
a=`grep $user /etc/passwd`
b=`w | awk ‘{print $1}’ | grep $user`
if [ ! “$a” ]
then
echo “$user is not a valid user”
exit
elif [ “$b” ]
then
echo “$user is logged in”
else
echo “$user is not logged in”
fi
நிரல விளக்கம்:
இத 72 ஆம் நிரலில வெரம் அபத பவெடலடயத்தமொன் சசெய்கிறத. ஆனமொல இங்கு அளவுரவெமொனத
(arguments or parameters) டகயமொளப்படைமொமல மமொறியமொனத (variable) டகயமொளப்படுகிறத.
நிரல 74
#!/bin/bash
#niral74.sh
#script used to file exists or not
a=$1
if [ -e “$a” ]
then

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -106- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


echo “$a file exist & modification time is” `ls –ltr $a | awk ‘{print $8}’`
else
echo “$a file doesn’t exist”
fi
நிரல விளக்கம்:
இந்நிரலில, அளவுர அலலத தரமதிப்பின் மூலம் சகமொடுக்கப்படும் பகமொப்பமொனத குறிப்பிட்டை
இடைத்தில இரக்கிறதமொ என கண்டைறியப்படுகிறத.

நிரல 75

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -107- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


#!/bin/bash
#niral75.sh
# Call this script with at least 10 parameters, for example
# ./scriptname 1 2 3 4 5 6 7 8 9 10
MINPARAMS=10

echo

echo "The name of this script is \"$0\"."


# Adds ./ for current directory
echo "The name of this script is \"`basename $0`\"."
# Strips out path name info (see 'basename')

echo

if [ -n "$1" ] # Tested variable is quoted.


then
echo "Parameter #1 is $1" # Need quotes to escape #
fi

if [ -n "$2" ]
then
echo "Parameter #2 is $2"
fi

if [ -n "$3" ]
then
echo "Parameter #3 is $3"
fi
# ...you can add your own comments here for further reference
if [ -n "${10}" ] # Parameters > $9 must be enclosed in {brackets}.
then
echo "Parameter #10 is ${10}"
fi

echo "-----------------------------------"
echo "All the command-line parameters are: "$*""

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -108- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


if [ $# -lt "$MINPARAMS" ]
then
echo
echo "This script needs at least $MINPARAMS command-line arguments!"
fi

echo
exit 0
நிரல விளக்கம்:
குறிப்பிட்டை நிரலில குடறந்த அளவு பத்த அளவுரக்களமொவெத பயன்படுத்த பவெண்டும். (# Call this script
with at least 10 parameters, for example) இலடலசயனில நிரலில எதிர்பமொர்த்த சவெளியீடு (output)
கிடடைக்கமொத.

கரலச்சசெமொற்கள:
சுழியம் – Zero
ஒன்றமொய் – முதலமொய் (first)
இறவெமொய் – last
எண்டணச் சுரளமொய் – number in curly braces eg {333}
எடதயும் அடழத்திடும் – call anything
எண்ணுதல (எண்ணிக்டக) – count ($#)
நிகசழண் (நிகழ் சசெயலமுடற எண் $$) – current process id
ஒழங்கு - $@ arguments in the given order
சவெளிநிடல – exit status
பின்சனண் - கடைந்த பின்புல சசெயலமுடற எண் $! – Previous process id
அளவுபர - அளவுரபவெ
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -109- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட -21

தக்க சநெமொடியில தீர்வுற அடமந்திடும்


சபமொதவெமொய்ச் சசெய்திடும் பற்பல சசெயலகள
வெரிகள எங்ஙனம் வெந்தன என்படதப்
சபமொறத்பத அடமந்திடைல பயக்கும் நெலபம.
-நிரற்பமொ 21

நிரற்பமொவிளக்கம்:
பதடவெயமொனவெற்டற செரியமொன பநெரத்தில சசெய்த, விடடைகடள அளித்த செரியமொன முடறயில சசெயலகடள
நெடைத்திடை உதவுதல, ஒர நிரலில உளள கட்டைடளவெரிகள எவ்வெமொற அடமகின்றன என்படதப் சபமொறத்பத
அடமகிறத.
நிரல 76
#!/bin/bash
#niral76.sh
mkdir .recyclebin
mv $@ .recyclebin
echo –n “Please enter the filename to delete:”
read file
mv $file .recyclebin
நிரல விளக்கம்:
இந்நிரலமொனத ஒர கட்டைடளவெரி ரீடசெக்கிள பின் (recycle bin) பபமொன்ற சசெயலபடுகிறத. எந்த ஒர
பகமொப்பிடனயும் அழிப்பதற்கு நெமொம் rm கட்டைடளயிடனப் பயன்படுத்தபவெமொம். இங்கு .recyclebin என்பத
ஒர சபமொதவெமொன அடடைவு ஆகும். ஆனமொல அத ஒர recyclebin பபமொன்ற சசெயலபடுகிறத.
நிரல 77
#!/bin/bash
#niral77.sh
a=$1
if [ “$a” = L ]
then
ls –l .recyclebin
fi
if [ “$a” = D ]
then
echo –n “Please enter the filename to delete:”
read file

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -110- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


mv $file .recyclebin
fi
நிரல விளக்கம்:
இங்கும் பமற்கூறிய நிகழ்வெமொனத பவெற ஒர வெண்ணம் சசெயலபடுகிறத. இந்நிரல recycle bin நிரலின்
மற்சறமொர பதிப்பமொக எடுத்தக் சகமொளளலமொம்.
நிரல 78
#!/bin/bash
#niral78.sh
#this program used to convert the image format into png

for i in *.pcx ; do
CMD="convert -quality 625 $i `echo $i | sed -e 's/\.pcx$/.png/'`"
# Show the command-line to the user:
echo $CMD
# Execute the command-line:
eval $CMD
done
நிரல விளக்கம்:
இந்த நிரலமொனத, ImageMagick என்னும் சபமொதியிடன உளசளடுத்த அடமந்தளளத. இப்சபமொதியமொனத,
சகமொடுக்கப்பட்டை படைத்திடன, பவெசறமொர பகமொப்பு அடமவில (changing to png format) மமொற்றித்தர
உதவுகிறத. இத ஒபர கட்டைடளவெரி மூலம் பல படைங்களின் பகமொப்பு அடமவுகடள மமொற்றித் தரகிறத.
நிரல 79
#!/bin/bash
#niral79.sh
#To erase a file proper, requires writing random bytes into the disk blocks occupied by the file.
for i in * ; do
dd if=/dev/urandom \
of="$i" \
bs=1024 \
count=`expr 1 + \
\`stat "$i" | grep 'Size:' | awk '{print $2}'\` \
/ 1024`
done
நிரல விளக்கம்:
ஒபரஒர கட்டைடளவெரியமொனத புரிந்த சகமொளவெதற்கு ஏதவெமொக, மடித்த மடித்தக் சகமொடுக்கப்பட்டுளளத.
இங்பக ஒர குறிப்பிட்டை பகமொப்பில Random எண்ணமொனத இரத்தப்பட்டு ஏற்கனபவெ இரக்கும் சசெய்திகள
அழிக்கப்படுகின்றன. இத disk blocks கடள அழிக்கப்பயன்படுகிறத.
நிரல 80
#!/bin/sh

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -111- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


#niral80.sh
# Get the files:
FILES=`ls -1`

for FILE in $FILES


do
IDX=`expr index $FILE .`

if [ "$IDX" == 0 ]; then
IDX=`expr length $FILE`
else
IDX=`expr $IDX - 1`
fi

SUB=`expr substr $FILE 1 $IDX`


echo "Sub File: $SUB"
done
நிரல விளக்கம்:
நிரலமொனத, குறிப்பிட்டை string ஐ ஒர பகமொப்பில பதடை உதவுகிறத. நிரலிடனத் தட்டைச்சுச் சசெய்த
சவெளியீடு அறிய முயலுக.
நிரல 81
கீழ்க்கமொணும் இந்நிரடலச் சசெய்த பமொர்த்த விடடையறிய முயலுக. இந்நிரலமொனத, வெரடகப்பதிவுகள
எனப்படும் log பகமொப்புக்கடளக் கண்டு அவெற்டற முழவெதமமொக அழிக்கிறத. சபமொதவெமொகக் பகமொப்புக்கள
அழிக்கப்படும் சபமொழத அவெற்றின் உத்தரவு மட்டுபம பயனரக்கு மறக்கப்படுகின்றத. முழடமயமொக
அடவெ அழிக்கப்படுவெதிலடல. எனபவெ பவெற ஏபதனும் சமன்சபமொரட்கள மூலம் இழந்த தரவுகள
மட்கப்படுகின்றன. இந்நிரல மூலம் நெமொம் முழடமயமொகக் பகமொப்புக்கடள அழிக்க முடியும்.
#!/bin/bash
# niral81.sh
# Warning:
# This script uses quite a number of features that will be explained
#+ later on.
# By the time you've finished the first half of the book,
#+ there should be nothing mysterious about it.
LOG_DIR=/var/log
ROOT_UID=0 # Only users with $UID 0 have root privileges.
LINES=50 # Default number of lines saved.
E_XCD=86 # Can't change directory?
E_NOTROOT=87 # Non-root exit error.
# Run as root, of course.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -112- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


if [ "$UID" -ne "$ROOT_UID" ]
then
echo "Must be root to run this script."
exit $E_NOTROOT
fi

if [ -n "$1" ]
# Test whether command-line argument is present (non-empty).
then
lines=$1
else
lines=$LINES # Default, if not specified on command-line.
fi
# Stephane Chazelas suggests the following,
#+ as a better way of checking command-line arguments,
#+ but this is still a bit advanced for this stage of the tutorial.
#
# E_WRONGARGS=85 # Non-numerical argument (bad argument format).
#
# case "$1" in
# "" ) lines=50;;
# *[!0-9]*) echo "Usage: `basename $0` lines-to-cleanup";
# exit $E_WRONGARGS;;
# * ) lines=$1;;
# esac
#
#* Skip ahead to "Loops" chapter to decipher all this.
cd $LOG_DIR
if [ `pwd` != "$LOG_DIR" ] # or if [ "$PWD" != "$LOG_DIR" ]
# Not in /var/log?
then
echo "Can't change to $LOG_DIR."
exit $E_XCD
fi # Doublecheck if in right directory before messing with log file.

# Far more efficient is:


#
# cd /var/log || {
# echo "Cannot change to necessary directory." >&2

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -113- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


# exit $E_XCD;
#}
tail -n $lines messages > mesg.temp # Save last section of message log file.
mv mesg.temp messages # Rename it as system log file.
# cat /dev/null > messages
#* No longer needed, as the above method is safer.
cat /dev/null > wtmp # ': > wtmp' and '> wtmp' have the same effect.
echo "Log files cleaned up."
# Note that there are other log files in /var/log not affected
#+ by this script.

exit 0
# A zero return value from the script upon exit indicates success
#+ to the shell.

கரலச்சசெமொற்கள:
தக்க சநெமொடியில – proper time
தீர்வுற அடமந்திடும் – solving issues
சபமொதவெமொய்ச் சசெய்திடும் பற்பல சசெயலகள – common tasks
வெரிகள எங்ஙனம் வெந்தன – order of the commands
சபமொதி - package

(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -114- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – 22 மமொற்றக் கடடரள
(shift command)

அடமந்த வெண்ணம் அளவுர இரக்க


நிரலின் பயன் சநெடிதமொய் ஆகுமமொம்
இன்னும் நீட்டி இனிபத பயனுற
உற்றழி வெந்த உதவிடும் மமொற்பற.
- நிரற்பமொ 22

நிரற்பமொவிளக்கம்:
நிரலில சகமொடுக்கப்பட்டை அளவுரக்கள அபத வெரிடசெயில அடமந்திரந்தமொல, அத அந்த நிரல
அடமத்தவெரக்கு மட்டுமின்றி, மற்ற பயனர்களுக்கும் பயனளிக்கும். அபத அளவுரக்கள, சநெடுங்கமொலம்
மற்ற பயனர்களுக்கும் உடழக்க மமொற்றக் கட்டைடளயிடனப் பயன்படுத்ததல சறந்தத.

நிரல 82
#!/bin/bash
#shift command in positional parameters
#niral82.sh

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -115- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


echo "Current command line args are: \$1=$1, \$2=$2, \$3=$3"
shift
echo "After shift command the args are: \$1=$1, \$2=$2, \$3=$3
நிரல விளக்கம்:
இத மமொற்றக் கட்டைடளயிடன எளிதில புரிந்த சகமொளவெதற்கமொக அடமக்கப்பட்டுளள எளிடமயமொன
நிரலமொகும். முதலில அளவுரக்கள சகமொடுக்கப்பட்டை வெரிடசெயிபலபய வெரகின்றன. மமொற்றக்
கட்டைடளயிடன சகமொடுத்த பிறகு, முதல அளவுர விடைப்பட்டு, இரண்டைமொம் அளவுரவிலிரந்த எடுத்தக்
சகமொளளப்படுகிறத.
Excute above script as follows:
# chmod +x shiftdemo.sh
# ./shiftdemo -f foo bar
Current command line args are: $1=-f, $2=foo, $3=bar
After shift command the args are: $1=foo, $2=bar, $3=
நிரல 83
#!/bin/bash
#niral83.sh
#using shift command
while [ "$1" ]
do
if [ "$1" = "-b" ]; then
ob="$2"
case $ob in
16) basesystem="Hex";;
8) basesystem="Oct";;
2) basesystem="bin";;
*) basesystem="Unknown";;
esac
shift 2
elif [ "$1" = "-n" ]
then
num="$2"
shift 2
else
echo "Program $0 does not recognize option $1"
exit 1
fi
done
output=`echo "obase=$ob;ibase=10; $num;" | bc`
echo "$num Decimal number = $output in $basesystem number system(base=$ob)""

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -116- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல விளக்கம்:
இந்த நிரலில shift 2 என்ற கட்டைடளயமொனத, சகமொடுக்கப்பட்டுளள அளவுரவிடன இரண்டு இடைம்
விட்டுத்தளளி அடுத்தளள அளவுரவிடன எடுத்த பயன்படுத்த உதவுகிறத. கீபழ சவெவ்பவெற
வெடகயமொன அளவுரக்களுக்கு சவெவ்பவெறமொன சவெளியீடுகள வெந்தளளடம சகமொடுக்கப்பட்டுளளத.
# chmod +x convert
# ./convert -b 16 -n 500
500 Decimal number = 1F4 in Hex number system(base=16)
# ./convert -b 8 -n 500
500 Decimal number = 764 in Oct number system(base=8)
# ./convert -b 2 -n 500
500 Decimal number = 111110100 in bin number system(base=2)
# ./convert -b 2 -v 500
Program ./convert does not recognize option -v
# ./convert -t 2 -v 500
Program ./convert does not recognize option -t
# ./convert -b 4 -n 500
500 Decimal number = 13310 in Unknown number system(base=4)
# ./convert -n 500 -b 16
500 Decimal number = 1F4 in Hex number system(base=16)

நிரல 84:

#!/bin/bash
#niral84.sh
# This script can clean up files that were last accessed over 365 days ago.

USAGE="Usage: $0 dir1 dir2 dir3 ... dirN"

if [ "$#" == "0" ]; then


echo "$USAGE"
exit 1
fi

while (( "$#" )); do

if [[ $(ls "$1") == "" ]]; then


echo "Empty directory, nothing to be done."
else

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -117- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


find "$1" -type f -a -atime +365 -exec rm -i {} \;
fi

shift

done

நிரல விளக்கம்:
இந்நிரல வெமொயிலமொக, நெமொம் 365 நெமொளுக்கு பமல உளள பகமொப்புக்கடள எளிடமயமொக அழிக்க முடியும்.
இங்கு மமொற்றக்கட்டைடளயமொனத எளிடமயமொக, அளவுரக்களமொகக் சகமொடுக்கப்பட்டை அடுத்தடுத்த
அடடைவுகடள எடுத்தமொளப்பயன்படுகிறத. இத்தடகய நிரலகள தமொனியங்கு நிரலகளமொக நிடறயப்
பயன்படுத்தப்படுகின்றன.
நிரல 85:
#!/bin/bash
#niral85.sh
if [ $# -lt 1 ]; then
echo "Usage: $0 package(s)"
exit 1
fi
while (($#)); do
yum install "$1" << CONFIRM
y
CONFIRM
shift
done

நிரல விளக்கம்:
இந்நிரல மூலமமொக நெமொம் ஒன்றிற்கு பமற்பட்டை சபமொதிகடள விடரவெமொக நிறவெ இயலும். (This is used to
install multiple packages at once.) ஒவ்சவெமொர சபமொதிகளமொக நிறவிய பின்னர் தரமதிப்பமொகக்
சகமொடுக்கப்பட்டை அடுத்த சபமொதியிடன மமொற்றக் கட்டைடள மூலமமொக நிரல எளிதில அறிந்த சகமொளளும்
வெண்ணம் நிரல அடமக்கப்பட்டுளளத.

கரலச்சசெமொற்கள:
அடமந்த வெண்ணம் – in the given order
அளவுர இரக்க – available parameter
நிரலின் பயன் – usage of the script
சநெடிதமொய் ஆகுமமொம் – expanding the usage

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -118- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


உற்றழி – on emergency
மமொற்பற – shift command
அடடைவுகள - folders

(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -119- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – 23 Trap command
(கண்ணி -கடடரள)

தங்கு தடடையறத் தீர்வு தந்திடும்


நிரலிடன குறித்த நிகழ்சசெயல சசெய்த
முடிந்ததம் இடடையினில மறித்த நிகழம்
தமொடடை நீக்கித் தவிர்க்கும் கண்ணிபய.
- நிரற்பமொ 23

நிரற்பமொவிளக்கம்:
முடறயமொகச் சசெயலபட்டுக் சகமொண்டிரக்கும் நிரலிடன, ஒர குறிப்பிட்டை சசெயற்பமொடு முடிந்தவுடைன்
ஏபதனும் ஒர தமொடடைடயப் அதமொவெத signal ஐ கண்ணி (trap command) கட்டைடளயிடனப் பயன்படுத்தி
நிறத்த முடியும்.
Syntax (சபமொத அடமவு)
இக்கட்டைடளயின் சபமொத அடமவு பின்வெரமமொற அடமகிறத.
trap arg signal
trap command signal
trap 'action' signal1 signal2 signalN
trap 'action' SIGINT
trap 'action' SIGTERM SIGINT SIGFPE SIGSTP
trap 'action' 15 2 8 20
நிரல 86
#!/bin/bash
#niral86.sh
# capture an interrupt # 0
trap 'echo "Exit 0 signal detected..."' 0

# display something
echo "This is a test"

# exit shell script with 0 signal


exit 0

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -120- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல விளக்கம்:
இத ஓர் எடுத்தக்கமொட்டைமொன நிரல. இத எவ்வெமொற ஒர தமொடடையிடனக் கண்ணி டவெத்தப் பிடிப்பத
என்பத பற்றி அறிய உதவுகிறத. கீழ்க்கமொணுமமொற இதனத permission மமொற்றி இதடன எளிடமயமொக
இயக்கி விடடையறியலமொம்.
chmod +x testtrap.sh
./testtrap.sh
சவெளியீடு:
This is a test
Exit 0 signal detected....
நிரல 87
#!/bin/bash
#niral87.sh
# Capture an interrupt # 2 (SIGINT)
trap '' 2
# read CTRL+C from keyboard with 30 second timeout
read -t 30 -p "I'm sleeping hit CTRL+C to exit..."
நிரல விளக்கம்:
இதவும் கூடை, பமற்கூறிய நிரல பபமொன்பற சசெயலபடுகிறத. CTRL+C சகமொடுக்கமொவிடில, சதமொடைர்ந்த
முப்பத சநெமொடிகளுக்கு பவெற எதவும் உளளிடை முடியமொத.
I'm sleeping hit CTRL+C to exit...^C^C^C^C

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -121- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல 88:
#!/bin/bash
#niral88.sh
# Program to print a text file with headers and footers

TEMP_FILE=/tmp/printfile.txt

function clean_up {

# Perform program exit housekeeping


rm $TEMP_FILE
exit
}

trap clean_up SIGHUP SIGINT SIGTERM

lpr $1 > $TEMP_FILE


echo -n "Print file? [y/n]: "
read
if [ "$REPLY" = "y" ]; then
lpr $TEMP_FILE
fi
clean_up
நிரல விளக்கம்:
இந்நிரலமொனத, ஒர குறிப்பிட்டை பகமொப்பிடன header மற்றம் footer சகமொண்டு அச்சடை உதவுகிறத. clean_up
குறநிரலமொனத (function), ஏற்கனபவெ இரக்கும் பகமொப்பிடன அழித்தவிட்டை உதவுகிறத.
இபத நிரலின் மற்சறமொர பதிப்பிடன கீழ்க்கமொணுமமொற கமொணலமொம்.
நிரல 89:
#!/bin/bash
#niral89.sh
#another version of the previous script
# Program to print a text file with headers and footers

# Usage: print file

# Create a temporary file name that gives preference


# to the user's local tmp directory and has a name
# that is resistant to "temp race attacks"

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -122- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


if [ -d "~/tmp" ]; then
TEMP_DIR=~/tmp
else
TEMP_DIR=/tmp
fi
TEMP_FILE=$TEMP_DIR/printfile.$$.$RANDOM
PROGNAME=$(basename $0)

function usage {

# Display usage message on standard error


echo "Usage: $PROGNAME file" 1>&2
}

function clean_up {

# Perform program exit housekeeping


# Optionally accepts an exit status
rm -f $TEMP_FILE
exit $1
}

function error_exit {

# Display error message and exit


echo "${PROGNAME}: ${1:-"Unknown Error"}" 1>&2
clean_up 1
}

trap clean_up SIGHUP SIGINT SIGTERM

if [ $# != "1" ]; then
usage
error_exit "one file to print must be specified"
fi
if [ ! -f "$1" ]; then
error_exit "file $1 cannot be read"
fi

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -123- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


lpr $1 > $TEMP_FILE || error_exit "cannot format file"

echo -n "Print file? [y/n]: "


read
if [ "$REPLY" = "y" ]; then
lpr $TEMP_FILE || error_exit "cannot print file"
fi
clean_up
நிரல விளக்கம்:
பமபல குறிப்பிட்டை முந்டதய நிரலின் நீட்ச இதவெமொகும். function usage, function clean_up, function error_exit
ஆகிய தண்டு நிரலகள உளளன. இடவெ முடறபய பயன்பமொடு, பகமொப்படமவு, பிடழயறிதல
பபமொன்றவெற்டறத் தம்மகத்பத சகமொண்டுளளன. இந்நிரலின் மூலம் பகமொப்புத் தூய்டமயமொக்கம்
சசெய்யப்பட்டு, புதிய பகமொப்பு அச்சடைப்படுகிறத.

கரலச்சசெமொற்கள:
தமொடடை – signal
கண்ணி – trap command
குறித்த நிகழ்சசெயல – particular action
இடடையினில மறித்த – interrupt in between
தூய்டமயமொக்கம் – house keeping
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -124- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – 24 (getopts command)
சபமொருத்தம் சபறம் கடடரள

அளவுர இரக்கும் அடமவிடன அறிந்த


செரியமொன வெண்ணம் சீர்டம சசெய்த
நிரலின் ஊபடை நீந்திடை டவெத்த
சவெளியிடு கிடடைத்திடை வித்திடும் சபமொரத்தபம.
- நிரற்பமொ 24

நிரற்பமொவிளக்கம்:
இந்த சபமொரத்தம் சபறம் கட்டைடளயமொனத, அளவுர அலலத தரமதிப்பிடன செரிபமொர்த்த அடதச் செரிவெர
நிரலில பயன்படுத்த உதவுகிறத. இத சபரம்பமொலும் while loop என்றடழக்கப்படைக்கூடிய
சபமொழசதலமொம் கட்டைடளயினூபடை சசெலுத்தப் பயன்படுகிறத. (This command is used to check valid command
line argument are passed to script. Usually with while loop.) இத சபரம்பமொலும் சதமொடைக்கப்பயனமொளர்களமொல
பயன்படுத்தப்படுவெதிலடல. நிரலின் ஊபடை நீந்திடை டவெத்த என்பத, அளவுரவிடன ஆரமொய்ந்த
எதற்குப் சபமொரத்தமமொனத எத என்படதயும், தவெறமொன தரமதிப்டபத் தவெற என்படதக் கமொட்டுவெடதயும்
குறிப்பிடுகிறத.
Syntax (சபமொத அடமவு)
இத கீழ்க்கமொணும் சபமொதவெடமவிடனத் தன்னகத்பத சகமொண்டுளளத.
getopts {optsring} {variable1}
நிரல 90
#!/bin/bash
#go.sh
#niral90.sh
while getopts ":a" opt; do
case $opt in
a)
echo "-a was triggered!" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
done
நிரல விளக்கம்:

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -125- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சகமொடுக்கப்பட்டுளள நிரலில பலவெமொறமொக உளளீடுகள சகமொடுக்கப்பட்டு அதற்பகற்றமொற்பபமொன்ற
சவெளியீடுகள கமொண்பிக்கப்பட்டுளளன.
இங்கு தரமதிப்புக்கள எதவும் சகமொடுக்கப்படைவிலடல. (Calling it without any arguments)

# ./go_test.sh
எதவும் நிகழவிலடல (Nothing happened? Right. getopts didn't see any valid or invalid options (letters preceded by a
dash), so it wasn't triggered.)

இங்கு நிரலில அலலமொத பவெற மதிப்பமொனத அளவுரவெமொகக் சகமொடுக்கப்பட்டு விடடையறியப்படுகிறத.


(Calling it with non-option arguments)

# ./go_test.sh /etc/passwd
இங்கும் எதவும் நிகழவிலடல. (Again — nothing happened. The very same case: getopts didn't see any valid or
invalid options (letters preceded by a dash), so it wasn't triggered.)
The arguments given to your script are of course accessible as $1 - ${N}.
Calling it with option-arguments
Now let's trigger getopts: Provide options.
இங்கு செரியமொன ஒன்ற சகமொடுக்கப்படுகிறத.

# ./go_test.sh -b
Invalid option: -b
ஆனமொல இத இந்த நிரலுக்குப் சபமொரத்தமற்ற ஒன்றமொகும். எனபவெ விடடையமொனத கீழ்க்கமொணுமமொற
கிடடைக்கிறத.
As expected, getopts didn't accept this option and acted like told above: It placed? into $opt and the invalid option
character (b) into $OPTARG. With our case statement, we were able to detect this.
Now, a valid one (-a):
இங்கும் செரியமொன ஒன்ற சகமொடுக்கப்படுகிறத.

# ./go_test.sh -a
-a was triggered!
You see, the detection works perfectly. The a was put into the variable $opt for our case statement.
Of course it's possible to mix valid and invalid options when calling:

# ./go_test.sh -a -x -b -c
-a was triggered!
Invalid option: -x
Invalid option: -b
Invalid option: -c

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -126- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


இங்கு செரியமொன தரமதிப்பமொனத, பலமுடற சகமொடுக்கப்படுகிறத. விடடையமொனத சகமொடுக்கப்பட்டை
அடனத்திற்கும் சவெளியீடு கிடடைக்கிறத.
# ./go_test.sh -a -a -a -a
-a was triggered!
-a was triggered!
-a was triggered!
-a was triggered!
நிரல 91
#!/bin/bash
#niral91.sh
# Usage: ani -n -a -s -w -d
# help_ani() To print help
help_ani()
{
echo "Usage: $0 -n -a -s -w -d"
echo "Options: These are optional argument"
echo " -n name of animal"
echo " -a age of animal"
echo " -s sex of animal "
echo " -w weight of animal"
echo " -d demo values (if any of the above options are used "
echo " their values are not taken)"
exit 1
}
#
#Set default value for variable
#
isdef=0
na=Moti
age="2 Months" # may be 60 days, as U like it!
sex=Male
weight=3Kg
#
#if no argument
#
if [ $# -lt 1 ]; then
help_ani
fi
while getopts n:a:s:w:d opt

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -127- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


do
case "$opt" in
n) na="$OPTARG";;
a) age="$OPTARG";;
s) sex="$OPTARG";;
w) weight="$OPTARG";;
d) isdef=1;;
\?) help_ani;;
esac
done
if [ $isdef -eq 0 ]
then
echo "Animal Name: $na, Age: $age, Sex: $sex, Weight: $weight (user define mode)"
else
na="Pluto Dog"
age=3
sex=Male
weight=20kg
echo "Animal Name: $na, Age: $age, Sex: $sex, Weight: $weight (demo mode)"
fi

நிரல விளக்கம்:
இந்த நிரலில விலங்கினத்தின் சபயர், அகடவெ, பமொலினம், எடடை மமொதிரி(demo) ஆகியடவெ உளளீடைமொக
வெமொங்கப்பட்டு சவெளியீடைமொனத பின்வெரமமொற கிடடைக்கிறத.
We have script called ani which has syntax as
ani -n -a -s -w -d
Options: These are optional argument
-n name of animal
-a age of animal
-s sex of animal
-w weight of animal
-d demo values (if any of the above options are used their values are not taken)

சவெளியீடு:
Save it and run as follows
# chmod +x ani
# ani -n Lassie -a 4 -s Female -w 20Kg
# ani -a 4 -s Female -n Lassie -w 20Kg
# ani -n Lassie -s Female -w 20Kg -a 4

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -128- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


# ani -w 20Kg -s Female -n Lassie -a 4
# ani -w 20Kg -s Female
# ani -n Lassie -a 4
# ani -n Lassie
# ani -a 2
சவெளியீட்டு விளக்கம்:
இங்கு உற்றப் பமொர்க்க பவெண்டியத என்னசவென்றமொல, நெமொம் தரமதிப்டப பலபவெற வெண்ணங்களில
மமொற்றித் தரலமொம். அவெற்டற சபமொரத்தம் சபறம் கட்டைடள நிரலுக்குத் தக்கவெமொற மமொற்றி விடடையறிய
உதவுகிறத. கீபழ தரமதிப்புக்கள (அளவுரக்கள) மமொற்றி மமொற்றிக் சகமொடுக்கப்பட்டுளளன. ஆனமொல
விடடை எவ்வெமொற வெரகிறத என்படதக் கமொணவும்.
# ani -nLassie -a4 -sFemal -w20Kg
இங்கு space எதவும் option களுக்கும் மதிப்புக்களுக்கும் நெடுபவெ சகமொடுக்கப்படைவிலடல. ஆனமொலும்
விடடையமொனத,அரடமயமொக வெரகிறத.
# ani -nLassie-a4-sFemal-w20Kg
# ani -n Lassie -a 4 -s Female -w 20Kg -c Mammal
-c is not one of the valid options.

கரலச்சசெமொற்கள:
அளவுர – parameter
அடமவு – sequence system
செரியமொன வெண்ணம் சீர்டம – check and validate
நிரல – script
சவெளியிடு – output or answer
சபமொரத்தபம – getopts command
சதமொடைக்கப்பயனமொளர் - beginners
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -129- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – 25 (cut command)
சவடடுக் கடடரள

நீட்டைமமொய்த் தரவுகள சநெடுவெரி நிற்க


குறித்த நிடரகள கழற்றிடை பவெண்டினில
சவெட்டுக் கட்டைடள வெடளந்த சகமொடுக்க
பவெண்டிய தீர்வு விடரந்த வெரபம.
- நிரற்பமொ 25

நிரற்பமொவிளக்கம்:
இயங்குதளத்தில அலலத பகமொப்பில உளள தரவுகள, அடுக்கடுக்கமொக இரக்க, நெமக்கு பவெண்டிய
நிடரகள (columns) மட்டும் தனித்த எடுக்க சவெட்டுக்கட்டைடளயிடனப் பயன்படுத்தி பதடவெயமொன
தீர்விடனப் சபறலமொம்.
Syntax (சபமொத அடமவு)
சவெட்டுக் கட்டைடள கீழ்க்கமொணும் சபமொதவெடமவிடனத் தன்னகத்பத சகமொண்டுளளத.
cut –d(delimiter) f(field no) filename
eg: cut –d: f1 /etc/passwd
நிரல 91
கீழ்க்கமொண்படவெ ஒர பகமொப்பில (data.txt) இரப்பதமொகக் சகமொளக.
one two threefour five
alpha beta gamma delta epsilon

#!/bin/bash
#niral91.sh
#cut statement in the file filtering
cut -f 3 data.txt

நிரல விளக்கம்:
இதில இந்தக் பகமொப்பில உளள மூன்றமொம் நிடர மட்டும் சவெளியீடைமொகக் கிடடைக்கிறத.
three
gamma
நிரல 92
#!/bin/bash
#niral91.sh
#cut statement

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -130- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


cut -f 1-2,4-5 data.txt
நிரல விளக்கம்:
இதில ஒன்ற, இரண்டு, நெமொன்கு ஐந்த ஆகிய நிடரகள சவெளியீடைமொகக் கிடடைக்கின்றன.
one two four five
alpha beta delta epsilon

நிரல 93
#!/bin/bash
#niral93.sh
#cut statement example 3
cut -f 1 -d ':' /etc/passwd
நிரல விளக்கம்:
இங்கு delimiter (எலடல) என்ற அடழக்கக் கூடிய ஒன்ற பயன்படுத்தப்படுகிறத. இதில : என்படதக்
சகமொண்டு நிடரகள பிரிக்கப்பட்டு விடடைகள அதற்பகற்றமொற்பபமொன்ற வெரகின்றன. f1 என்பத நிடர
ஒன்டறக் குறிக்கிறத.
root
daemon
bin
sys
chope

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -131- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல 94
#!/bin/bash
#niral94.sh
#delimiter example no 2
cut -f 1,3 -d ':' --output-delimiter=$'\t' /etc/passwd
நிரல விளக்கம்:
இங்கு ஒன்ற மற்றம் மூன்றமொம் நிடரகள பிரித்சதடுக்கப்பட்டு ஒர tab இடடைசவெளி விட்டு பயனரக்குப்
படடைக்கப்படுகிறத.
root 0
daemon 1
bin 2
sys 3
chope 1000
நிரல 95
#!/bin/bash
#niral95.sh
#combine cut command with other unix command
ps axu | grep python | sed 's/\s\+/ /g' | cut -d' ' -f2,11-
நிரல விளக்கம்:
சபமொதவெமொக இவ்வெடகயமொன கட்டைடளகள எந்தசவெமொர பகமொப்பிடனயும் உடடைத்த எளிய தரவுகளமொக
மமொற்றிக் டகயமொள உதவுகிறத. இத அதிகமமொக சபமொறி நிடறஞர்களமொல பயன்படுத்தப்படுகிறத.
நிரல சவெளியீடு கீழ்வெரமமொற அடமகிறத.
2231 /usr/bin/python /usr/lib/unity-lens-video/unity-lens-video
2311 /usr/bin/python /usr/lib/unity-scope-video-remote/unity-scope-video-remote
2414 /usr/bin/python /usr/lib/ubuntuone-client/ubuntuone-syncdaemon
2463 /usr/bin/python /usr/lib/system-service/system-service-d
3274 grep --color=auto python

கரலச்சசெமொற்கள:
தரவுகள – data
நிடரகள – columns or fields
சவெட்டுக் கட்டைடள – cut command
சபமொறி நிடறஞர் – system admins
எலடல (வெரம்புக்குறி) – delimiter
பிரிப்பமொன் - separator
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -132- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – 26 (paste command)
ஒடடுக் கடடரள

ஒட்டுக் கட்டைடள ஒற்றி எடுத்திடை


சவெவ்பவெற பகமொப்பில உளள உடரகள
தரவுகள ஒன்றமொய் சதளளி எடுத்த
சவெளியிடைமொய் வெந்திடை வெழிவெடக சசெய்யுபம.
- நிரற்பமொ 26

நிரற்பமொவிளக்கம்:
ஒட்டுக் கட்டைடளயிடனக் சகமொண்டு கட்டைடள வெரி அடமத்தமொல, சவெவ்பவெற பகமொப்புக்களில உளள
உடரகள, அவெற்றில உளள தரவுகடள எடுத்த ஒபர பகமொப்பில உளள தரவு பபமொன்ற தர உதவுகிறத.
Syntax (சபமொத அடமவு)
paste [OPTION]... [FILE]…
Options are as follows:
-d, --delimiters=LIST reuse characters from LIST instead of tabs.
-s, --serial paste one file at a time instead of in parallel.
--help Display a help message, and exit.
--version Display version information, and exit.
paste file1.txt file2.txt
கீழ்க்கமொண்படவெ நிரலகளமொக அன்றி தனித்தனிக் கட்டைடளகளமொகக் சகமொடுக்கப்பட்டுளளன.
நிரல 96
#!/bin/bash
#niral96.sh
cat file1
Unix
Linux
Windows
cat file2
Dedicated server
Virtual server
cat file3
Hosting
Machine
Operating system

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -133- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல விளக்கம்:
இங்கு எளிடமயமொக மூன்ற பகமொப்புகள பயனரக்குக் கமொட்டைப்படுகிறத.
நிரல 97
#!/bin/bash
#niral97.sh
paste file1 file2
Unix Dedicated server
Linux Virtual server
Windows

paste file2 file1


Dedicated server Unix
Virtual server Linux
Windows
நிரல விளக்கம்:
இங்கு இரண்டு பகமொப்புகள பசெர்த்த ஒபர பகமொப்பமொக மமொற்றியடம விளக்கப்பட்டுளளத.
நிரல 98
#!/bin/bash
#niral98.sh
paste -d"|" file1 file2
Unix|Dedicated server
Linux|Virtual server
Windows|

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -134- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல விளக்கம்:
இங்கு வெரம்புக்குறி ஆக | குறியீடு பயன்படுத்தப்படுகிறத. எனபவெ தரவுகளிடடைபய | குறியீடைமொனத
பயன்படுத்தப்படுகிறத.
நிரல 99
#!/bin/bash
#niral99.sh
paste -s file1 file2
Unix Linux Windows
Dedicated server Virtual server
நிரல விளக்கம்:
இங்கு சபமொதவெமொக ஒட்டுக்கட்டைடளயமொனத பயன்படுத்தப்படுகிறத.
நிரல 100
#!/bin/bash
#niral100.sh
paste -d"|," file1 file2 file3
Unix|Dedicated server,Hosting
Linux|Virtual server,Machine
Windows|,Operating system
cat file1 | paste - -
Unix Linux
Windows

நிரல விளக்கம்:
இந்தக் கட்டைடளத் சதமொடைரில, மூன்ற பகமொப்புக்கள இடணந்த ஒபர சவெளியீடைமொகக் கிடடைக்கிறத.

கரலச்சசெமொற்கள:
ஒட்டுக் கட்டைடள – paste command
தரவுகள – data
உடரகள – text or string
சவெவ்பவெற பகமொப்பில – different files
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -135- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – 27 (tput command) இடு
கடடரள

முடனயம் திடரயளவு சமமொத்தமமொய் இரப்பினும்


சறியதமொய் இரப்பினும் சசெவ்வெபன தப்புரவு
சசெய்திடைல நிரலில சீர்டம சகமொண்டு
இடு கட்டைடள இட்டிடை வெரபம.

- நிரற்பமொ 27

நிரற்பமொவிளக்கம்:
முடனயம் என்றடழக்கப் படைக்கூடிய terminal எந்த வெடக அளவெமொனமொலும் (maximize or minimize) அதடன
சீரமொகத் தப்புரவு சசெய்திடை இடு (tput) கட்டைடளயமொனத உதவுகிறத.
Examples (எடுத்தக்கமொட்டுக்கள)

tput longname
tput -T screen longname
tput colors
tput cols
tput bce && echo "True"
paste file1.txt file2.txt
நிரல 101
#!/bin/bash
#niral101.sh
alias term_size=`echo "Rows=$(tput lines) Cols=$(tput cols)"'
# term_size2 - Dynamically display terminal window size

redraw() {
clear
echo "Width = $(tput cols) Height = $(tput lines)"
}

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -136- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


trap redraw WINCH

redraw
while true; do
:
done
நிரல விளக்கம்:
இங்கு SIGWINCH என்ற தமொடடையமொனத (signal) சகமொடுக்கப்பட்டு கீழ்க்கமொணுமமொற திடரயிடன
உரமமொற்றம் சசெய்யப்பயன்படுகிறத.
நிரல சவெளியீடு:

சுட்டி கட்டுப்பமொடு (Controlling the Cursor)


Capname Description
sc Save the cursor position
rc Restore the cursor position
home Move the cursor to upper left corner (0,0)
cup <row> <col> Move the cursor to position row, col
cud1 Move the cursor down 1 line
cuu1 Move the cursor up 1 line
civis Set to cursor to be invisible
cnorm Set the cursor to its normal state
நிரல 102
#!/bin/bash

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -137- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


#niral102.sh
# term_size3 - Dynamically display terminal window size
# with text centering

redraw() {
local str width height length

width=$(tput cols)
height=$(tput lines)
str="Width = $width Height = $height"
length=${#str}
clear
tput cup $((height / 2)) $(((width / 2) - (length / 2)))
echo "$str"
}

trap redraw WINCH

redraw
while true; do
:
done
நிரல விளக்கம்:

இங்கு சவெளியீடைமொனத திடரயின் நெடுவில வெந்த கிடடைக்குமமொற அடமகிறத.


உடர விடளவுகள

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -138- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


Capname Description
bold Start bold text
smul Start underlined text
rmul End underlined text
rev Start reverse video
blinkStart blinking text
invis Start invisible text
smsoStart "standout" mode
rmsoEnd "standout" mode
sgr0 Turn off all attributes
setaf <value> Set foreground color
setab <value> Set background color
நிரல 103
#!/bin/bash
#niral103.sh
# tput_characters - Test various character attributes

clear

echo "tput character test"


echo "==================="
echo

tput bold; echo "This text has the bold attribute."; tput sgr0

tput smul; echo "This text is underlined (smul)."; tput rmul

# Most terminal emulators do not support blinking text (though xterm


# does) because blinking text is considered to be in bad taste ;-)
tput blink; echo "This text is blinking (blink)."; tput sgr0

tput rev; echo "This text has the reverse attribute"; tput sgr0

# Standout mode is reverse on many terminals, bold on others.


tput smso; echo "This text is in standout mode (smso)."; tput rmso

tput sgr0
echo

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -139- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல விளக்கம்:
இங்கு நிரலமொனத பமற்கமொணும் வெண்ணம் அடமந்தவெமொற இரக்கிறத.
இயங்குதளங்களில இத பபமொன்ற நிரலகள பயன்படுத்தப்பட்டு அழகு பசெர்க்கப்படுகிறத. சரட் ஹமொட்
இயங்குதளங்கடளக் கமொட்டிலும் உபுண்டு பபமொன்ற இயங்குதளங்களில அதிகமமொக இத பபமொன்ற
நிரலகள பயன்படுத்தப்பட்டு அழகு பசெர்க்கப்படுகின்றத.

கரலச்சசெமொற்கள:
இடு கட்டைடள – tput command
எந்த வெடக அளவெமொனமொலும் – maximize or minimize
உடரகள – text or string
சவெவ்பவெற பகமொப்பில – different files
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -140- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – 28 (tput command) இடு
கடடரள

கட்டைடள இடுவெமொம் சகமொண்படை வெந்திடும்


வெடககள பத்த வெண்ணம் உண்டைமொம்
முடனயம் சீரடைன் மிளிர்ந்திடை பவெண்டி
நிறங்கள பூட்டி நீட்டிடில சசெய்யபவெ.

- நிரற்பமொ 28

நிரற்பமொவிளக்கம்:
இடு கட்டைடளயமொனத தன்னகத்பத பத்த வெண்ணங்கடளக் சகமொண்டுளளத. அவெற்டறக் சகமொண்டு
அழகுற நெமத முடனயத்தின் வெண்ணங்கடள மமொற்றி இன்புறலமொம்.
உடர வெண்ணங்கள (Text color)
Value Color
0 Black
1 Red
2 Green
3 Yellow
4 Blue
5 Magenta
6 Cyan
7 White
8 Not used
9 Reset to default color
நிரல 104
#!/bin/bash
#script104.sh
# tput_colors - Demonstrate color combinations.

for fg_color in {0..7}; do


set_foreground=$(tput setaf $fg_color)
for bg_color in {0..7}; do
set_background=$(tput setab $bg_color)
echo -n $set_background$set_foreground

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -141- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


printf ' F:%s B:%s ' $fg_color $bg_color
done
echo $(tput sgr0)
done
நிரல விளக்கம்:

நிரல சவெளியீடு:
குறிப்பிட்டை நிரடலக் சகமொண்டு நெமொம் பமற்கமொணும் வெண்ணம் முடனயத்திடன சமரபகற்றலமொம்.
நிரல 105
திடரயிடன அழித்தல (Clearing the Screen)
கீழ்க்கமொணும் கட்டைடளகடளக் சகமொண்டு நெமொம் ஒர திடரயின் குறிப்பிட்டை இடைத்திடன அழிக்கலமொம்.
Capname Description
smcup Save screen contents (திடரயின் இரப்பிடன கமொக்கும்.)
rmcup Restore screen contents (திடரயின் இரப்பிடன மளடமக்க உதவும்.)
el Clear from the cursor to the end of the line (சுட்டியின் சதமொடைக்கத்திலிரந்த குறிப்பிட்டை வெரியின் இறதி
வெடர அழிக்க உதவும்.)
el1 Clear from the cursor to the beginning of the line (சுட்டியின் சதமொடைக்கத்திலிரந்த குறிப்பிட்டை வெரியின்
சதமொடைக்கம் வெடர அழிக்க உதவும்.)
ed Clear from the cursor to the end of the screen (சுட்டியின் சதமொடைக்கத்திலிரந்த திடரயின் இறதி வெடர
அழிக்க உதவும்)
clearClear the entire screen and home the cursor (திடர முழக்க அழிக்க உதவும். )
#!/bin/bash
#niral105.sh
# tput_menu: a menu driven system information program

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -142- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


BG_BLUE="$(tput setab 4)"
BG_BLACK="$(tput setab 0)"
FG_GREEN="$(tput setaf 2)"
FG_WHITE="$(tput setaf 7)"

# Save screen
tput smcup

# Display menu until selection == 0


while [[ $REPLY != 0 ]]; do
echo -n ${BG_BLUE}${FG_WHITE}
clear
cat <<- _EOF_
Please Select:

1. Display Hostname and Uptime


2. Display Disk Space
3. Display Home Space Utilization
0. Quit

_EOF_

read -p "Enter selection [0-3] > " selection

# Clear area beneath menu


tput cup 10 0
echo -n ${BG_BLACK}${FG_GREEN}
tput ed
tput cup 11 0

# Act on selection
case $selection in
1) echo "Hostname: $HOSTNAME"
uptime
;;
2) df -h
;;
3) if [[ $(id -u) -eq 0 ]]; then

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -143- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


echo "Home Space Utilization (All Users)"
du -sh /home/* 2> /dev/null
else
echo "Home Space Utilization ($USER)"
du -s $HOME/* 2> /dev/null | sort -nr
fi
;;
0) break
;;
*) echo "Invalid entry."
;;
esac
printf "\n\nPress any key to continue."
read -n 1
done

# Restore screen
tput rmcup
echo "Program terminated."
நிரல விளக்கம்:

இத ஒர் எளிய பதர்வு அடமவெமொக அடமகின்றத. இந்நிரலில பமற்சசெமொன்ன கட்டைடளகள


பயன்பட்டிரப்பதமொல, கீழ்க்கமொணுமமொற சவெவ்பவெற நிறங்களில சவெளியீடு கிடடைக்கிறத.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -144- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


கரலச்சசெமொற்கள:
இடுவெமொம் – tput command
முடனயம் – terminal
நிறங்கள – colors
வெண்ணங்கள - colors
அழித்தல - clearing
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -145- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – 29 (tput command) இடு
கடடரள சதமொடர்ச்ச

இடுவெமொம் கட்டைடள ஈண்சடைடுத் தியம்பிடும்


இந்நிரல சகமொண்டு எடுத்தமொண் டிடைபவெ
கீழ்வெரம் விதமமொய் கடிடக சவெளியிடு
சபரிதமொய் வெந்த பண்புர சசெய்யுபம.
- நிரற்பமொ 29

நிரற்பமொவிளக்கம்:
tput என்னும் இடு கட்டைடள சகமொண்டு கீழ்க்கமொணும் நிரலிடனச் செரிவெர எழதி நிடறவு சசெய்தமொல,
அழகமொன மணிப்சபமொறி (terminal clock) பண்புர (tensor) அடமவில வெந்த சவெளியீடைமொகக் (output)
கிடடைக்கும்.
நிரல 106
#niral106
#!/bin/bash

# tclock - Display a clock in a terminal

BG_BLUE="$(tput setab 4)"


FG_BLACK="$(tput setaf 0)"
FG_WHITE="$(tput setaf 7)"

terminal_size() { # Calculate the size of the terminal

terminal_cols="$(tput cols)"
terminal_rows="$(tput lines)"
}

banner_size() {

# Because there are different versions of banner, we need to


# calculate the size of our banner's output

banner_cols=0

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -146- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


banner_rows=0

while read; do
[[ ${#REPLY} -gt $banner_cols ]] && banner_cols=${#REPLY}
((++banner_rows))
done < <(banner "12:34 PM")
}

display_clock() {

# Since we are putting the clock in the center of the terminal,


# we need to read each line of banner's output and place it in the
# right spot.

local row=$clock_row

while read; do
tput cup $row $clock_col
echo -n "$REPLY"
((++row))
done < <(banner "$(date +'%I:%M %p')")
}

# Set a trap to restore terminal on Ctrl-c (exit).


# Reset character attributes, make cursor visible, and restore
# previous screen contents (if possible).

trap 'tput sgr0; tput cnorm; tput rmcup || clear; exit 0' SIGINT

# Save screen contents and make cursor invisible


tput smcup; tput civis

# Calculate sizes and positions


terminal_size
banner_size
clock_row=$(((terminal_rows - banner_rows) / 2))
clock_col=$(((terminal_cols - banner_cols) / 2))
progress_row=$((clock_row + banner_rows + 1))
progress_col=$(((terminal_cols - 60) / 2))

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -147- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


# In case the terminal cannot paint the screen with a background
# color (tmux has this problem), create a screen-size string of
# spaces so we can paint the screen the hard way.

blank_screen=
for ((i=0; i < (terminal_cols * terminal_rows); ++i)); do
blank_screen="${blank_screen} "
done

# Set the foreground and background colors and go!


echo -n ${BG_BLUE}${FG_WHITE}
while true; do

# Set the background and draw the clock

if tput bce; then # Paint the screen the easy way if bce is supported
clear
else # Do it the hard way
tput home
echo -n "$blank_screen"
fi
tput cup $clock_row $clock_col
display_clock

# Draw a black progress bar then fill it in white


tput cup $progress_row $progress_col
echo -n ${FG_BLACK}
echo -n "###########################################################"
tput cup $progress_row $progress_col
echo -n ${FG_WHITE}

# Advance the progress bar every second until a minute is used up


for ((i = $(date +%S);i < 60; ++i)); do
echo -n "#"
sleep 1
done
done

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -148- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல விளக்கம்:
பமற்கமொணும் நிரலில terminal clock என்றடழக்கப்படைக்கூடிய முடனயக் கடிடகயமொனத
அடமக்கப்பட்டுளளத. இங்கு பின்புலம் நீலமமொகவும், முன்புலம் சவெளடளயமொகவும் நிடல
உணர்த்திப்பட்டடை (progress bar) கறடம நிறமமொகவும் அடமக்கப்பட்டுளளத. இதில கடடைசயில வெரம்
ஆகக் கட்டைடளயமொனத (for loop) progress bar ஐ ஒவ்சவெமொர சநெமொடிக்கும் ஒன்ற என்ற வெண்ணம் நிறமமொற்றி
பயனரக்கு அளிக்கிறத.
நிரல சவெளியீடு:

கரலச்சசெமொற்கள:
இடுவெமொம் கட்டைடள – tput command
நிரல – script
கடிடக (மணிப்சபமொறி) – clock
சவெளியிடு - output
பண்புர – tensor
நிடல உணர்த்திப்பட்டடை - progress bar
முடனயக் கடிடக - terminal clock
ஆகக் கட்டைடள – for loop

(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -149- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – 30 (nohup command)
சசெயலிழக்கமொக் கடடரள

பயனர் தந்த பின்புலக் கட்டைடள


முடனயம் சகமொண்டு மடிந்த பின்னரம்
தன்சசெயல சசெய்த தீர்வு விடுக்க
சசெயலி ழக்கமொ சீர்வெரி உதவுபம
- நிரற்பமொ 30

நிரற்பமொவிளக்கம்:
பயனர் சகமொடுத்த பின்புலத்தில சசெயலபடும் கட்டைடளயமொனத, குறிப்பிட்டை முடனயமமொனத,
மூடைப்பட்டை பின்னரம் சசெயலபடை பவெண்டுசமனில சசெயலிழக்கமொ (nohup) கட்டைடள
பயன்படுத்தப்படைல பவெண்டும்.
சபமொத அடமவு (General syntax):
#nohup command-name &
#nohup /path/to/command-name arg1 arg2 &
பின்புலத்தில இரக்கும் பவெடலகடளப் பமொர்க்ககீழ்க்கமொணும் கட்டைடள உதவுகிறத.
#jobs –l
நிரல 107
#niral107
#!/bin/bash
# nohup find / -xdev -type f -perm +u=s -print > out.txt &
நிரல விளக்கம்:
குறிப்பிட்டை நிரலமொனத பின்புலத்தில எவ்வெமொற find கட்டைடளயிடன சசெயலிழக்கமொமல சசெய்யும்
வெண்ணம் பயன்படுத்தவெத என்ற விளக்குகிறத.
நிரல 108
#niral108
#!/bin/bash
Example: Printing lines to both standard output & standard error
while(true)
do
echo "standard output"
echo "standard error" 1>&2
sleep 1;
done

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -150- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல சவெளியீடு 1:
Execute the script without redirection
$ nohup sh custom-script.sh &
[1] 12034
$ nohup: ignoring input and appending output to `nohup.out'
$ tail -f nohup.out
standard output
standard error
standard output
standard error
..
நிரல சவெளியீடு 2:
Execute the script with redirection
$ nohup sh custom-script.sh > custom-out.log &
[1] 11069
$ nohup: ignoring input and redirecting stderr to stdout
நிரல சவெளியீடு 3:
$ tail -f custom-out.log
standard output
standard error
standard output
standard error
..
If you log-out of the shell and login again, you’ll still see the custom-script.sh running in the background.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -151- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல சவெளியீடு 4:
$ ps aux | grep prasanna
prasanna 12034 0.0 0.1 4912 1080 pts/2 S 14:10 0:00 sh custom-script.sh
nohup command with password less authentication:
கடைவுச்சசெமொலலற்ற நுடழவெடமவு (passwordless authentication) சசெய்யப்பட்டிரந்தமொல, இந்தக்
கட்டைடளயமொனத ஒர குறிப்பிட்டை வெழங்கியிலிரந்த (server) பலபவெற வெழங்கிகளில குறிப்பிட்டை
கட்டைடளயிடன இயக்கப்பயன்படுகிறத.
கீழ்வெரம் கட்டைடளயமொனத, ஒர கணினியிலிரந்த மற்சறமொன்றிற்கு பகமொப்புக்கடள பின்புலம் வெழியமொகப்
படிசயடுக்கப் பயன்படுகிறத.
$ nohup scp file_to_copy user@server:/path/to/copy/the/file > nohup.out 2>&1
இதில உற்ற பநெமொக்க பவெண்டியத என்னசவெனில, கடைவுச்சசெமொலலலலமொத நுடழவெடமவு
இலடலசயனில, ஒன்றிலிரந்த இன்சனமொன்றிற்கு nohup கட்டைடள சசெலலமொத.

கரலச்சசெமொற்கள:
பயனர் – user
பின்புலக் கட்டைடள – background command
முடனயம் – terminal
மடிந்த பின்னரம் – closed after the terminal
தீர்வு விடுக்க – give output
சசெயலி ழக்கமொ – nohup command
கடைவுச்சசெமொலலற்ற நுடழவெடமவு – passwordless authentication
வெழங்கி - Server

(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -152- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – 31

சபமொழசதமொடு பசெரம் புதிய பதிடக


தவெறிலமொ விதமமொய்த் தப்புரவு சசெய்திடை
சபமொரள சகமொண்டு பின்வெரம் சீரிய
நிரலின் அடமவு நீடித்த உதவுபம.
- நிரற்பமொ 31

நிரற்பமொவிளக்கம்:
இங்கு அடமந்தளள விதவிதமமொன நிரலகள எவ்வெமொற தமொமமொகபவெ ஏற்படும் பதிடககள
அழிக்கப்பயன்படுகின்றன என்படதக் கமொட்டிடை உதவுகின்றன.
சபமொத அடமவு (General syntax):
நிரல 109
#niral109
# Cleanup
# Run as root, of course.

cd /var/log
cat /dev/null > messages
cat /dev/null > wtmp
echo "Log files cleaned up."
நிரல விளக்கம்:
இத மிகவும் எளிடமயமொன நிரல. இதடன நெமொம் பவெர்ப்பயனர் என்னும் பயனடரக் சகமொண்டு (root user)
மட்டுபம இயக்க முடியும். சபமொதவெமொன பயனர்கள இயக்க பவெண்டுசமனில அதற்குத் தனியமொக நெமொம்
உத்தரவுகடளக் (permissions) சகமொடுக்க பவெண்டும்.
நிரல 110
#niral110
#!/bin/bash
# Proper header for a Bash script.

# Cleanup, version 2

# Run as root, of course.


# Insert code here to print error message and exit if not root.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -153- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


LOG_DIR=/var/log
# Variables are better than hard-coded values.
cd $LOG_DIR

cat /dev/null > messages


cat /dev/null > wtmp

echo "Logs cleaned up."

exit # The right and proper method of "exiting" from a script.


# A bare "exit" (no parameter) returns the exit status
#+ of the preceding command.
நிரல விளக்கம்:
இந்நிரல பமற்கண்டை நிரலின் அடுத்த பதிப்பமொகும். இதில குறிப்பிட்டை ஒர பகமொப்பு மட்டுபம (/var/log)
என்றிலலமொமல, எந்த வெடகயமொன பகமொப்புகளுக்கு நெமொம் அடமவிடனச் சசெய்கின்பறமொபமமொ அதற்கு
ஏற்றமொற்பபமொல பகமொப்புகளமொனத அழிக்கப்படுட்டு (reset) மட்டைடமக்கப்படும்.

#niral111
#!/bin/bash
# Cleanup, version 3

# Warning:
# -------
# This script uses quite a number of features that will be explained
#+ later on.
# By the time you've finished the first half of the book,
#+ there should be nothing mysterious about it.

LOG_DIR=/var/log
ROOT_UID=0 # Only users with $UID 0 have root privileges.
LINES=50 # Default number of lines saved.
E_XCD=86 # Can't change directory?
E_NOTROOT=87 # Non-root exit error.

# Run as root, of course.


if [ "$UID" -ne "$ROOT_UID" ]
then
echo "Must be root to run this script."

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -154- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


exit $E_NOTROOT
fi

if [ -n "$1" ]
# Test whether command-line argument is present (non-empty).
then
lines=$1
else
lines=$LINES # Default, if not specified on command-line.
fi

# Stephane Chazelas suggests the following,


#+ as a better way of checking command-line arguments,
#+ but this is still a bit advanced for this stage of the tutorial.
#
# E_WRONGARGS=85 # Non-numerical argument (bad argument format).
#
# case "$1" in
# "" ) lines=50;;
# *[!0-9]*) echo "Usage: `basename $0` lines-to-cleanup";
# exit $E_WRONGARGS;;
# * ) lines=$1;;
# esac
#
#* Skip ahead to "Loops" chapter to decipher all this.

cd $LOG_DIR

if [ `pwd` != "$LOG_DIR" ] # or if [ "$PWD" != "$LOG_DIR" ]


# Not in /var/log?
then
echo "Can't change to $LOG_DIR."
exit $E_XCD
fi # Doublecheck if in right directory before messing with log file.

# Far more efficient is:


#
# cd /var/log || {

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -155- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


# echo "Cannot change to necessary directory." >&2
# exit $E_XCD;
#}

tail -n $lines messages > mesg.temp # Save last section of message log file.
mv mesg.temp messages # Rename it as system log file.

# cat /dev/null > messages


#* No longer needed, as the above method is safer.

cat /dev/null > wtmp # ': > wtmp' and '> wtmp' have the same effect.
echo "Log files cleaned up."
# Note that there are other log files in /var/log not affected
#+ by this script.

exit 0
# A zero return value from the script upon exit indicates success
#+ to the shell.

நிரல விளக்கம்:
இத மற்ற நிரலகள பபமொல சபமொதவெமொக இயங்கமொமல, எந்தப் பயனர் இயக்குகிறமொர் அவெரக்கு
எவ்வெடகயமொன உத்தரவுகள வெழங்கப்பட்டுளளன என்படதசயலலமொம் ஆய்ந்தறிந்த
அதற்பகற்றமொற்பபமொன்ற இயங்கி சவெளியீட்டிடனத் தரகிறத. சபமொதவெமொக இவ்வெடகயமொன நிரலகடள
இயக்கி எழதம் சபமொழத நெமொம் பயனடரயும் அவெரடடைய உத்தரவுகடளயும் கரத்தில சகமொண்டு
சசெயலபடுவெத பதடவெயமொகிறத.

கரலச்சசெமொற்கள:
பயனர் – user
புதிய பதிடக – new logs
தவெறிலமொ விதமமொய் – right manner
தப்புரவு சசெய்திடை – clean
பவெர்ப்பயனர் – root user
மட்டைடம – reset
அடமவுகள - settings

(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -156- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – 32

உளளிடு சவெளியிடு உற்ற பநெமொக்கி


பவெண்டிய டவெத்த பவெறடதத் திரப்பி
சபமொதியதன் தன்டம சபமொரத்தி பண்பமொய்
பபணிடை பயன்படும் பின்வெரம் நிரபல.
- நிரற்பமொ 32

நிரற்பமொவிளக்கம்:
நிரலில சகமொடுக்கப்படும் உளளீடு மற்றம் சவெளியீடுகடள உற்ற கவெனித்த, பதடவெயமொனடத டவெத்த
மற்றடதப் பிரித்த, சபமொதி எனப்படுகின்ற package
செரிவெர பயன்படுத்திடை உதவும் நிரபல கீழ்க்கமொணும் நிரலமொகும்.
நிரல 112
#!/bin/bash
#niral112
# rpm-check.sh

# Queries an rpm file for description, listing,


#+ and whether it can be installed.
# Saves output to a file.
#
# This script illustrates using a code block.

SUCCESS=0
E_NOARGS=65

if [ -z "$1" ]
then
echo "Usage: `basename $0` rpm-file"
exit $E_NOARGS
fi

{ # Begin code block.


echo
echo "Archive Description:"

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -157- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


rpm -qpi $1 # Query description.
echo
echo "Archive Listing:"
rpm -qpl $1 # Query listing.
echo
rpm -i --test $1 # Query whether rpm file can be installed.
if [ "$?" -eq $SUCCESS ]
then
echo "$1 can be installed."
else
echo "$1 cannot be installed."
fi
echo # End code block.
} > "$1.test" # Redirects output of everything in block to file.

echo "Results of rpm test in file $1.test"

# See rpm man page for explanation of options.

exit 0
நிரல விளக்கம்:
பமபல சகமொடுக்கப்பட்டுளள இந்த நிரலில, Archive Description என்பத முதலில கண்டைறியப்பட்டு, அத
Archive Listing இல உளளதமொ இலடலயமொ என பசெமொதிக்கப்படுகிறத. விடடையமொனத SUCCESS என்ற
வெரமமொயின் rpm can be installed என சவெளியீட்டிடன பயனரக்கு அளிக்கிறத, இலடலசயனில cannot be
installed. என்ற சதரிவிக்கிறத. இந்த நிரலிடன டவெத்த குறிப்பிட்டை சபமொதியமொனத அந்தப் சபமொறிக்கு
ஏற்றதமொ இலடலயமொ என எளிதில அறிந்த சகமொளள முடிகிறத. இத சபமொதவெமொக அடனத்த வெடகயமொன
சபமொதிகளுக்கும் உதவும் வெடகயில அடமக்கப்பட்டுளளத.
நிரல 113 - சற விவெர நிரல (tips script)
#!/bin/bash
#niral113

# uppercase.sh : Changes input to uppercase.

tr 'a-z' 'A-Z'
# Letter ranges must be quoted
#+ to prevent filename generation from single-letter filenames.
Exit 0

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -158- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல விளக்கம்:
இத ஓர் எளிடமயமொன நிரலமொகும். சகமொடுக்கப்படும் எடதயும் சறிய எழத்திலிரந்த சபரிய எழத்திற்கு
மமொற்ற உதவும் நிரல. tr என்னும் கட்டைடள translate என்னும் சபமொரளபடும்படி அடமக்கப்பட்டுளளத.
இதற்கு uppercase.sh என்ற சபயர் இடைப்பட்டுளளத. சபமொதவெமொக ls –l என்ற சகமொடுத்தமொல ஒர
அடடைவிற்குள இரக்கும் அடனத்த பகமொப்புகளும் சவெளியீடைமொகக் கிடடைக்கும். ஆனமொல இங்கு
இரண்டடையும் பசெர்த்த ls -l | ./uppercase.sh
சகமொடுப்பதமொல, சபமொதவெமொகக் கிடடைக்கும் சவெளியீடைமொனத சபரிய எழத்தக்களமொக மமொற்றப்பட்டுக்
கிடடைக்கிறத.
நிரல சவெளியீடு:
bash$ ls -l | ./uppercase.sh
-RW-RW-R-- 1 BOZO BOZO 109 APR 7 19:49 1.TXT
-RW-RW-R-- 1 BOZO BOZO 109 APR 14 16:48 2.TXT
-RW-R--R-- 1 BOZO BOZO 725 APR 20 20:56 DATA-FILE

நிரல 114 (running a loop in background - வெடளவுக் கட்டைடளடயப் பின்புலத்தில இயக்குதல.)


#!/bin/bash
#niral114
# background-loop.sh

for i in 1 2 3 4 5 6 7 8 9 10 # First loop.


do
echo -n "$i "
done & # Run this loop in background.
# Will sometimes execute after second loop.

echo # This 'echo' sometimes will not display.

for i in 11 12 13 14 15 16 17 18 19 20 # Second loop.


do
echo -n "$i "
done

echo # This 'echo' sometimes will not display.

# ======================================================
நிரல விளக்கம்:
பமற்கண்டை நிரல தன்னகத்பத உளள வெடளவுக் கட்டைடளயிடன பின்புலத்தில இயக்கப் பயன்படுகிறத.
இங்கு & என்னும் குறியீடைமொனத, குறிப்பிட்டை வெடளவுக்கட்டைடளயிடன (loop) பின்புலத்பத (background)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -159- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


இயங்க உதவுகிறத. இங்கு உற்ற பநெமொக்க பவெண்டியத என்னசவெனில, ஒவ்சவெமொர முடறயும் சவெபவெற
சவெளியீடுகள கிடடைக்கிறத. எடுத்தக்கமொட்டிற்கமொக, சல நிரல சவெளியீடுகள தரப்பட்டுளளன.
நிரல சவெளியீடு:
இங்கு ஐந்த வெடகயமொன சவெளியீடுகள நிரலிடன சவெவ்பவெற பநெரங்களில இயக்கும் சபமொழத
கிடடைக்குசமன்ற சகமொடுக்கப்பட்டுளளத.
# The expected output from the script:
# 1 2 3 4 5 6 7 8 9 10
# 11 12 13 14 15 16 17 18 19 20

# Sometimes, though, you get:


# 11 12 13 14 15 16 17 18 19 20
# 1 2 3 4 5 6 7 8 9 10 bozo $
# (The second 'echo' doesn't execute. Why?)

# Occasionally also:
# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
# (The first 'echo' doesn't execute. Why?)

# Very rarely something like:


# 11 12 13 1 2 3 4 5 6 7 8 9 10 14 15 16 17 18 19 20
# The foreground loop preempts the background one.

exit 0

கரலச்சசெமொற்கள:
உளளிடு – input
சவெளியிடு – output
உற்ற பநெமொக்கி – anlysing
பவெண்டிய – required
பவெறடதத் – non-required
சபமொதியதன் - package
நிரபல - script
சபமொதி – RPM package (Red Hat Package Manager)
வெடளவுக்கட்டைடள – loop
பின்புலம் - background
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -160- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – 33

மற்ற கணினி சமமொழிகள பபமொலிலமொ


முழசவெண் பகமொடவெ முடிக்க வெடகயிலமொ
இடைமும் சபமொரளும் எடுத்த இயங்கிடும்
சூழல முடனயம் செமொர்ந்த மமொறிபய.
- நிரற்பமொ 33

நிரற்பமொவிளக்கம்:
மற்ற கணினி உயர் நிடல சமமொழிகள பபமொலிலலமொமல, முடனயக் குறநிரலமொனத (shell script) முழஎண்
(integer), செரம் அலலத பகமொடவெ (string)ஆகியவெற்டற அறதியிட்டு கூறமொமல அடவெ அடவெ இரக்கும்
இடைத்திற்பகற்ப சபமொரடள இயங்கு பநெரத்தில (run time) எடுத்தக் சகமொண்டு முடனயத்தின் சூழடலச்
(depends on the terminal) செமொர்ந்த அடமவெபத மமொறியமொகும் (variable).
நிரல 115
#!/bin/bash
#niral115.sh
# int-or-string.sh

a=2334 # Integer.
let "a += 1"
echo "a = $a " # a = 2335
echo # Integer, still.

b=${a/23/BB} # Substitute "BB" for "23".


# This transforms $b into a string.
echo "b = $b" # b = BB35
declare -i b # Declaring it an integer doesn't help.
echo "b = $b" # b = BB35

let "b += 1" # BB35 + 1


echo "b = $b" #b=1
echo # Bash sets the "integer value" of a string to 0.

c=BB34

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -161- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


echo "c = $c" # c = BB34
d=${c/BB/23} # Substitute "23" for "BB".
# This makes $d an integer.
echo "d = $d" # d = 2334
let "d += 1" # 2334 + 1
echo "d = $d" # d = 2335
echo

# What about null variables?


e='' # ... Or e="" ... Or e=
echo "e = $e" #e=
let "e += 1" # Arithmetic operations allowed on a null variable?
echo "e = $e" #e=1
echo # Null variable transformed into an integer.

# What about undeclared variables?


echo "f = $f" #f=
let "f += 1" # Arithmetic operations allowed?
echo "f = $f" #f=1
echo # Undeclared variable transformed into an integer.
#
# However ...
let "f /= $undecl_var" # Divide by zero?
# let: f /= : syntax error: operand expected (error token is " ")
# Syntax error! Variable $undecl_var is not set to zero here!
#
# But still ...
let "f /= 0"
# let: f /= 0: division by 0 (error token is "0")
# Expected behavior.

# Bash (usually) sets the "integer value" of null to zero


#+ when performing an arithmetic operation.
# But, don't try this at home, folks!
# It's undocumented and probably non-portable behavior.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -162- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


# Conclusion: Variables in Bash are untyped,
#+ with all attendant consequences.

exit $?
நிரல விளக்கம்:
ஆங்கிலத்திபல untyped என்றடழக்கப்படைக்கூடிய அறிவிப்புச் சசெய்யப்படைமொத மமொறிகள, அடவெகளின்
அடமவிடைத்டதப் சபமொறத்த, ஆச அலலத செமொபம் ஆகிய இரண்டடையுபம தரகின்றன. குறநிரலில
எளிதமொக குறியீட்டு வெரிகடளக் சகமொடுக்க, அலலத நீங்கள சசெயலிழக்கப் பபமொதமமொன கயிற சகமொடுக்க
இத்தடகய அறிவிக்கப்படைமொத மமொறிகள உதவுகின்றன. எனினும், இடவெ தலலியமற்ற குறநிரலகடள
(non-accurate scripts) எழதிப்பமொர்க்க, நுட்பமமொன பிடழகளுக்கு உத்தரவு சகமொடுக்க உதவுகின்றன.
மமொறிகடள தன்னகத்பத டவெத்தக் சகமொண்டு, குறநிரலிடன பதடவெயமொன பபமொத இயக்கம் சசெய்வெடத
முடனயம் சபமொதவெமொக மறக்கிறத.
நிரல 116:
#!/bin/bash
# niral116.sh

# Does a 'whois domain-name' lookup on any of 3 alternate servers:


# ripe.net, cw.net, radb.net

# Place this script -- renamed 'wh' -- in /usr/local/bin

# Requires symbolic links:


# ln -s /usr/local/bin/wh /usr/local/bin/wh-ripe
# ln -s /usr/local/bin/wh /usr/local/bin/wh-apnic
# ln -s /usr/local/bin/wh /usr/local/bin/wh-tucows

E_NOARGS=75

if [ -z "$1" ]
then
echo "Usage: `basename $0` [domain-name]"
exit $E_NOARGS
fi

# Check script name and call proper server.


case `basename $0` in # Or: case ${0##*/} in
"wh" ) whois $1@whois.tucows.com;;
"wh-ripe" ) whois $1@whois.ripe.net;;

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -163- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


"wh-apnic" ) whois $1@whois.apnic.net;;
"wh-cw" ) whois $1@whois.cw.net;;
* ) echo "Usage: `basename $0` [domain-name]";;
esac

exit $?
நிரல விளக்கம்:
பமபல குறிப்பிடைப்பட்டுளள இந்த நிரலமொனத, மூன்ற சவெவ்பவெற வெழங்கிகளில சசெயலபட்டு,
அதனுடடைய சபயரிடனச் செரிவெரக் கண்டுணர உதவுகிறத. இந்நிரலிடனக் கண்டிப்பமொக பவெர்ப்பயனர்
மட்டுபம இயக்க பவெண்டும். இடத நெமொம் ripe.net, cw.net, radb.net ஆகிய தளங்களில இயக்குகிபறமொம்.
குறிப்பிட்டை தளங்கள செரியமொன சபயர் சகமொண்டைடவெயமொ என்படதக் கண்டுசகமொண்டு அடத சவெளியீடைமொகத்
தரகிறத.
நிரல 117:
கீபழ ஒபர நிரலமொகக் சகமொடுக்கப்படைமொமல, தனித்தனி கட்டைடளவெரிகளமொகக் சகமொடுக்கப்பட்டுளளத.
அடனத்தம் எளிடமயமொன கட்டைடளவெரிகளதமொம். எவ்வெமொற echo என்ற கட்டைடளயமொனத சவெவ்பவெற
வெடகயமொக பயன்படுத்தப்படுகிறத என்படத எளிதமொக அறிய உதவுகிறத. இடத ச சமமொழியில escape
sequences என்ற அடழக்கிறமொர்கள. ச சமமொழி சகமொண்படை Linux எழதப்பட்டுளளதமொல, இதவும் அபத
பபமொல சசெயலபடுகிறத.
bash$ echo hello\!
hello!
bash$ echo "hello\!"
hello\!

bash$ echo \
>
bash$ echo "\"
>
bash$ echo \a
a
bash$ echo "\a"
\a

bash$ echo x\ty


xty
bash$ echo "x\ty"
x\ty

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -164- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


bash$ echo -e x\ty
xty
bash$ echo -e "x\ty"
x y

கரலச்சசெமொற்கள:
உயர் நிடல கணினி சமமொழிகள - high level computer languages
முடனயக் குறநிரல - shellscript
முழஎண் - integer
பகமொடவெ - string
மமொறி - variable
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -165- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – 34 தப்பிடும் விரசெகள
(escape sequences)

ஓடும் குறநிரல ஓடிடும் வெழியில


சசமமொழி சகமொணர்ந்த சீரத விடசெயில
தமொபன விலகி தீர்வுற் பறமொடிடை
தடணசசெய் விக்கும் தப்பிடும் விடசெபய.
- நிரற்பமொ 34

நிரற்பமொவிளக்கம்:
சதமொடைர்ந்த ஓடிக் சகமொண்டிரக்கும் குறநிரலமொனத (script), அத தமொனமொய் சசெயலபடும் வெழியில
சசமமொழியில சகமொண்டுளள சீரமொய் உதவிடும் தப்புவிக்கும் விடசெகளமொனடவெ (escape sequence),
நிரலிலிரந்த தமொனமொய் விலகி ஓடித் தீர்டவெத் பதடி அடடைந்திடை உதவி சசெய்திடும். பின்வெரம்
அட்டைவெடணயமொனத எந்சதந்த விடசெகளுக்கு என்சனன்ன சபமொரள என்படத அறியத்தரகின்றத.
தப்பிடும் விடசெகள விளக்கம்
\n means newline
\r means return
\t means tab
\v means vertical tab
\b means backspace
\a means alert (beep or flash)
\0xx translates to the octal ASCII equivalent of 0nn, where nn is a string of digits

நிரல 118
#!/bin/bash
#niral118.sh
# escaped.sh: escaped characters
#############################################################
### First, let's show some basic escaped-character usage. ###
#############################################################
# Escaping a newline.
# ------------------
echo ""
echo "This will print
as two lines."
# This will print
# as two lines.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -166- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


echo "This will print \
as one line."
# This will print as one line.
echo; echo
echo "============="
echo "\v\v\v\v" # Prints \v\v\v\v literally.
# Use the -e option with 'echo' to print escaped characters.
echo "============="
echo "VERTICAL TABS"
echo -e "\v\v\v\v" # Prints 4 vertical tabs.
echo "=============="
echo "QUOTATION MARK"
echo -e "\042" # Prints " (quote, octal ASCII character 42).
echo "=============="

# The $'\X' construct makes the -e option unnecessary.

echo; echo "NEWLINE and (maybe) BEEP"


echo $'\n' # Newline.
echo $'\a' # Alert (beep).
# May only flash, not beep, depending on terminal.

# We have seen $'\nnn" string expansion, and now . . .

# =================================================================== #
# Version 2 of Bash introduced the $'\nnn' string expansion construct.
# =================================================================== #

echo "Introducing the \$\' ... \' string-expansion construct . . . "


echo ". . . featuring more quotation marks."

echo $'\t \042 \t' # Quote (") framed by tabs.


# Note that '\nnn' is an octal value.

# It also works with hexadecimal values, in an $'\xhhh' construct.


echo $'\t \x22 \t' # Quote (") framed by tabs.
# Thank you, Greg Keraunen, for pointing this out.
# Earlier Bash versions allowed '\x022'.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -167- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


echo

# Assigning ASCII characters to a variable.


# ----------------------------------------
quote=$'\042' # " assigned to a variable.
echo "$quote Quoted string $quote and this lies outside the quotes."

echo

# Concatenating ASCII chars in a variable.


triple_underline=$'\137\137\137' # 137 is octal ASCII code for '_'.
echo "$triple_underline UNDERLINE $triple_underline"

echo

ABC=$'\101\102\103\010' # 101, 102, 103 are octal A, B, C.


echo $ABC

echo
escape=$'\033' # 033 is octal for escape.
echo "\"escape\" echoes as $escape"
# no visible output.
echo
exit 0
நிரல விளக்கம்:
இந்த நிரலமொனத, சகமொடுக்கப்பட்டுளள ஒவ்சவெமொர தப்பிடும் விடசெகடளயும் விளக்குவெதமொக
அடமந்தளளத. இந்நிரல சவெளிப்படடையமொன தன் விளக்கமளிப்பதமொக அடமக்கப்பட்டுளளத.
நிரல 119:
#!/bin/bash
# niral119.sh
# Requires version 4.2+ of Bash.
key="no value yet"
while true; do
clear
echo "Bash Extra Keys Demo. Keys to try:"
echo
echo "* Insert, Delete, Home, End, Page_Up and Page_Down"
echo "* The four arrow keys"
echo "* Tab, enter, escape, and space key"

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -168- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


echo "* The letter and number keys, etc."
echo
echo " d = show date/time"
echo " q = quit"
echo "================================"
echo

# Convert the separate home-key to home-key_num_7:


if [ "$key" = $'\x1b\x4f\x48' ]; then
key=$'\x1b\x5b\x31\x7e'
# Quoted string-expansion construct.
fi

# Convert the separate end-key to end-key_num_1.


if [ "$key" = $'\x1b\x4f\x46' ]; then
key=$'\x1b\x5b\x34\x7e'
fi

case "$key" in
$'\x1b\x5b\x32\x7e') # Insert
echo Insert Key
;;
$'\x1b\x5b\x33\x7e') # Delete
echo Delete Key
;;
$'\x1b\x5b\x31\x7e') # Home_key_num_7
echo Home Key
;;
$'\x1b\x5b\x34\x7e') # End_key_num_1
echo End Key
;;
$'\x1b\x5b\x35\x7e') # Page_Up
echo Page_Up
;;
$'\x1b\x5b\x36\x7e') # Page_Down
echo Page_Down
;;
$'\x1b\x5b\x41') # Up_arrow
echo Up arrow

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -169- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


;;
$'\x1b\x5b\x42') # Down_arrow
echo Down arrow
;;
$'\x1b\x5b\x43') # Right_arrow
echo Right arrow
;;
$'\x1b\x5b\x44') # Left_arrow
echo Left arrow
;;
$'\x09') # Tab
echo Tab Key
;;
$'\x0a') # Enter
echo Enter Key
;;
$'\x1b') # Escape
echo Escape Key
;;
$'\x20') # Space
echo Space Key
;;
d)
date
;;
q)
echo Time to quit...
echo
exit 0
;;
*)
echo You pressed: \'"$key"\'
;;
esac
echo
echo "================================"
unset K1 K2 K3
read -s -N1 -p "Press a key: "
K1="$REPLY"

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -170- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


read -s -N2 -t 0.001
K2="$REPLY"
read -s -N1 -t 0.001
K3="$REPLY"
key="$K1$K2$K3"

done
exit $?
நிரல விளக்கம்:
இந்த நிரலமொனத பயனர் சகமொடுத்திடும் உளளிடு விடசெகள என்சனன்ன என்படத எடுத்தக் கமொட்டுவெதமொக
அடமந்தளளத.

கரலச்சசெமொற்கள:
குறநிரல – script
சீரத விடசெயில – escape sequence
தப்பிடும் விடசெ – escape sequence
தடணசசெய் – assist

(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -171- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – 35 சவளிபயறம்
வழிக்கடடரள (exit command)

குறித்த சசெயலும் குறித்த வெரிகளும்


தடடையற நெடைந்த சதளிவுற நிற்க
பமலும் கட்டைடள மிகுந்தி ரப்பினும்
சவெளிபய சசெலலும் வெழிக்கட் டைடளபய.
- நிரற்பமொ 35

நிரற்பமொவிளக்கம்:
குறிப்பிட்டை கட்டைடளகடளக் சகமொண்டு குறிப்பிட்டை சசெயலகளமொனடவெ சசெய்த முடித்த பிறகு, இன்னும்
பவெற ஏபதனும் கட்டைடளகள இரந்தமொல, அவெற்டற இயக்கமொமல நிரலிலிரந்த சவெளிபயற
வெழிக்கட்டைடளயமொனத உதவுகிறத.
நிரல 120
#!/bin/bash
#niral120.sh
echo hello
echo $? # Exit status 0 returned because command executed successfully.

lskdf # Unrecognized command.


echo $? # Non-zero exit status returned -- command failed to execute.

echo

exit 113 # Will return 113 to shell.


# To verify this, type "echo $?" after script terminates.

# By convention, an 'exit 0' indicates success,


#+ while a non-zero exit value means an error or anomalous condition.
நிரல விளக்கம்:
இங்கு echo $? என்ற கட்டைடள, சுழியத்டத சவெளியீடைமொகத் தரமமொயின் அதற்கு முந்டதய கட்டைடளயமொனத
சபமொறியில செரியமொன முடறயில இயங்கியிரக்கிறத என்ற சபமொரள. மமொறமொக, சுழியமலலமொத பவெற
ஏபதனும் எண்டண சவெளியீடைமொகத் தரமமொயின், முந்டதய கட்டைடளயமொனத தவெறமொன முடறயில
இயங்கியிரக்கிறத என்ற சபமொரள. பமபல சகமொடுக்கப்பட்டுளள நிரல இதடனச் சசெம்டமயமொக
விளக்குவெதமொக அடமகிறத.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -172- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நிரல 121:
#!/bin/bash
# niral121.sh
true # The "true" builtin.
echo "exit status of \"true\" = $?" #0

! true
echo "exit status of \"! true\" = $?" # 1
# Note that the "!" needs a space between it and the command.
# !true leads to a "command not found" error
#
# The '!' operator prefixing a command invokes the Bash history mechanism.

true
!true
# No error this time, but no negation either.
# It just repeats the previous command (true).

# =========================================================== #
# Preceding a _pipe_ with ! inverts the exit status returned.
ls | bogus_command # bash: bogus_command: command not found
echo $? # 127

! ls | bogus_command # bash: bogus_command: command not found


echo $? #0
# Note that the ! does not change the execution of the pipe.
# Only the exit status changes.
# =========================================================== #
நிரல விளக்கம்:
இந்த நிரலும் ஏறத்தமொழ அபத சசெய்தியிடன விளக்குவெதமொக இரந்தமொலும், இங்கு true, !true ஆகிய வெரிகள
பசெர்க்கப்பட்டுளளன. true என்பத உண்டமயமொக உளள பபமொத இயங்குவெதமொகவும், !true என்பத
உண்டமயலலமொத எந்தசவெமொர கட்டைடளக்கும் இயங்குவெதமொகவும் இரக்கும் வெண்ணம்
அடமக்கப்பட்டுளளத.
கீபழ உளள அட்டைவெடணயமொனத சவெவ்பவெற சவெளிபயறம் நிடல எண்கடளயும் அவெற்றிற்கமொன
விளக்கங்கடளயும் அளிக்கிறத.
சவெளிபயறம் நிடல எண் சபமொரள எடுத்தக்கமொட்டு
1 சபமொதவெமொன பிடழச்சசெய்திகள let "var1 = 1/0"
2 Bash ல உளளவெற்டறத் empty_function() {}

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -173- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


தவெறமொகப் பயன்படுத்தினமொல
வெரவெத.
126 குறிப்பிட்டை கட்டைடள
அடழக்கப்பட்டைத ஆனமொல /dev/null
இயக்கப்படைவிலடல.
127 கட்டைடளவெரி இலடல
illegal_command
128 தவெறமொன அளவுரவுடைன் exit 3.14159
சவெளிபயறகிறத.
128+n உறதியமொன பிடழக்கமொன kill -9 $PPID of script
செமிக்டஞ அலலத தமொடடை
130 நிரல ctrl+c சகமொண்டு Ctl-C
நிறத்தப்படுகிறத.
255* சவெளிபயற நிடல exit -1
எண்ணமொனத எலடலக்கு
சவெளிபய உளளத.

கரலச்சசெமொற்கள:
வெரிகள - commands
தடடையற – without interruption
கட்டைடள மிகுந்தி ரப்பினும் – more commands need to run
வெழிக்கட்டைடள – exit command

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -174- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சுழி – zero
சுழியமலலமொத – non-zero
மமொறமொக – alternatively
தமொடடை – signal
அளவுர – parameter
உறதியமொன பிடழ – fatal error

(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -175- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – 36 உளளமொர்ந்த
கடடரமப்புக் கடடரளகள (Internal Commands and Builtins)

முன்னிர உளளமொர் மூத்த கட்டைடள


என்சனன வெடகயில ஏதகிறத என்படத
பின்வெரம் நிரலகள பகுத்தமொய் ஆய்ந்த
சவெளியிடு கமொட்டி விளக்கு கிறபத.
- நிரற்பமொ 36

நிரற்பமொவிளக்கம்:
பின்வெரம் குறநிரலகளமொனடவெ ஏற்கனபவெ சபமொறியில உளள பலபவெற முன்னிரப்பு கட்டைடளகடளக்
சகமொண்டு என்சனன்ன சசெய்யலலமொம் என்படத எடுத்தக்கமொட்டி விளக்குகின்றன.
நிரல 122
#!/bin/bash
#niral122.sh
#Internal Commands and Builtins
#A script that spawns multiple instances of itself
# spawn.sh

PIDS=$(pidof sh $0) # Process IDs of the various instances of this script.


P_array=( $PIDS ) # Put them in an array (why?).
echo $PIDS # Show process IDs of parent and child processes.
let "instances = ${#P_array[*]} - 1" # Count elements, less 1.
# Why subtract 1?
echo "$instances instance(s) of this script running."
echo "[Hit Ctl-C to exit.]"; echo

sleep 1 # Wait.
sh $0 # Play it again, Prasanna.

exit 0 # Not necessary; script will never get to here.


# Why not?

# After exiting with a Ctl-C,


#+ do all the spawned instances of the script die?

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -176- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


# If so, why?

# Note:
# ----
# Be careful not to run this script too long.
# It will eventually eat up too many system resources.

# Is having a script spawn multiple instances of itself


#+ an advisable scripting technique.
#Generally, a Bash builtin does not fork a subprocess when it executes within a script. An external system command or
filter in a script usually will fork a subprocess.

நிரல விளக்கம்:
குறித்த நிரலமொனத, அடனத்த நிகழ் பநெர சசெயலகளின் எண்கடள எடுத்தக் சகமொண்டு அடதபய திரம்பத்
திரம்பச் சசெய்யும் வெண்ணம் அடமந்தளளத. Ctrl+c விடசெகடள அழத்தி இடத ஒர முடிவுக்குக்
சகமொண்டு வெரலமொம். இடதச் சசெய்த பமொர்த்த சவெளியீடு அறிக.
நிரல 123:
#!/bin/bash
# niral123.sh

# Embedding a linefeed?
echo "Why doesn't this string \n split on two lines?"
# Doesn't split.

# Let's try something else.


echo

echo $"A line of text containing


a linefeed."
# Prints as two distinct lines (embedded linefeed).
# But, is the "$" variable prefix really necessary?

echo
echo "This string splits
on two lines."
# No, the "$" is not needed.
echo
echo "---------------"
echo

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -177- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


echo -n $"Another line of text containing
a linefeed."
# Prints as two distinct lines (embedded linefeed).
# Even the -n option fails to suppress the linefeed here.

echo
echo
echo "---------------"
echo
echo
# However, the following doesn't work as expected.
# Why not? Hint: Assignment to a variable.
string1=$"Yet another line of text containing
a linefeed (maybe)."

echo $string1
# Yet another line of text containing a linefeed (maybe).
# ^
# Linefeed becomes a space.
நிரல விளக்கம்:
இந்த நிரலமொனத ஒர உடரயிடனக் கிடைத்த அலலத உட்சபமொதியப் பயன்படுகிறத. இத எவ்வெமொற ஒர
வெரியிலிரந்த மற்சறமொர வெரிக்கு குறிப்பிட்டை உடரயிடன மமொற்றகிறத என்படதயும் எளிதில
விளக்குகிறத.

நிரல 124:
#!/bin/bash
#niral124.sh
# printf demo

declare -r PI=3.14159265358979 # Read-only variable, i.e., a constant.


declare -r DecimalConstant=31373

Message1="Greetings,"
Message2="Earthling."

echo

printf "Pi to 2 decimal places = %1.2f" $PI

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -178- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


echo
printf "Pi to 9 decimal places = %1.9f" $PI # It even rounds off correctly.

printf "\n" # Prints a line feed,


# Equivalent to 'echo' . . .

printf "Constant = \t%d\n" $DecimalConstant # Inserts tab (\t).

printf "%s %s \n" $Message1 $Message2

echo

# ==========================================#
# Simulation of C function, sprintf().
# Loading a variable with a formatted string.

echo

Pi12=$(printf "%1.12f" $PI)


echo "Pi to 12 decimal places = $Pi12" # Roundoff error!

Msg=`printf "%s %s \n" $Message1 $Message2`


echo $Msg; echo $Msg

# As it happens, the 'sprintf' function can now be accessed


#+ as a loadable module to Bash,
#+ but this is not portable.

exit 0
Formatting error messages is a useful application of printf

E_BADDIR=85

var=nonexistent_directory

error()
{
printf "$@" >&2
# Formats positional params passed, and sends them to stderr.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -179- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


echo
exit $E_BADDIR
}

cd $var || error $"Can't cd to %s." "$var"


நிரல விளக்கம்: (printf command in shell script)
இலினக்சு இயங்குதளம் முழக்கபவெ சசமமொழியில இடழத்த எழதப்பட்டைடமயமொல, ச சமமொழியில
பயின்ற வெரம் கட்டைடளகடள நெமொம் பமம்பபமொக்கமொக சற்சல மமொற்றங்களுடைன் எழதி சவெளியீட்டிடன
அறியலமொம். printf கட்டைடளயமொனத ச சமமொழியில உளள ஒர பதிப்பிக்கும் கட்டைடளவெரியமொகும், நெமொம்
இங்கும் அடதக் சகமொண்படை உடரகடளக் டகயமொண்டு விடடையறியலமொம், அதில பயின்ற வெரம் தப்பிடும்
விடசெகடளயும் இதில பயன்படுத்தலமொம்.

கரலச்சசெமொற்கள:
முன்னிர - default
ஏதகிறத - கமொரணமமொகிறத - reason of
நிரலகள - scripts
சவெளியிடு - output
உட்சபமொதிய - embedded
உடர - text
உளளமொர் - built-in
தப்பிடும் விடசெகள - escape sequences
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -180- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


சசெம்சமமொழியில் கற்பபமொம் சஷெல் ஸ்கிரிப்ட – 37 இரடரட அரடப்புக்
குறி

கணிதச் பசெமொதடன கணினியில சசெய்திடை


சறிய நிரலில சசெம்டம சபமொரந்த
சீர்மிகு வெண்ணம் சசெயற்படை வெந்திடும்
இரட்டடை அடடைப்பு ஏரணக் குறிபய.
நிரற்பமொ - 37

நிரற்பமொ விளக்கம்:
கணினிச் பசெமொதடனகடள எளிடமயமொன வெண்ணம் கணினியில சசெய்திடை இரட்டடை
அடடைப்புக்குறியமொனத ஏரணப்பிடழயற பயன்படுத்திடைல பவெண்டும்.
நிரல 124:
#!/bin/bash
# arith-tests.sh
# Arithmetic tests.

# The (( ... )) construct evaluates and tests numerical expressions.


# Exit status opposite from [ ... ] construct!

(( 0 ))
echo "Exit status of \"(( 0 ))\" is $?." #1

(( 1 ))
echo "Exit status of \"(( 1 ))\" is $?." #0

(( 5 > 4 )) # true
echo "Exit status of \"(( 5 > 4 ))\" is $?." #0

(( 5 > 9 )) # false
echo "Exit status of \"(( 5 > 9 ))\" is $?." #1

(( 5 == 5 )) # true
echo "Exit status of \"(( 5 == 5 ))\" is $?." # 0

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -181- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


# (( 5 = 5 )) gives an error message.

(( 5 - 5 )) #0
echo "Exit status of \"(( 5 - 5 ))\" is $?." #1

(( 5 / 4 )) # Division o.k.
echo "Exit status of \"(( 5 / 4 ))\" is $?." #0

(( 1 / 2 )) # Division result < 1.


echo "Exit status of \"(( 1 / 2 ))\" is $?." # Rounded off to 0.
#1

(( 1 / 0 )) 2>/dev/null # Illegal division by 0.


# ^^^^^^^^^^^
echo "Exit status of \"(( 1 / 0 ))\" is $?." #1

# What effect does the "2>/dev/null" have?


# What would happen if it were removed?
# Try removing it, then rerunning the script.

# ======================================= #

# (( ... )) also useful in an if-then test.

var1=5
var2=4

if (( var1 > var2 ))


then #^ ^ Note: Not $var1, $var2. Why?
echo "$var1 is greater than $var2"
fi # 5 is greater than 4

exit 0
நிரல விளக்கம்:
பமற்கூறிய நிரலில, இரண்டு மமொறிகடள சவெவ்பவெற விதமமொக ஒப்பீடு சசெய்வெத என்படதப் பற்றி
விளக்கப்பட்டுளளத. ஒப்பீடு என்பத, இரண்டு எண்கள கீழ்வெரமமொற எந்த வெடகயிலும் இரக்கலமொம்.
1. நிகரமொக இரப்பத (equals)
2. அதிகமமொக இரப்பத (more than)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -182- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


3. குடறவெமொக இரப்பத (less than)
4. அதிகமமொக நிகரமொக இரப்பத (more than or equal)
5. குடறவெமொக நிகரமொக இரப்பத (less than or equal)

ஆகியடவெ டகயமொளப்பட்டுளளன.
நிரல 125:
#!/bin/bash
# broken-link.sh
# Written by PNA Prasanna
# Used in ABS Guide with permission.

# A pure shell script to find dead symlinks and output them quoted
#+ so they can be fed to xargs and dealt with :)
#+ eg. sh broken-link.sh /somedir /someotherdir|xargs rm
#
# This, however, is a better method:
#
# find "somedir" -type l -print0|\
# xargs -r0 file|\
# grep "broken symbolic"|
# sed -e 's/^\|: *broken symbolic.*$/"/g'
#
#+ but that wouldn't be pure Bash, now would it.
# Caution: beware the /proc file system and any circular links!
################################################################

# If no args are passed to the script set directories-to-search


#+ to current directory. Otherwise set the directories-to-search
#+ to the args passed.
######################

[ $# -eq 0 ] && directorys=`pwd` || directorys=$@

# Setup the function linkchk to check the directory it is passed


#+ for files that are links and don't exist, then print them quoted.
# If one of the elements in the directory is a subdirectory then
#+ send that subdirectory to the linkcheck function.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -183- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


##########

linkchk () {
for element in $1/*; do
[ -h "$element" -a ! -e "$element" ] && echo \"$element\"
[ -d "$element" ] && linkchk $element
# Of course, '-h' tests for symbolic link, '-d' for directory.
done
}

# Send each arg that was passed to the script to the linkchk() function
#+ if it is a valid directoy. If not, then print the error message
#+ and usage info.
##################
for directory in $directorys; do
if [ -d $directory ]
then linkchk $directory
else
echo "$directory is not a directory"
echo "Usage: $0 dir1 dir2 ..."
fi
done

exit $?
நிரல விளக்கம்:
இந்த நிரலில எண்கள மட்டும் டகயமொளப்படைமொமல, பகமொப்புகள மற்றம் அடடைவுகள
டகயமொளப்பட்டுளளன. அடவெ செரிவெர ஒன்ற மற்சறமொன்றடைன் பசெர்ந்த ஒப்பிடைப்படும் வெண்ணம்
டகயமொளப்பட்டுளளன.

கரலச்சசெமொற்கள:
கணிதச் பசெமொதடன – arithmetic operations
இரட்டடை அடடைப்புக் குறி – double brackets
ஏரணம் - logic
(கற்பபமொம்)

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -184- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


முடிவரர:
முடிவுடர என்றதம் இவ்வெளவுதமொன் என்ற எண்ண பவெண்டைமொம். இந்நூலமொனத ஒர எளிய
கற்றலுக்கமொன இனிய சதமொடைக்கம் தமொன். தமிழில கற்பறமொரக்கு எளிடமயமொகப் புரியும் படி
அளிக்கப்பட்டுளளத. நூலில முற்றம் பபமொடைமொமல, “கற்பபமொம்” என்ற வெடரந்திரப்பதமொல, சதமொடைர்ந்த
சஷெல ஸ்கிரிப்ட்டிடனக் கற்ற வெர இந்நூல உதவும் என்ற நெம்புகிபறன்.
ஒர புதிய சபரிய நிரடல எங்பகனும் கண்டைமொல, அடத இந்நூடலக் சகமொண்டு, ஒப்பிட்டு ஒர
குறிப்பமொக பமொர்த்தமொல அந்தப்புதிய நிரலின் பபமொக்குப் புரியும் வெண்ணபம இந்நூல
எடுத்தமொளப்பட்டுளளத.

எளிய வரகயில் இனிய தமிழில்


ஏரணப் பிரழயற இயற்றிப் பழக
கடின நிரலும் ரகயில் தவழம்
“கற்பபமொம்” சகமொண்டு கற்ற வரபவ!!
- நிரற்பமொ 38

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -185- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நூல் ஆசரியர் :

நெமொன்...
சபங்களூர. பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.பில.
திண்டுக்கல தூய மரியன்டனப் பளளியில முடித்த, திரச்ச தூய வெளனமொர் கலலூரியில
கணினி அறிவியலில முதகடலப் பட்டைம் படித்த முடித்தளபளன். மதடர கமொமரமொசெர்
பலகடலக்கழகத்தில எம்.பில சதமொடைர்ந்தளபளன். இன்ற சபங்களூரில ஓர் சமன்சபமொரள
நிறவெனத்தில சமன்சபமொரள கட்டுமமொனர் ஆகபவெடல பமொர்த்தக்சகமொண்டிரக்கிபறன்.
விர்ஜின் பிரசென்னமொடவெ 2008 இல திரமணம் முடித்தவென், இன்ற பஹமிலடைன்,
பஹரிங்டைன் ஆகிய இர ஆண் மகவுகளின் தந்டத. பநெரம் கிடடைக்கும் சபமொழசதலலமொம்,
சபமொழதமொக்கமமொக கணினிக்கடதகள, கட்டுடரகள எழதவெத, கணினித் சதமொடைர் எழதவெத
ஆகியவெற்டறச் சசெய்தஇன்புறகிபறன். தமிழ் கம்ப்யூட்டைர் இதழில சவெளியமொன
சசெம்சமமொழியில கற்பபமொம் சஷெல ஸ்கிரிப்ட் என்ற சதமொடைடரத் சதமொகுத்த இந்நூலில
வெழங்கியுளபளன்.

பமொல் சஜெயசீலன் நிர்மல் ஆபரமொக்கிய பிரசென்னமொ என்ற இயற்சபயர் சுருங்கி, பமொ.நி.ஆ. பிரசென்னமொ
என்ற செமொன்றிதழ்களுக்கமொக மமொற்றப்படடது. அதுபவ பமலும் சுருங்கி பணியமொ. பிரசென்னமொ
என்றமொயிற்ற.

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -186- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,


நன்றி...

சசெம்சமமொழியில கற்பபமொம்சஷெல ஸ்கிரிப்ட் -187- சபங்களூர பணியமொ. பிரசென்னமொ எம்.எஸ்.ச. எம்.ஃபில.,

You might also like