[] செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் பணியா. பிரசன்னா askprasanna@gmail மின்னூல் வெளியீடு : FreeTamilEbooks.com அட்டைப்படம், மின்னூலாக்கம் : மீ.வேல். பிரசன்னா udpmprasanna@gmail.com உரிமை : Creative Commons Attribution - ShareAlike 4.0 International License. இந்நூல் பெற்று, வளர்த்து, தவறிடும் போது தடுத்தாட்கொண்டு அறநெறியில் பேணிக்காத்திடும் எனது அம்மாவிற்குக் காணிக்கை. [] சி.மரிய மதலேனா பி.ஏ.பி.எட்., இடைநிலை ஓய்வு ஆசிரியை பொருளடக்கம் நூலுரை: இளவலுரை: எழிலுரை: நன்றிகள்: செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் - பகுதி 1 செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – பகுதி 2 தரவு வகைகள் செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் - 3 செயல் வகைகள், நிலைகள் செம்மொழியில்கற்போம்ஷெல்ஸ்கிரிப்ட் – 4 இயங்குதளத்தின்ஏற்றநிலை, மாறிகளைப் பயன்படுத்துதல் செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 5 இயங்குதளத்தின் ஏழு ஓடு நிலைகள் செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் - 6 செயற்பாடு அல்லது நிரல்துண்டு (Functions) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் 7 - கட்டுப்பாட்டு அமைவுகள் (if condition) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட்– 8 சுழற்சி அல்லது ஆகக்கட்டளை (for loop) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட்– 9 சுழற்சி அல்லது ஆகக்கட்டளை (for loop) தொடர்ச்சி செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் -10 வளைவுக் கட்டளையின் வேறு வகைகள் செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் -11 பொழுதெலாம் கட்டளை அல்லது while loop – entry controlled loop செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் -12 வரையிலும் கட்டளை அல்லது until loop – exit controlled loop செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் -13. தேர்வுக் கட்டளை அல்லது தேர்வாணை (case statement) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் -14. தேர்வுக் கட்டளை இருந்தால் கட்டளை வேறுபாடுகள் (case statement vs else if ladder) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் -15. சுழற்சியில் முறிவுக்கட்டளை (break statement in loop) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் -16. சுழற்சியில் தொடர் கட்டளை அல்லது இடைவிடாக் கட்டளை (continue statement in loop) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் -17 கட்டளைவரி அளவுருக்கள்அல்லதுகட்டளைவரிதருமதிப்புக்கள் (command line parameters or command line arguments) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் -18.கட்டளைவரி அளவுருக்கள் அல்லது கட்டளைவரி தருமதிப்புக்கள் (command line parameters or command line arguments) - தொடர்ச்சி செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் -19. உறக்கக் கட்டளை அல்லது தூக்கக் கட்டளை (sleep command) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் -20. அளவுருக்கள் அல்லது தருமதிப்புக்கள் (command line arguments or command line parameters) தொடர்ச்சி செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் -21 செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 22 மாற்றுக் கட்டளை (shift command) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 23 Trap command (கண்ணி -கட்டளை) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 24 (getopts command) பொருத்தம் பெறும் கட்டளை செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 25 (cut command) வெட்டுக் கட்டளை செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 26 (paste command) ஒட்டுக் கட்டளை செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 27 (tput command) இடு கட்டளை செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 28 (tput command) இடு கட்டளை செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 29 (tput command) இடு கட்டளை தொடர்ச்சி செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 30 (nohup command) செயலிழக்காக் கட்டளை செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 31 செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 32 செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 33 செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 34 தப்பிடும் விசைகள் (escape sequences) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 35 வெளியேறும் வழிக்கட்டளை (exit command) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 36 உள்ளார்ந்த கட்டமைப்புக் கட்டளைகள் (Internal Commands and Builtins) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 37 இரட்டை அடைப்புக் குறி முடிவுரை: நூல் ஆசிரியர் : நூலுரை: “செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட்” இந்தத் தலைப்பைச் சொல்லும் பொழுதே ஏதோ திருமொழியைச் சொல்கின்றோம் என மனதிற்குத் தோன்றுகிறது. இலினக்சு (Linux) இயங்குதளத்தில் ஏறத்தாழ பன்னிரெண்டு ஆண்டுகள் பட்டறிவு இருப்பினும், இப்பொழுதுதான் இது போன்ற ஒரு நூலைத் தமிழில் தரத் தருணம் பிறந்திருக்கிறது. இந்நூலில் ஒவ்வொரு பகுதியிலும், அதில் அமைந்துள்ள ஆங்கிலக் கலைச்சொற்களுக்கு இணையாகத் தமிழ்ச்சொற்களைத் தந்திருக்கிறேன். செம்மொழியில் என்று நூல் தொடங்குவதால், ஒவ்வொரு பகுதியிலும் ஒரு கவிதை வரைந்திருக்கிறேன். தமிழ் வழிக்கல்வி கற்றோர் இதை பெரிதும் விரும்புவர். இந்தக் கவிதைகள் புதுக்கவிதையில் சேராமல், நான் என்றோ படித்த மரபுக் கவிதையின் தாக்கத்தில் விளைந்தவை. இவை முழுமையாக எந்தப் பா வகையிலும் சேராமல் இருப்பினும், மரபுக்கவிதை போன்றே அமைந்திருப்பது சிறப்பு. இலினக்சு ஏற்கனவே தெரிந்திருப்போர், இந்நூலைப் படிப்பின் ஷெல் ஸ்கிரிப்ட்டை எளிய தமிழில் கற்கலாம். நான் சொல்கிறேன், நீங்கள் கேளுங்கள் என்ற வகையில் நூல் இல்லாமல், கற்போம் என்ற பதத்தின் மூலம், நானும் உங்களுடன் சேர்ந்து கற்கிறேன் என்பதை அறியத்தருகிறேன். எனக்குத் தெரிந்தவைகளை இயன்ற வரையில் இனிய தமிழில் எடுத்துரைக்க முன்றிருக்கிறேன். ஒவ்வொரு பகுதியிலும் பல நிரல்கள் இடம் பெற்றிருக்கின்றன. அவற்றின் விளக்கங்கள் பத்திகளில் இடம் பெற்றுள்ளன. நிரல்+பா=நிரற்பா என்ற கிளவியின் மூலம் நானறிந்த தமிழை நாடறியச் செய்ய விழைகின்றேன். நூலில், முதலில் நிரற்பா வரும். பிறகு அதற்கான விளக்கம் உண்டு. நிரல்களுக்கு வரிசை எண்கள் தரப்பட்டுள்ளன. புரியாத சொற்களுக்கு அல்லது பொதுவாகப் பயன்படுத்தும் ஆங்கிலப் பதங்களுக்கு விளக்கங்கள் அடைப்புக்குறிகளுக்குள் வழங்கப்பட்டுள்ளன. பகுதிகளின் ஈற்றில் கலைச்சொற்களும் அவற்றிற்கான விளக்கங்களும் ஆங்கிலத்தில் விளக்கப்பட்டுள்ளன. படங்கள், அதற்கான விளக்கங்கள், அட்டவணைகள் ஆகியனவும் அளிக்கப்பட்டுள்ளன. “கற்போம்” என்று தமிழ் கம்ப்யூட்டர் இதழில் தொடராக வெளிவந்த இந்தக் கட்டுரைகளைத் தொகுத்து ஒரு நூலாகத் தருவதில் பெருமகிழ்ச்சி கொள்கிறேன். எனக்கு இது மிகவும் பயனுள்ள நூலாகத் தெரிகின்றது. உங்களுக்கும் அதே உணர்வு ஏற்படும் என்றே கருதுகின்றேன். இளவலுரை: [] உலகெங்கும் இருக்கின்ற அன்புத் தமிழ் ஆர்வலர்களுக்கு, எனது பணிவான வணக்கங்கள். எனது தமையனார் பணியா. பிரசன்னா அவர்களின் செம்மொழியில் கற்போம் ஷெல்ஸ்கிரிப்ட் என்ற இந்நூல் கணினி அறிவியலில் ஒரு மைல் கல். “நீரின்றி அமையாது உலகு” என்ற கூற்றைப் போல், கணினி, கைபேசி, மற்றும் எண்ணிலடங்கா மின் கருவிகள்(Devices /Gedgets) இயங்கத் தேவை ஒரு வலுவான இயங்குதளம் (Operting System). அத்தகைய இயங்குதளங்களுள் Linux முடிசூடா மா மன்னன். அந்த Linux இயங்குதளத்தில் பணியா.பிரசன்னா மின்னூலாசிரியரின், திறன் என்பது நான் அருகில் இருந்து கண்டு வியந்தது. அவர் தமிழின் பால் கொண்டுள்ள அவா தமிழ் கம்ப்யூட்டர் இதழின் வாயிலாக தமிழகமெங்கும் விரிந்து பரவலாயிற்று. பின்னாளில், இத்தகு மின்னூலின் வாயிலாக உலகத் தமிழர்களின் (குறிப்பாக கனடா, நார்வே,ஃபிரான்ஸ், மற்றும் ஈழம்) அன்பைப் பெற்று தொடர்ந்து வீர நடை போடுகிறது. இந்நூலில் அவர் மிகச்சிறப்பாக ஆங்காங்கே சிறு நிரற்பாக்களையும் அதன் விளக்கத்தையும் கூறி, படிப்பவரை ஆர்வமடையச் செய்திருக்கிறார். அவர் கணினி அறிவியலை தமிழின் வழியாக மென்மேலும் சிறப்பு பெறச் செய்ய உலகத் தமிழர்களின் ஆதரவு பெருகிட வாழ்த்துகிறேன். அன்புத்தம்பி, பா.அறிவு ஆரோக்கிய இராஜேஷ். மென்பொருள் கட்டுமான மேலாளர், டிசிஎஸ், பெங்களூரு. எழிலுரை: [] நாம் எங்கு செல்கிறோம் என்று நினைத்துப் பார்க்க முடியாத, அளவிற்கு தொழிற்நுட்பமானது வெகு விரைவாக வளர்ந்து வருகிறது. உலக மயமாக்கலின் வாயிலாக, நாம் பல்வேறு வாய்ப்புகளைப் பெற்று நாள் தோறும் வளர்ந்து வருகிறோம். வெளிநாட்டுக்குரிய பள்ளிகளும் இந்தியாவில் அதிகரித்து வருகிறமையால் அனைத்து வெளிநாட்டு வாய்ப்புகளும் எளிமையாய் நம் நாட்டிற்கு வந்து விடுகின்றன. அதைப்போலவே, குழந்தைகளும் தங்கள் தாய்மொழி தவிர்த்து பிறமொழிகளைப் பயில்வதில் ஆர்வம் காட்டி வருகிறார்கள். ஆராய்ச்சி என்பது பிறமொழிகளைப் பயின்று அதன் மூலம் வருவதில்லை. தாய்மொழியில் பயின்று அதைத் திறம்படக் கற்று அதிலிருந்து ஆய்வறிக்கை வருவதே சிறந்தது. தாய்மொழி வழிக்கற்றலே அதன் வழி தடையறச் சிந்திக்கவும் பெரிதும் உதவுகிறது. இன்றைய நாளில் எந்தப் பணி செய்தாலும், அதற்கு கணினி கல்வியறிவு தேவைப்படுகிறது. தமிழ்வழிக் கல்வி கற்றவர்கள் தங்கள் தாய்மொழியில் பயில இந்நூல் பெரிதும் உதவும் என்பதில் எள் முனையளவும் ஐயமில்லை. ஆசிரியரின் அளப்பரிய இப்பணியைப் பாராட்டுகிறேன். தமிழ் வழிக்கல்வி கற்றோர் இந்நூல் பயின்று இன்புற அன்புடன் அழைக்கிறேன். அன்பு மனைவி, விர்ஜின் பிரசன்னா. திட்ட ஒருங்கிணைப்பாளர், செயிண்ட் ஜான்ஸ் கல்லூரி, பெங்களூரு நன்றிகள்: எல்லாம் வல்ல இறைவன் தொடங்கி, இளவலுரை தந்த எனது தம்பிக்கும், எழிலுரை தந்த எனது மனைவிக்கும், மின்னுல் எழிலுற அமைத்த எனது அருமை உடன்பிறப்பு மீ.வேல்.பிரசன்னாவுக்கும், மற்றும் தமிழ் கம்ப்யூட்டர் பதிப்பகத்தாருக்கும் மற்றும் இந்நூல் வெளிவரத் தெரிந்தோ, தெரியாமலோ உதவியோர் அனைவருக்கும் எனது நெஞ்சார்ந்த நன்றிகள். “உளன் எனின் உளன் என்பதும் இலன் எனின் இலன் என்பதும் உலகோர் கூற்றே; உயர்ந்த அன்பே ஆண்டவன் என்பது அறத்தின் வாழ்த்தே !!” [] செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் - பகுதி 1 “பயிற்சியால் வருமாம் பயனர் தோழமை கட்டளை வரிசை கொண்டி யங்கும் தானாய்ச் செயல்கள் தடையறச் செய்யும் ஃபின்லாந் தந்தமென் பொறிக்குறு நிரலே” நிரற்பா-1 முன்னுரை: இயங்குதளம் என்பது பயனருக்கும், கணினிக்குமிடையே இருக்கும் ஒரு இடைமுகப்பாகும். பொதுவாக ஒரு இயங்குதளத்தினை நிறுவல் செய்வது மட்டுமே பயனரின் அனைத்துத் தேவைகளையும் பூர்த்தி செய்து விடாது. பயனரின் அன்றாடத் தேவைகள் தானியங்கு மயமாக்கப்படல் வேண்டும். அப்பொழுதான் பொறிநிறைஞரின் வேலை எளிதாகும். பயனரின் தேவைகள் விரைவாக முடியும். அவ்வாறு தானியங்கு மயமாக்கலுக்கு, இயங்குதளத்தில் உள்ள கட்டளைகளை தொடர்பு படுத்தி நிரல்கள், குறுநிரல்கள் எழுதப்படல் வேண்டும். அவையும் பொதுமயமாக்கலுக்கு ஏற்ற வண்ணம் எழுதப்படல் வேண்டும். அதற்காக நாம் ஷெல் ஸ்கிரிப்ட் கற்க வேண்டும். ஷெல் ஸ்கிரிப்ட் என்றால் என்ன? இலினெக்ஸு இயங்குதளத்தில் பல்லாயிரக்கணக்கான கட்டளைகள் உள்ளன. அவற்றை நமது செயலுக்கு ஏற்ற வண்ணம் எடுத்து குறுநிரல்கள் எழுதப்படுவதே ஷெல் ஸ்கிரிப்ட் என்றழைக்கப்படுகிறது. ஷெல் ஸ்கிரிப்ட் என்பது சி, சி++ போன்று ஓர் உயர்நிலை மொழி கிடையாது. தன்மயமாக்கலுக்காகவே ஷெல்ஸ்கிரிப்ட்டுகள் பயன்படுத்தப் படுகின்றன. கணினி மொழிகளைப் பொதுவாக இரண்டுவகையாகப் பிரிக்கலாம். ஒன்று கம்பைலர் முறை மொழிகள் இரண்டு இன்டர்ப்ரெட்டர் மொழிகள். கம்பைலர் மொழிகள் பிழைகளை மொத்தமாகக் காண்பிக்கும். இன்டர்பிரட்டர் மொழிகள் ஒவ்வொரு படியாகக் (step by step execution) காண்பிக்கும். இதில் ஷெல்ஸ்கிரிப்ட் என்பது இரண்டாம் வகையைச் சேர்ந்தது. ஷெல் ஸ்கிரிப்ட்டுகள் பொதுவாக எல்லாவகையான இலினக்ஸீ இயங்குதளங்களிலும் இயங்கும். விண்டோஸ் வகை இயங்குதளங்களில் இதற்கு இணையாக பேட்ச் ஸ்கிரிப்டுகள் பயன்படுத்தப்படுகின்றன. யாரெல்லாம் படிக்கலாம்: பொறி நிறைஞர்கள் (System Administrators), மென்பொறிஞர்கள் (software engineers), நிரலர்கள் (programmers), யுனிக்ஸ், லினக்ஸ் ஆர்வலர்கள் (Unix & Linux enthusiasts) ஆகியோருக்குப் படித்து எளிதில் புரிந்து கொள்ளும் வண்ணம் இத்தொடர் அமைக்கப் பெற்றிருக்கிறது. தொடரைப் படித்துப் புரிந்து கொள்ள இயங்குதள அமைப்பு (OS architecture), குறைந்தபட்சம் தொடக்க நிலை நிரலெழுதும் திறமை (at least beginner level programming skills) ஆகியவை இருக்க வேண்டும். ஷிபேங்க் (Shebang) ஷிபேங் என்பது நாம் எழுதக்கூடிய குறுநிரல், எந்த வகையான ஷெல்லில் இயக்கப்பட வேண்டும் என்பதனைக் குறிக்கிறது. இது ஷிபேங் ஷாபேங் ஹாஷ்பேங், பௌண்ட் பேங், ஹாஷ் எக்ஷ்கிலெம், ஹேஷ் பிலிங் என்று பலவாறாக அழைக்கப்படுகிறது. இதை #! என்று குறுநிரலில் குறிப்பிடுவது வழக்கம். ஷெல்லின் வகைகள்: இலினெக்ஸைப் பொறுத்தவரையில் பலவகையான ஷெல்கள் காணப்படுகின்றன. ஆனால் நமது குறுநிரல்கள் குறிப்பிட்ட ஷெல்லில் மட்டுமே நடைபெறவேண்டுமென்பதற்காகவே நாம் ஷிபேங் என்று நிரலின் தொடக்கத்திலேயே குறிப்பிட வேண்டும். உள்ளிருப்பாக ஷெல் ஸ்கிரிப்ட்டுகள் பேஷ் ஷெல் எனப்படும் ஷெல்லிலேயே இயக்கப்படும். ஆனால் இது ஒவ்வொரு பொறி பொறுத்தும் மாறுபடும். எனவேதான் நாம் இதனை ஒவ்வொரு நிரலின் தொடக்கத்திலும் செய்ய வேண்டும். இல்லையேல் ஒரு பொறியில் சிறப்பாக இயங்கும் குறுநிரல் வேறு பொறியில் (உள்ளிருப்பாக இருக்கும் ஷெல் மாற்றப்பட்டிருந்தால்) சரிவர இயங்காது. 1. பார்ன் ஷெல் (Bourne shell (sh)) 2. பார்ன் எகெயின் ஷெல் (Boune Again SHell (BASH)) 3. சி ஷெல் (C Shell (csh)) 4. டிசி ஷெல் (TC Shell (tsh)) 5. கார்ன் ஷெல் (Korn shell (ksh)) உள்ளிருப்பாக அனைத்து வகையான லினிக்ஸு இயங்குதளத்திலும், பேஷ் ஷெல்லிலேயே குறுநிரல்கள் இயங்கும். sh என்ற கட்டளை மூலம், அதை பார்ன் ஷெல்லுக்கு மாற்றலாம். சொலாரிஸ் இயங்குதளத்தில் உள்ளிருப்பாக கார்ன் ஷெல்லானது செயற்படும். ஷெல்களுக்கிடையேயான வேறுபாடு: கீழ்க்காணும் அட்டவணையானது நமக்கு ஷெல்களுக்கிடையான வேறுபாடுகளை உணர்த்துகிறது. இங்கு zsh என்ற இன்னொரு ஷெல்லும் எடுத்தாளப் பட்டுள்ளது. அதுவும் நாம் ஷெல் மொழியைப் பயன்படுத்தக்கூடிய ஒர் இன்டர்பிரட்டர்தான். [] +++ மிக நன்று ++ நன்று + இருக்கிறது - ஆற்றலற்தாய் இருக்கிறது. -- இல்லை இது போன்று பைத்தான் ஸ்கிரிப்ட், பர்ல் ஸ்கிரிப்ட், ரூபி ஸ்கிரிப்ட் ஆகியவற்றிற்கும் வேறுபட்ட ஷெல்கள் உண்டு. முன்னறிவுத் தேவைகள்: ஷெல் ஸ்கிரிப்ட் மொழி பயில்வதற்கு சி மொழி தெரிந்திருக்க வேண்டும் என்று சிலர் சொல்வதுண்டு. கண்டிப்பாக தெரிந்திருக்க வேண்டும் என்பதல்ல. தெரிந்திருந்தால் ஷெல் ஸ்கிரிப்ட் பயில்வதற்கு எளிதாக இருக்கும். லினக்சு இயங்குதளத்தின் கட்டளைகள் நன்கு தெரிந்திருக்க வேண்டும். அப்பொழுது எல்லா வகையான செயல்களையும் நாம் நன்கு கட்டுப்படுத்தி, தானியங்கு நிரல்களை எழுத முடியும். எனவே ஷெல் ஸ்கிரிப்ட் என்பது பொதுவாக சில லினக்சு கட்டளை வரிகளின் தொடர்ச்சியாகும். புதிதாக ஷெல் ஸ்கிரிப்ட் கற்றுக் கொள்வதற்கும், ஏற்கனவே கற்றவர்கள் அதை மேம்படுத்திக் கொள்வதற்கும் இத்தொடர் துணைபுரியும். நிரல் 1: #!/bin/bash echo “Welcome to Linux Shell script world” நிரல் இயக்கும் முறை: மேற்கூறிய நிரலை ஏதேனும் ஒரு உரைத் தொகுப்பானில் தட்டச்சு செய்து, அல்லது வி(ம்) தொகுப்பானில் (vi(m) editor) எழுதி சேமித்துக் கொள்ளவும். எடுத்துக்காட்டாக, script1.sh என பெயரிடலாம். குறுநிரலின் கோப்பானது, .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) அவற்றில் விண்டோசுக்கான கட்டளைகளை இயக்கிப் பார்த்து ஸ்கிரிப்டுகள் எழுத முடியும். அவை முற்றிலும் விண்டோஸ் இயங்குதளத்திற்கு மட்டுமே உரியன. விண்டோஸ் இயங்குதளத்தில் உள்ள பவர் ஷெல் மூலமாக அனைத்து வகையான விண்டோஸ் கட்டளைகளையும் இயக்கலாம். இதன் முதல் பதிப்பான பவர் ஷெல் 1 விண்டோஸ் எக்ஸ்பி எஸ்பி2 விலேயே வந்திருந்தாலும், விண்டோஸ் ஏழு, எட்டு இயங்குதளங்களில் இதன் மேம்பட்ட பதிப்பினைப் பயன்படுத்தி ஷெல் ஸ்கிரிப்ட்டுக்கு இணையான குறுநிரல்களை எழுதி இயக்க முடியும். தானியங்கு செயல்கள் செய்விக்க முடியும். Cygwin எனப்படும் லினக்சு மாதிரி செயலியில் (Linux Simulation) ஷெல் ஸ்கிரிப்ட்டுகளை இயக்கிப் பார்க்கலாம். [] மேலும் நிரல்களை எழுத அறியும் முன் இலினக்சு இயங்குதளத்தின் கட்டமைவினைப் பற்றி அறிவோம். பின்வரும் படம் இலினக்சு இயங்குதளத்தின் கட்டமைவினை எளிதில் விளக்கும் வண்ணம் அமைந்துள்ளது. 1. செயலி மேலாண்மை 2. நினைவக மேலாண்மை 3. கோப்பு மேலாண்மை 4. வன்பொருள் மேலாண்மை 5. வலையக மேலாண்மை ஆகியவை முதன்மையானதாக இங்கு விளங்குகின்றன. [] கலைச்சொற்கள்: பொதுமயமாக்கல் – generalization இடைமுகப்பு – interface குறுநிரல்கள் – scripts தன்மயமாக்கல் – automation உள்ளிருப்பு – by default பொறி – system கட்டமைவு – architecture (கற்போம்…) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – பகுதி 2 தரவு வகைகள் எண்கள் உரைகள் என்றிரு தரவுகள் கொண்டு புனைந்திட கணக்கு எளிமை ஏரணப் பிழையற் றெழுதிடல் வேண்டும் எண்ணிய தீர்வு இன்பமாய் வரவே நிரற்பா – 2 ஒரு இயங்குதளமானது பின்வரும் ஐந்து வகையான மேலாண்மைகளைச் சரிவரகையாள வேண்டும். 1. செயலி மேலாண்மை (process management) செயலி மேலாண்மையானது ஓர் இயங்குதளத்திலுள்ள அனைத்து வகையான செயலிகளையும் கண்டுணர்ந்து அவற்றை உரிய வகையில் இயக்குதளைக் குறிக்கிறது. செயல் என்பது என்ன ஒரு வகையான வினையாகவும் இருக்கலாம். எடுத்துக்காட்டிற்கு கூட்டல், கழித்தல், வகுத்தல், பெருக்கல் என அடிப்படை கணக்கீட்டு வினைகளையும் எடுத்துக்கொள்ளலாம். 1. நினைவக மேலாண்மை (memory management) நினைவக மேலாண்மையானது எந்த வகையான செயலுக்கு எவ்வளவு நினைவகம் தேவைப்படும் என்பதை ஆய்ந்தறிந்து செயற்பட வேண்டும். இதிலும் முதன்மை நினைவகம், இரண்டாம் நினைவகம் என இரண்டு வகைகள் உண்டு. முதன்மை நினைவகம் பொதுவாக RAM (Random Access Memory) ஐக் குறிக்கிறது. இரண்டாம் நினைவகம் வன்வட்டினைக் குறிக்கிறது. மெய்நிகர் நினைவகம்: இது வன்வட்டின் ஒரு பகுதியாக இயங்கினாலும், பொதுவாக RAM ஆனது முழுவதும் செயலிகளால் கையகப்படுத்தப்பட்டால், இது RAM ஆகச் செயல்படும். இலினக்சு இயங்குதளத்தில் இது பொதுவாக ஒன்றரை முதல் இரண்டு மடங்கு RAM அளவினைக் கொண்டிருக்கும் வண்ணம் அமைக்கப்படல் வேண்டும். இது பொதுவாக விதியாக இருப்பினும், அதிக அளவு RAM பயன்படுத்தப்படும் பொழுது இதற்கு விதிவிலக்குகளும் உள்ளன. 1. கோப்பு மேலாண்மை (file management) கோப்பு என்பது பல்வேறு வகையான தரவுகளின் அல்லது பதிவுகளின் கூட்டமைவு ஆகும். இவற்றைச் சரிவர மேலாண்மை செய்தல் இயங்குதளத்தில் வேலைகளில் இன்றியமையாததாகும். அவ்வாறு செய்யாவிடில் பயனர் கோப்புக்களை அணுகும் பொழுது குழப்பம் நேரலாம். இலினக்சானது ext4, ext3, ext2, vfat, swap கோப்பவமைவுகளை தன்னகத்தே கொண்டிருந்தாலும், அது VFS என்ற Virtual File System கொண்டே பொதுவாக பயனர்களுக்கு தனது வெளியீட்டினைத் தருகிறது. இங்கு VFS என்பது ஒரு தற்காலிக கோப்பமைவாக உள்ளது. ஒரு குறிப்பிட்ட கட்டளை எவ்வாறு இயங்குகிறது என்பதனை ஓர் எடுத்துக்காட்டின் மூலம் காணலாம். ls என்ற கட்டளையானது listing என்பதன் சுருக்கமாகும். அதாவது ஒரு கோப்பமைவில் அல்லது ஓர் அடைவில் இருக்கும் கோப்பு மற்றும் துணை அடைவுகளை காட்டும் கட்டளையாகும். இந்தக் கட்டளை கொடுக்கப்பட்டவுடன் அது ஒரு fork (துணைச்செயல்) ஐ உருவாக்கி, execute(“ls”) என ஏற்கனவே சி மொழியில் எழுதப்பட்ட ஒரு நிரலை அழைக்கும். (இலினக்சு சி மொழியில் எழுதப்பட்ட இயங்குதளம் என்பதறிக.) அது குறிப்பிட்ட கருவியினைத் திறந்து (வன்வட்டு/குறுவட்டு/நினைவக அட்டை) தற்காலிக நினைவகத்தில் ஏற்றிக் கொண்டு குறிப்பிட்ட கட்டளையைக்குறிய (ls) வெளியீட்டினைத் தரும். #ls இது listing கட்டளை #strace ls இது listing கட்டளை கொடுத்தனால் என்னவெல்லாம் நடக்கிறது என்பதை பயனர் அறிய உதவும் கட்டளை. 1. வன்பொருள் மேலாண்மை (hardware management) பொதுவாக ஓர் இயங்குதளத்தில் வன்வட்டு, நினைவக அட்டைகள், குச்சி நினைவகங்கள், குறுவட்டுக்கள், அடர்குறுவட்டுக்கள், தொலை வன்வட்டுக்கள் போன்றவை கையாளப்படுகின்றன. இது அல்லாமல் காப்புப்படி எடுக்கும் பொழுது, வேறுபட்ட காப்புப்படி ஒலி நாடாக்களோ(முந்நாட்களில்) அச்சடிக்கும் பொழுது அச்சுப்பொறிகளோ கையாளப்படுகின்றன. இதில் எந்த வகையான கருவிகளைக் கையாண்டாலும் பயனருக்குத் தோழமை கொடுக்கும் வண்ணம் வன்பொருள் மேலாண்மை செய்யப்படல் வேண்டும். 1. வலைய மேலாண்மை (network management) இது இரண்டு வகைப்படும். 1. கம்பியுள்ள வலையம் 2. கம்பியில்லா வலையம் இந்த இரண்டுமே வரையறுக்கப்பட்ட வலைய அடுக்குகள் மற்றும் வலையக்கருவி இயக்கிகள் கொண்டு செயல்படுகின்றன. இந்த ஐந்து வகையான மேலாண்மைகளும் ஒன்றுக்கொன்று நெருங்கிய தொடர்புடையவை. இவை அனைத்தையும் சரிவர செயல்படுத்துவதே ஒரு திறனுள்ள இயங்குதள த்தின் வேலையாகும். ஒவ்வொரு மொழி பொறுத்தும் தரவு அமைவுகள் வேறுபடும். இங்கு ஷெல் நிரல்களைப் பொறுத்த அளவில் எண்கள் மற்றும் உரைகள் என இரு வகை தரவுகளே உள்ளன. உயர் நிலை மொழிகளான சி, சி++, ஜாவா மொழிகளில் நாம் ஒரு மாறியைப் பயன்படுத்த வேண்டுமெனில் அதனை நாம் வெளியிட வெண்டும். ஆனால் ஷெல் நிரலானது உயர் மொழி இல்லாததால் நாம் அவ்வாறு வெளியிடத் தேவையில்லை. எண்கள் இங்கு எண்களானது, இயல் எண்கள், முழுக்கள், என வேறுபடுத்தி அறியப்படுவதில்லை. அவை அந்தந்த இடங்களைப் பொறுத்து மாறுபட்டு நிற்கின்றன. அவற்றை நமது தேவைகளுக்கேற்ப பயன்படுத்திக் கொள்ளலாம். உரைகள் எந்த வகையான உரையாக இருப்பினும் அவை இரட்டை மேற்கோள்குறிக்குள் எழுதப்படல், அணுகப்படல் வேண்டும். உரைகளுக்குள்ளே ஒப்பிடும் பொழுது அதே போன்று செயதல் வேண்டும். எண்கள், உரைகள் ஆகியவற்றைப் பற்றி விரிவாக பிறகு வரும் நிரல்களின் விளக்கத்தின் பொழுது காணலாம். ஐயம்: ஷெல் ஸ்கிரிப்ட்டுகள் அர்ரே (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” 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) [] [] கலைச்சொற்கள்: அடிப்படை கணக்கீட்டு வினைகள் - 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 (கற்போம்…) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் - 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) நிலையாகும். விளக்கப்படம்: பின்வரும் விளக்கப்படங்கள் இந்த செயல்களையும், அவற்றின் நிலை மற்றும் துணை நிலைகளை விளக்கும் வண்ணம் அமைந்துள்ளன. [] [] ஐயம்: ஷெல் ஸ்கிரிப்ட்டுக்களை ஆண்ட்ராய்டு கைபேசியில் இயக்க முடியுமா? தீர்வு: Terminal emulator என்னும் செயலியைப் பயன்படுத்தி echo முதலான கட்டளைகளை இயக்கலாம். http://www.appsapk.com/android-terminal-emulator/ என்ற தொடுப்பில் அது கிடைக்கிறது. உதவிப்பக்கமும் செயலியில் உண்டு. ஆனால இது அனைத்துக் கட்டளைகளையும் செய்யாது. அனைத்து வகையான நிரல்களையும் இயக்கிப்பார்க்க ஆண்ட்ராய்டு பேசியானது root அல்லது hack செய்யப்பட வேண்டும். [] Complete Linux Installer http://www.appsapk.com/complete-linux-installer/ என்ற தொடுப்பில் உள்ள பொதியினை பதிவிறக்கி நிறுவிக்கொண்டால், அனைத்து வகையான குறுநிரல்களையும் எழுதி மகிழலாம். ஆனால் இது புதியவர்களுக்கு உகந்ததல்ல. ஏதேனும் தவறான நிரல் எழுதி கணிப்பொறியில் பழுதேற்பட்டால், அதை மீண்டும் நிறுவிக் கொள்ளலாம். ஆனால் கைபேசியில் பழுதேற்பட்டால் மீண்டும் அனைத்தும் மீண்டு வருமா என்பது மிகப்பெரும் ஐயமே. [] சின்ன சின்ன நிரல்களை எழுதி மகிழலாம். பெரிய நிரல்களுக்கு இது போன்ற ஆண்ட்ராய்டு செயலிகள் வழிவகுத்தாலும், அவை தொழிற்நுட்ப வகையில் பரிந்துரைக்கப்படுவதில்லை. (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 மூலம் இயக்கலாம்) இந்த நிரல், எவ்வாறு ஷெல் ஸ்கிரிப்ட் மூலமாக ஒரு எச்டிஎம்எல் கோப்பினை உருவாக்கப் பயன்படுகிறது என்று பார்க்கலாம். எடுத்துக்காட்டாக எச்டிஎம்எல் கோப்பு பின்வருமாறு வைத்துக் கொள்வோம். இதை எவ்வாறு ஷெல் ஸ்கிரிப்ட் மூலமாகச் செய்யலாம் எனப் பார்க்கலாம்.
$TIME_STAMP _EOF_ கீழ்க்கண்ட கட்டளை வரிகளைக் கொண்டு இயக்க, நிரலின் வெளியீடு படத்தில் உள்ளது போல் கிடைக்கும். #chmod +x niral7.sh #./niral7.sh [] இயங்கு தளத்தில் ஏழு வகை நிலைகள் அவற்றின் பயன்பாடுகளை அடுத்த தலைப்பில் பார்க்கலாம். கலைச்சொற்கள்: (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 (கற்போம்…) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 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 ஆக இருக்கும். [] நிரல் 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_
$TIME_STAMP _EOF_ மேலேயுள்ள நிரலில் எவ்வாறு மாற்றிடுதல் உள்ளது என்பதைக் காண்போம். இங்கு RIGHT_NOW, TIME_STAMP ஆகிய இரண்டு மாறிகள் பயன்படுத்தப்பட்டுள்ளன. இதன் மூலம் இந்த நிரலானது எப்பொழுது மேம்படுத்தப்பட்டுள்ளது (updated) என்பதை அறியலாம். நிரல் 9: #!/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_
$TIME_STAMP
$(system_info) $(show_uptime) $(drive_space) $(home_space) _EOF_ function show_uptime { echo "" uptime echo "" } function drive_space { echo "
" df echo "" } function home_space { echo "
" echo "Bytes Directory" du -s /home/* | sort -nr echo "" } function system_info { echo "
Function not yet implemented
" } நிரல் துண்டுகள் (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) $(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 (கற்போம்) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் - 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..." நிரல் விளக்கம்: இந்நிரலில் பயனரையும் அதற்குரிய கடவுச்சொல்லையும் எவ்வாறு நிரல் துண்டு கொண்டு அமைப்பதைக் காண்கின்றோம். ஒரு சிறிய நிரல் துண்டானது மீண்டும் மீண்டும் அழைக்கப்பட்டு பல்வேறு பயனர்களையும் அவற்றிற்குரிய கடவுச்சொற்களையும் எளிதில் அமைக்க வழிவகுக்கிறது. கீழே இந்நிரலில் அழைக்கப்பட்டுள்ள மாற்றிடும் மாறிகளைக் காண்கின்றோம். இங்கு ஆறு மாறிகள் கையாளப்படுகின்றன. அவை பின்வருமாறு $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 # 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 (கற்போம்...) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் 7 - கட்டுப்பாட்டு அமைவுகள் (if condition) இருந்தால் பிறகு இஃதே நிகழும் இலையெனில் மற்றவை இயங்கும்; இருந்தால் கூடு இல்லை; அடுக்கு இருந்தால் உண்டு; இருந்தால் ஏணியும் உண்டே. -நிரற்பா 7 நிரற்பா விளக்கம்: இருந்தால் என்பது இப்பாடலில் if condition ஐக் குறிக்கிறது. If condition சரியாக இருந்தால் ஒன்றும், தவறாக இருந்தால் பிரிதொன்றும் நடக்கும். கூடு என்பது nested if statement ஐக்குறிக்கிறது. உயர்நிலை மொழிகளான சி,சி++ உள்ளது போன்று இதில் nested if statement கிடையாது. அடுக்கு இருந்தால் என்பது elif statement ஐக்குறிக்கிறது. அடுக்கடுக்கான elif statement கள் சேர்ந்து இருந்தால் ஏணி அதாவது elif ladder ஐ உருவாக்குகிறது. ஏற்கனவே சி, சி++ உயர்நிலை மொழி கற்றவர்களுக்கு இது எளிதில் புரியும். மற்றவர்களுக்குப் புரியும் வண்ணம் கீழே படம் கொடுக்கப் பட்டுள்ளது. [] குறிப்பிட்ட கட்டளையானது சரிபார்க்கப்பட்டு, சரியெனில் ஒன்று அல்லது ஒன்றுக்கு மேற்பட்ட கட்டளைவரிகள் இயக்கப்படும். தவறெனில் பிறிதொரு வகையான கட்டளை அல்லது ஒன்றுக்கு மேற்பட்ட கட்டளைவரிகள் இயக்கப்படும். கீழ்க்காணும் அமைப்பு இதனை எளிதாக விளக்குகிறது. முதல் வகையான if condition syntax: # 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: 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. -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 பின்வரும் நிரலில், ஒரு நிரல் துண்டில் எவ்வாறு நாம் இருந்தால் கட்டளை வரியைப் பயன்படுத்துவது என்பது விளக்கப்பட்டுள்ளது. நிரல் 16 function home_space { # Only the superuser can get this information if [ "$(id -u)" = "0" ]; then echo "" echo "Bytes Directory" du -s /home/* | sort -nr echo "" 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 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 - இருந்தால் ஏணி (கற்போம்...) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட்– 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 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) என்பன போன்ற நிரல்களைச் செய்து பார்க்கவும். நிரல் 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 பின்வரும் இரண்டு நிரல்களைச் செய்து குறிப்பிட்ட வெளியீடுகள் கிடைக்கின்றனவா எனச் சரிபார்க்கவும். நிரல் 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 என்ற மாறியில் மூன்று மதிப்புகள் இருத்தப்பட்டு மீண்டும் மீண்டும் எடுக்கப்படுகின்றது. நிரலின் செய்து வெளியீடு காணவும். நிரல் 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 '
Function not yet implemented
" } # end of system_info [] function show_uptime { echo "" uptime echo "" } # end of show_uptime function drive_space { echo "
" df echo "" } # end of drive_space function home_space { # Only the superuser can get this information if [ "$(id -u)" = "0" ]; then echo "
" echo "Bytes Directory" du -s /home/* | sort -nr echo "" fi } # end of home_space function write_page { cat <<- _EOF_
$TIME_STAMP
$(system_info) $(show_uptime) $(drive_space) $(home_space) _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 # 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 (கற்போம்) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் -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 [] நிரல் 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 என்ற இடத்திலே நமக்குத் தேவையான வரிகளை உள்ளிட்டு நிரலினை நிரப்பலாம். நிரல் 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)" 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 (கற்போம்) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் -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 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 echo “$a file exist & modification time is” `ls –ltr $a | awk ‘{print $8}’` else echo “$a file doesn’t exist” fi நிரல் விளக்கம்: இந்நிரலில், அளவுரு அல்லது தருமதிப்பின் மூலம் கொடுக்கப்படும் கோப்பானது குறிப்பிட்ட இடத்தில் இருக்கிறதா என கண்டறியப்படுகிறது. [] நிரல் 75 #!/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: "$*"" 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 அளவுரே - அளவுருவே (கற்போம்) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் -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 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 #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. 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 # 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 (கற்போம்) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 22 மாற்றுக் கட்டளை (shift command) அமைந்த வண்ணம் அளவுரு இருக்க நிரலின் பயன் நெடிதாய் ஆகுமாம் இன்னும் நீட்டி இனிதே பயனுற உற்றுழி வந்து உதவிடும் மாற்றே. - நிரற்பா 22 நிரற்பாவிளக்கம்: நிரலில் கொடுக்கப்பட்ட அளவுருக்கள் அதே வரிசையில் அமைந்திருந்தால், அது அந்த நிரல் அமைத்தவருக்கு மட்டுமின்றி, மற்ற பயனர்களுக்கும் பயனளிக்கும். அதே அளவுருக்கள், நெடுங்காலம் மற்ற பயனர்களுக்கும் உழைக்க மாற்றுக் கட்டளையினைப் பயன்படுத்துதல் சிறந்தது. [] நிரல் 82 #!/bin/bash #shift command in positional parameters #niral82.sh 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)"" நிரல் விளக்கம்: இந்த நிரலில் 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 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 உற்றுழி – on emergency மாற்றே – shift command அடைவுகள் - folders (கற்போம்) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 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 நிரல் விளக்கம்: இது ஓர் எடுத்துக்காட்டான நிரல். இது எவ்வாறு ஒரு தாடையினைக் கண்ணி வைத்துப் பிடிப்பது என்பது பற்றி அறிய உதவுகிறது. கீழ்க்காணுமாறு இதனது 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 [] நிரல் 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" 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 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 (கற்போம்) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 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 நிரல் விளக்கம்: கொடுக்கப்பட்டுள்ள நிரலில் பலவாறாக உள்ளீடுகள் கொடுக்கப்பட்டு அதற்கேற்றாற்போன்று வெளியீடுகள் காண்பிக்கப்பட்டுள்ளன. இங்கு தருமதிப்புக்கள் எதுவும் கொடுக்கப்படவில்லை. (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 இங்கு சரியான தருமதிப்பானது, பலமுறை கொடுக்கப்படுகிறது. விடையானது கொடுக்கப்பட்ட அனைத்திற்கும் வெளியீடு கிடைக்கிறது. # ./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 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 # 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 (கற்போம்) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 25 (cut command) வெட்டுக் கட்டளை நீட்டமாய்த் தரவுகள் நெடுவரி நிற்க குறித்த நிரைகள் கழற்றிட வேண்டினில் வெட்டுக் கட்டளை வளைந்து கொடுக்க வேண்டிய தீர்வு விரைந்து வருமே. - நிரற்பா 25 நிரற்பாவிளக்கம்: இயங்குதளத்தில் அல்லது கோப்பில் உள்ள தரவுகள், அடுக்கடுக்காக இருக்க, நமக்கு வேண்டிய நிரைகள் (columns) மட்டும் தனித்து எடுக்க வெட்டுக்கட்டளையினைப் பயன்படுத்தி தேவையான தீர்வினைப் பெறலாம். Syntax (பொது அமைவு) வெட்டுக் கட்டளை கீழ்க்காணும் பொதுவமைவினைத் தன்னகத்தே கொண்டுள்ளது. cut –d(delimiter) f(field no) filename eg: cut –d: f1 /etc/passwd நிரல் 91 கீழ்க்காண்பவை ஒரு கோப்பில் (data.txt) இருப்பதாகக் கொள்க. one two three four 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 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 [] நிரல் 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 (கற்போம்) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 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 [] நிரல் விளக்கம்: இங்கு எளிமையாக மூன்று கோப்புகள் பயனருக்குக் காட்டப்படுகிறது. நிரல் 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| நிரல் விளக்கம்: இங்கு வரம்புக்குறி ஆக | குறியீடு பயன்படுத்தப்படுகிறது. எனவே தரவுகளிடையே | குறியீடானது பயன்படுத்தப்படுகிறது. நிரல் 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 (கற்போம்) செம்மொழியில் கற்போம் ஷெல் ஸ்கிரிப்ட் – 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)" } 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