Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Bash प्रोग्रामिंग

बैश स्क्रिप्टिंग में महारत हासिल करें: ऑटोमेशन के साथ दक्षता बढ़ाएं

सिसएडमिन्स, हम में से जो लिनक्स कंप्यूटर्स को सबसे करीब से चलाते और प्रबंधित करते हैं, के पास ऐसे टूल्स तक सीधी पहुंच होती है जो हमें अधिक कुशलता से काम करने में मदद करते हैं। इन टूल्स का उपयोग उनके अधिकतम लाभ के लिए करने में आपकी सहायता करने के लिए ताकि आपका जीवन आसान हो, यह लेख श्रृंखला बैश शेल स्क्रिप्ट्स के रूप में ऑटोमेशन के उपयोग का पता लगाती है। इसमें शामिल है:

  • बैश शेल स्क्रिप्ट्स के साथ ऑटोमेशन के लाभ
  • क्यों सिसएडमिन्स के लिए शेल स्क्रिप्ट्स का उपयोग C या C++ जैसी संकलित भाषाओं से बेहतर विकल्प है
  • नई स्क्रिप्ट्स के लिए आवश्यकताओं का एक सेट बनाना
  • कमांड-लाइन इंटरफेस (CLI) प्रोग्राम्स से सरल बैश शेल स्क्रिप्ट्स बनाना
  • स्क्रिप्ट चलाने वाले यूजर ID (UID) के उपयोग से सुरक्षा बढ़ाना
  • कमांड-लाइन प्रोग्राम्स और स्क्रिप्ट्स के लिए एक्ज़ीक्यूशन फ्लो कंट्रोल प्रदान करने के लिए लॉजिकल तुलना टूल्स का उपयोग करना
  • स्क्रिप्ट कार्यक्षमता को नियंत्रित करने के लिए कमांड-लाइन ऑप्शंस का उपयोग करना
  • बैश फ़ंक्शंस बनाना जिन्हें स्क्रिप्ट के भीतर एक या अधिक स्थानों से कॉल किया जा सकता है
  • अपने कोड को ओपन सोर्स के रूप में लाइसेंस क्यों और कैसे करें
  • एक सरल टेस्ट प्लान बनाना और लागू करना

मैंने पहले बैश कमांड्स और सिंटैक्स और कमांड लाइन पर बैश प्रोग्राम बनाने के बारे में लेखों की एक श्रृंखला लिखी थी, जिसे आप इस लेख के अंत में संदर्भ अनुभाग में पा सकते हैं। लेकिन यह चार लेखों की श्रृंखला स्क्रिप्ट्स बनाने (और कुछ तकनीकें जो मुझे उपयोगी लगती हैं) के बारे में उतनी ही है जितनी कि यह बैश कमांड्स और सिंटैक्स के बारे में है।

मैं शेल स्क्रिप्ट्स का उपयोग क्यों करता हूँ

द लिनक्स फिलॉसफी फॉर सिसएडमिन्स के अध्याय 9 में, मैं लिखता हूँ:

"एक सिसएडमिन सबसे अधिक उत्पादक होता है जब सोच रहा होता है—मौजूदा समस्याओं को कैसे हल करें और भविष्य की समस्याओं से कैसे बचें के बारे में सोचना; लिनक्स कंप्यूटर्स की निगरानी कैसे करें ताकि उन भविष्य की समस्याओं का अनुमान लगाने और पूर्वाभास करने वाले सुराग मिलें; अपनी नौकरी को अधिक कुशल कैसे बनाएं के बारे में सोचना; उन सभी कार्यों को कैसे ऑटोमेट करें जिन्हें किया जाना आवश्यक है चाहे हर दिन या साल में एक बार।

"सिसएडमिन्स अगले सबसे अधिक उत्पादक होते हैं जब वे शेल प्रोग्राम बनाते हैं जो उन समाधानों को ऑटोमेट करते हैं जिन्हें उन्होंने सोचा था जब वे अनुत्पादक प्रतीत हो रहे थे। हमारे पास जितना अधिक ऑटोमेशन होगा, वास्तविक समस्याओं को ठीक करने के लिए उतना ही अधिक समय उपलब्ध होगा जब वे होती हैं और यह चिंतन करने के लिए कि पहले से भी अधिक कैसे ऑटोमेट किया जाए।"

यह पहला लेख यह पता लगाता है कि शेल स्क्रिप्ट्स सिसएडमिन के लिए एक महत्वपूर्ण टूल क्यों हैं और एक बहुत ही सरल बैश स्क्रिप्ट बनाने की मूल बातें।

क्यों ऑटोमेट करें?

क्या आपने कभी कमांड लाइन पर एक लंबा और जटिल कार्य किया है और सोचा है, "खुशी है कि यह हो गया। अब मुझे इसके बारे में फिर कभी चिंता नहीं करनी पड़ेगी!"? मैं—अक्सर। मैंने अंततः पता लगाया कि लगभग हर चीज़ जो मुझे कंप्यूटर पर करने की आवश्यकता होती है (चाहे वह मेरा हो या किसी नियोक्ता या परामर्श ग्राहक का) भविष्य में किसी समय फिर से करने की आवश्यकता होगी।

बेशक, मुझे हमेशा लगता है कि मुझे याद रहेगा कि मैंने कार्य कैसे किया। लेकिन, अक्सर, अगली बार भविष्य में इतनी दूर होती है कि मैं भूल जाता हूँ कि मैंने इसे कभी किया है, इसे कैसे करना है तो दूर की बात है। मैंने कुछ कार्यों के लिए आवश्यक चरणों को कागज के टुकड़ों पर लिखना शुरू किया, फिर सोचा, "मैं कितना मूर्ख हूँ!" तो मैंने उन लिखावटों को अपने कंप्यूटर पर एक साधारण नोटपैड एप्लिकेशन में स्थानांतरित कर दिया, जब तक कि एक दिन मैंने फिर से सोचा, "मैं कितना मूर्ख हूँ!" अगर मैं इस डेटा को अपने कंप्यूटर पर स्टोर करने जा रहा हूँ, तो मैं एक शेल स्क्रिप्ट बना सकता हूँ और इसे एक मानक स्थान में स्टोर कर सकता हूँ, जैसे /usr/local/bin या ~/bin, ताकि मैं सिर्फ शेल प्रोग्राम का नाम टाइप कर सकूं और इसे उन सभी कार्यों को करने दूं जो मैं मैन्युअल रूप से करता था।

मेरे लिए, ऑटोमेशन का अर्थ यह भी है कि मुझे कार्य को फिर से करने के लिए यह याद रखने या पुनः बनाने की आवश्यकता नहीं है कि मैंने कार्य कैसे किया। चीजों को कैसे करना है याद रखने में समय लगता है और सभी कमांड्स टाइप करने में समय लगता है। यह उन कार्यों के लिए एक महत्वपूर्ण समय सिंक बन सकता है जिनके लिए लंबी कमांड्स की बड़ी संख्या टाइप करने की आवश्यकता होती है। शेल स्क्रिप्ट्स बनाकर कार्यों को ऑटोमेट करने से नियमित कार्यों को करने के लिए आवश्यक टाइपिंग कम हो जाती है।

शेल स्क्रिप्ट्स

शेल प्रोग्राम लिखना—जिसे स्क्रिप्ट्स के रूप में भी जाना जाता है—मेरे समय का लाभ उठाने की सबसे अच्छी रणनीति है। एक बार जब मैं एक शेल प्रोग्राम लिखता हूँ, तो मैं इसे जितनी बार चाहूं उतनी बार दोबारा चला सकता हूँ। मैं अपने शेल स्क्रिप्ट्स को एक लिनक्स रिलीज़ से अगले में परिवर्तनों की भरपाई करने के लिए अपडेट भी कर सकता हूँ, नया हार्डवेयर और सॉफ़्टवेयर इंस्टॉल करना, जो मैं स्क्रिप्ट के साथ पूरा करना चाहता हूँ उसे बदलना, नए फ़ंक्शन्स जोड़ना, जिन फ़ंक्शन्स की अब आवश्यकता नहीं है उन्हें हटाना, और मेरी स्क्रिप्ट्स में उन दुर्लभ बग्स को ठीक करना। इस तरह के परिवर्तन किसी भी प्रकार के कोड के लिए रखरखाव चक्र का हिस्सा हैं।

कीबोर्ड के माध्यम से एक टर्मिनल सेशन में शेल कमांड्स दर्ज करके और निष्पादित करके किए गए हर कार्य को ऑटोमेट किया जा सकता है और किया जाना चाहिए। सिसएडमिन्स को हमसे करने के लिए कहा गया हर काम या जो हम तय करते हैं कि करने की आवश्यकता है, उसे ऑटोमेट करना चाहिए। कई बार, अग्रिम में ऑटोमेशन करने से मुझे पहली बार समय की बचत होती है।

एक बैश स्क्रिप्ट में कुछ कमांड्स से लेकर कई हजारों तक हो सकती हैं। मैंने केवल एक या दो कमांड्स वाली बैश स्क्रिप्ट्स लिखी हैं, और मैंने 2,700 से अधिक लाइनों वाली एक स्क्रिप्ट लिखी है, जिनमें से आधे से अधिक कमेंट्स हैं।

शुरुआत करना

यहाँ एक शेल स्क्रिप्ट और इसे बनाने का एक तुच्छ उदाहरण है। बैश कमांड-लाइन प्रोग्रामिंग पर मेरी पहले की श्रृंखला में, मैंने हर प्रोग्रामिंग किताब से उदाहरण का उपयोग किया जिसे मैंने कभी पढ़ा है: "हैलो वर्ल्ड।" कमांड लाइन से, यह इस तरह दिखता है:

[student@testvm1 ~]$ echo "Hello world"
Hello world

परिभाषा के अनुसार, एक प्रोग्राम या शेल स्क्रिप्ट कंप्यूटर को निष्पादित करने के लिए निर्देशों का एक क्रम है। लेकिन उन्हें हर बार कमांड लाइन में टाइप करना काफी थकाऊ है, खासकर जब प्रोग्राम लंबे और जटिल होते हैं। उन्हें एक फाइल में स्टोर करना जिसे एक सिंगल कमांड के साथ निष्पादित किया जा सकता है, समय बचाता है और त्रुटियों के घुसने की संभावना को कम करता है।

मैं इस श्रृंखला में उदाहरणों को एक टेस्ट सिस्टम या वर्चुअल मशीन (VM) पर नॉन-रूट यूजर के रूप में आज़माने की सलाह देता हूँ। हालांकि उदाहरण हानिरहित हैं, गलतियाँ होती हैं, और सुरक्षित रहना हमेशा बुद्धिमानी है।

पहला कार्य आपके प्रोग्राम को समाहित करने के लिए एक फाइल बनाना है। खाली फाइल, hello, बनाने के लिए touch कमांड का उपयोग करें, फिर इसे निष्पादन योग्य बनाएं:

[student@testvm1 ~]$ touch hello
[student@testvm1 ~]$ chmod 774 hello

अब, अपने पसंदीदा एडिटर का उपयोग करके फाइल में निम्न लाइन जोड़ें:

echo "Hello world"

फाइल सेव करें और कमांड लाइन से इसे चलाएं। आप इस श्रृंखला में स्क्रिप्ट्स को निष्पादित करने के लिए एक अलग शेल सत्र का उपयोग कर सकते हैं:

[student@testvm1 ~]$ ./hello 
Hello world!

यह सबसे सरल बैश प्रोग्राम है जिसे आप कभी बना सकते हैं—एक फाइल में एक सिंगल स्टेटमेंट। इस अभ्यास के लिए, आपका पूरा शेल स्क्रिप्ट इस सरल बैश स्टेटमेंट के आसपास बनाया जाएगा। प्रोग्राम का फ़ंक्शन इस उद्देश्य के लिए अप्रासंगिक है, और यह सरल स्टेटमेंट आपको एक जटिल फंक्शनल प्रोग्राम के बजाय बुनियादी प्रोग्राम संरचना और बहुत सरल तरीके से अपना टेम्पलेट बनाने पर ध्यान केंद्रित करने की अनुमति देता है।

शेबैंग

सिंगल स्टेटमेंट तब तक ठीक काम करता है जब तक आप बैश या स्क्रिप्ट में उपयोग की गई कमांड्स के साथ संगत शेल का उपयोग करते हैं। यदि स्क्रिप्ट में कोई शेल निर्दिष्ट नहीं है, तो डिफ़ॉल्ट शेल का उपयोग स्क्रिप्ट कमांड्स को निष्पादित करने के लिए किया जाएगा।

अगला कार्य यह सुनिश्चित करना है कि स्क्रिप्ट बैश शेल का उपयोग करके चलेगी, भले ही कोई अन्य शेल डिफ़ॉल्ट हो। यह शेबैंग लाइन के साथ पूरा होता है। शेबैंग #! कैरेक्टर्स को वर्णन करने का गीकी तरीका है जो स्पष्ट रूप से निर्दिष्ट करता है कि स्क्रिप्ट चलाते समय किस शेल का उपयोग करना है। इस मामले में, वह बैश है, लेकिन यह कोई अन्य शेल हो सकता है। यदि निर्दिष्ट शेल इंस्टॉल नहीं है, तो स्क्रिप्ट नहीं चलेगी।

शेबैंग लाइन को स्क्रिप्ट की पहली लाइन के रूप में जोड़ें, तो अब यह इस तरह दिखती है:

#!/usr/bin/bash
echo "Hello world!"

स्क्रिप्ट को फिर से चलाएं—आपको परिणाम में कोई अंतर नहीं दिखना चाहिए। यदि आपके पास अन्य शेल्स इंस्टॉल हैं (जैसे ksh, csh, tcsh, zsh, आदि), तो एक शुरू करें और स्क्रिप्ट को फिर से चलाएं।

स्क्रिप्ट्स बनाम संकलित प्रोग्राम्स

सब कुछ ऑटोमेट करने के लिए प्रोग्राम लिखते समय—ठीक है, सब कुछ—सिसएडमिन्स को हमेशा शेल स्क्रिप्ट्स का उपयोग करना चाहिए। क्योंकि शेल स्क्रिप्ट्स ASCII टेक्स्ट फॉर्मेट में स्टोर होती हैं, उन्हें मनुष्यों द्वारा उतनी ही आसानी से देखा और संशोधित किया जा सकता है जितना कंप्यूटर द्वारा। आप एक शेल प्रोग्राम की जांच कर सकते हैं और ठीक वही देख सकते हैं जो यह करता है और क्या सिंटैक्स या लॉजिक में कोई स्पष्ट त्रुटि है। यह ओपन होने का एक शक्तिशाली उदाहरण है।

मैं जानता हूँ कि कुछ डेवलपर्स शेल स्क्रिप्ट्स को "सच्ची" प्रोग्रामिंग से कम मानते हैं। शेल स्क्रिप्ट्स और उन्हें लिखने वालों का यह हाशिए पर रखना इस विचार पर आधारित प्रतीत होता है कि एकमात्र "सच्ची" प्रोग्रामिंग भाषा वह है जिसे सोर्स कोड से संकलित करके निष्पादन योग्य कोड उत्पन्न करना होगा। मैं अनुभव से आपको बता सकता हूँ कि यह स्पष्ट रूप से असत्य है।

मैंने कई भाषाओं का उपयोग किया है, जिनमें BASIC, C, C++, Pascal, Perl, Tcl/Expect, REXX (और इसके कुछ वेरिएशन्स, जिनमें ऑब्जेक्ट REXX शामिल हैं), कई शेल भाषाएं (कॉर्न, csh, और बैश सहित), और यहां तक कि कुछ असेंबली भाषा भी शामिल है। कभी भी आविष्कार की गई हर कंप्यूटर भाषा का एक उद्देश्य रहा है: मनुष्यों को कंप्यूटर को यह बताने की अनुमति देना कि क्या करना है। जब आप एक प्रोग्राम लिखते हैं, चाहे आप जिस भाषा को चुनते हैं, आप कंप्यूटर को विशिष्ट कार्यों को एक विशिष्ट क्रम में करने के निर्देश दे रहे होते हैं।

स्क्रिप्ट्स को संकलित भाषाओं की तुलना में कहीं अधिक तेजी से लिखा और टेस्ट किया जा सकता है। प्रोग्राम्स को आमतौर पर परिस्थितियों या नुकीले बालों वाले बॉस द्वारा लगाए गए समय की बाधाओं को पूरा करने के लिए जल्दी लिखा जाना चाहिए। अधिकांश स्क्रिप्ट्स जो सिसएडमिन्स लिखते हैं, वे किसी समस्या को ठीक करने के लिए, किसी समस्या के बाद सफाई करने के लिए, या एक प्रोग्राम देने के लिए होती हैं जो संकलित प्रोग्राम लिखे और टेस्ट किए जाने से बहुत पहले चालू हो जाना चाहिए।

जल्दी से एक प्रोग्राम लिखने के लिए शेल प्रोग्रामिंग की आवश्यकता होती है क्योंकि यह ग्राहक की जरूरतों—चाहे वह आप हों या कोई और—त्वरित प्रतिक्रिया सक्षम करता है। यदि लॉजिक या कोड में बग्स के साथ समस्याएं हैं, तो उन्हें लगभग तुरंत ठीक किया और पुनः टेस्ट किया जा सकता है। यदि आवश्यकताओं का मूल सेट त्रुटिपूर्ण या अधूरा है, तो शेल स्क्रिप्ट्स को नई आवश्यकताओं को पूरा करने के लिए बहुत जल्दी बदला जा सकता है। सामान्य तौर पर, सिसएडमिन की नौकरी में विकास की गति की आवश्यकता प्रोग्राम को यथासंभव तेजी से चलाने या RAM जैसे सिस्टम संसाधनों का यथासंभव कम उपयोग करने की आवश्यकता को ओवरराइड करती है।

अधिकांश चीजें जो सिसएडमिन्स करते हैं, उन्हें करने का तरीका निकालने में निष्पादित करने से अधिक समय लगता है। इस प्रकार, ऐसा लग सकता है कि आप जो कुछ भी करते हैं उसके लिए शेल स्क्रिप्ट्स बनाना प्रतिकूल है। स्क्रिप्ट्स लिखने और उन्हें उन टूल्स में बनाने में कुछ समय लगता है जो पुनरुत्पादन योग्य परिणाम उत्पन्न करते हैं और जितनी बार आवश्यक हो उतनी बार उपयोग किए जा सकते हैं। समय की बचत हर बार होती है जब आप बिना यह पता लगाए (फिर से) कि कार्य कैसे करना है, स्क्रिप्ट चला सकते हैं।

अंतिम विचार

इस लेख ने शेल स्क्रिप्ट बनाने में बहुत आगे नहीं बढ़ा, लेकिन इसने एक बहुत छोटी बनाई। इसने शेल स्क्रिप्ट्स बनाने के कारणों का भी पता लगाया और क्यों वे सिस्टम एडमिनिस्ट्रेटर के लिए संकलित प्रोग्राम्स की तुलना में सबसे कुशल विकल्प हैं।

अगले लेख में, आप एक बैश स्क्रिप्ट टेम्पलेट बनाना शुरू करेंगे जिसे अन्य बैश स्क्रिप्ट्स के लिए शुरुआती बिंदु के रूप में उपयोग किया जा सकता है। टेम्पलेट में अंततः एक हेल्प सुविधा, एक GNU लाइसेंसिंग स्टेटमेंट, कई सरल फ़ंक्शन्स, और उन ऑप्शंस से निपटने के लिए कुछ लॉजिक होगा, साथ ही अन्य जो इस टेम्पलेट पर आधारित स्क्रिप्ट्स के लिए आवश्यक हो सकते हैं।

संसाधन

  • बैश के साथ प्रोग्राम कैसे करें: सिंटैक्स और टूल्स
  • बैश के साथ प्रोग्राम कैसे करें: लॉजिकल ऑपरेटर्स और शेल एक्सपैंशन
  • बैश के साथ प्रोग्राम कैसे करें: लूप्स

यह लेख श्रृंखला डेविड बोथ के तीन-भाग वाले लिनक्स सेल्फ-स्टडी कोर्स, Using and Administering Linux—Zero to SysAdmin के वॉल्यूम 2, अध्याय 10 पर आंशिक रूप से आधारित है।

  1. rbash: रिस्ट्रिक्टेड Bash शेल में महारत - अवधारणाएं, उपयोग और व्यावहारिक उदाहरण rbash: रिस्ट्रिक्टेड Bash शेल में महारत - अवधारणाएं, उपयोग और व्यावहारिक उदाहरण

    लिनक्स शेल सबसे आकर्षक और शक्तिशाली GNU/लिनक्स संचालित टूल में से एक है। X सहित सभी एप्लिकेशन, शेल पर बने हैं और लिनक्स शेल इतना शक्तिशाली है कि इसका उपयोग करके पूरे लिनक्स सिस्टम को सटीक रूप से नियंत्रित किया जा सकता है। लिनक्स शेल का दूसरा पहलू यह है कि यह संभावित रूप से हानिकारक हो सकता है, जब आप

  1. Bash शेल फ़ंक्शन्स में मास्टर करें: 6 व्यावहारिक उदाहरण और टिप्स Bash शेल फ़ंक्शन्स में मास्टर करें: 6 व्यावहारिक उदाहरण और टिप्स

    Bash शेल फ़ंक्शन्स कई UNIX / Linux कमांड्स को बाद में निष्पादन के लिए एक ही नाम का उपयोग करके समूहबद्ध करने का एक तरीका है। Bash शेल फ़ंक्शन को नियमित Unix कमांड की तरह निष्पादित किया जा सकता है। शेल फ़ंक्शन्स को किसी नई प्रक्रिया को बनाए बिना वर्तमान शेल संदर्भ में निष्पादित किया जाता है। Bash alia

  1. Bash स्क्रिप्टिंग में मास्टर करें: 5 वास्तविक-विश्व उदाहरणों के साथ एक व्यावहारिक परिचय Bash स्क्रिप्टिंग में मास्टर करें: 5 वास्तविक-विश्व उदाहरणों के साथ एक व्यावहारिक परिचय

    हमारे चल रहे Unix Sed और Unix Awk सीरीज़ के समान, हम Bash स्क्रिप्टिंग पर कई लेख पोस्ट करेंगे, जो व्यावहारिक उदाहरणों के साथ सभी Bash स्क्रिप्टिंग तकनीकों को कवर करेंगे। शेल एक प्रोग्राम है, जो उपयोगकर्ता कमांड्स की व्याख्या करता है। कमांड्स या तो उपयोगकर्ता द्वारा सीधे दर्ज की जाती हैं या शेल स्क्र