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

सिस्टम एडमिनिस्ट्रेशन के लिए बैश स्क्रिप्टिंग में महारत हासिल करें: एक शुरुआती गाइड

बैश शेल निश्चित रूप से वहाँ एकमात्र शेल नहीं है, लेकिन यह सबसे शक्तिशाली में से एक है। यह इसे सिस्टम एडमिनिस्ट्रेटर्स के लिए एक लोकप्रिय विकल्प बनाता है जिन्हें एक सिस्टम पर चलाने के लिए कमांड की एक साधारण "लॉन्ड्री लिस्ट" से आगे बढ़कर गंभीर एप्लिकेशन विकसित करने की आवश्यकता होती है। अन्य शेल्स के लिए बहुत सारे बेहतरीन उपयोग हैं (मैं उदाहरण के लिए Git हुक के लिए डिफ़ॉल्ट रूप से Tcsh का उपयोग करता हूँ), लेकिन बैश गंभीर स्क्रिप्टिंग के लिए एक आसान विकल्प है, और यहाँ बताया गया है क्यों।

फंक्शन

बैश स्क्रिप्ट में एक फंक्शन बनाने के लिए, कीवर्ड function का उपयोग करें:

function foo {
# यहाँ कोड
}

फंक्शन प्रोग्रामर्स के लिए उपयोगी हैं क्योंकि वे कोड में अतिरेक को कम करने में मदद करते हैं। कोड में कम अतिरेक का अर्थ है कम रखरखाव क्योंकि यदि आपको किसी मान को बदलने की आवश्यकता है, तो आपको इसे केवल एक बार ढूंढना होगा (इसके फंक्शन में) बजाय हर बार जब इसका उपयोग किया जाता है।

बैश कैसे खड़ा होता है

फंक्शन शेल्स में काफी अच्छी तरह से समर्थित हैं, Tcsh के उल्लेखनीय अपवाद के साथ।

  • कॉर्न शेल: बैश के समान सिंटैक्स का उपयोग करता है
  • Zsh: बैश के समान सिंटैक्स का उपयोग करता है
  • Fish: फंक्शन बनाने और हेरफेर करने के लिए एक कस्टम function कमांड का उपयोग करता है
  • Tcsh: कभी-कभी, आप Tcsh में फंक्शन की कमी को goto स्टेटमेंट का उपयोग करके हल कर सकते हैं, लेकिन यह शायद ही कभी इष्टतम विकल्प होता है।

रीडायरेक्शन

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

बुनियादी बातें सरल हैं: आउटपुट को रीडायरेक्ट करने के लिए कुछ संख्या में > वर्णों का उपयोग करें और इनपुट को रीडायरेक्ट करने के लिए कुछ संख्या में < वर्णों का उपयोग करें। हालांकि, विशिष्ट प्रकार के इनपुट और आउटपुट के लिए कुछ विशेष नामांकन हैं। उदाहरण के लिए, त्रुटि संदेश stderr नामक एक स्ट्रीम पर जाते हैं, जिसे रीडायरेक्शन के उद्देश्यों के लिए 2> के रूप में नामित किया गया है। उदाहरण के लिए, यह कमांड त्रुटि संदेशों को output.log नामक फाइल में निर्देशित करता है:

$ ls /void 2> output.log

बैश कैसे खड़ा होता है

शेल के साथ इंटरैक्ट करते समय रीडायरेक्शन एक बेहतरीन सुविधा फंक्शन है, और जबकि सभी प्रमुख शेल किसी न किसी तरीके से रीडायरेक्शन का समर्थन करते हैं, सभी सुविधाएँ सभी शेल्स में उपलब्ध नहीं हैं।

  • कॉर्न शेल: बैश के समान सिंटैक्स का उपयोग करता है
  • Zsh: बैश के समान सिंटैक्स का उपयोग करता है
  • Fish: आंशिक समर्थन
  • Tcsh: आंशिक समर्थन

सोर्स

जब आप शेल में एक फाइल को सोर्स करते हैं, तो आप फाइल को अपने शेल वातावरण में आयात कर रहे होते हैं। अधिकांश शेल इसे कुशलता से संभालते हैं, लेकिन कुछ आपकी सुविधा के लिए कुछ अतिरिक्त सुविधाएँ प्रदान करते हैं।

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

बैश कैसे खड़ा होता है

बैश एकमात्र शेल है जो source कमांड या संक्षिप्त (और POSIX-ly सही) . नोटेशन का उपयोग करते समय वर्तमान डायरेक्टरी और आपके PATH दोनों को खोजता है।

की बाइंडिंग

कई शेल आपको उनके साथ इंटरैक्ट करने के तरीके को अनुकूलित करने की अनुमति देते हैं, और निश्चित रूप से, टेक्स्ट-आधारित इंटरफेस के साथ कोई भी इंटरैक्शन टाइपिंग से शुरू होता है। बैश में, आप अपना वर्तमान कीमैप देख सकते हैं:

$ bind -V | grep keymap

अपना कीमैप बदलने के लिए (उदाहरण के लिए Emacs से Vi):

$ bind 'set keymap vi'

बैश कैसे खड़ा होता है

केवल बैश और Zsh की बाइंडिंग के लिए बिल्ट-इन प्रीसेट प्रदान करते हैं।

इतिहास

बैश के पास किसी भी शेल का सबसे मजबूत कमांड-इतिहास इंटरफेस है। बैश संस्करण history रिवर्स खोज, त्वरित याद, इतिहास संपादन (लाइन नंबर द्वारा प्रविष्टियों को हटाने सहित), और बहुत कुछ की अनुमति देता है। अन्य सभी शेल्स संयुक्त रूप से बैश के इतिहास इंटरफेस से मेल खाते हैं, लेकिन कोई भी (यहां तक कि Zsh, जो आमतौर पर बैश की नकल करता है) अपने दम पर इससे मेल नहीं खाता।

इतिहास हेरफेर

history कमांड आपके अतीत के साथ इंटरैक्ट करने का एकमात्र तरीका नहीं है। बैश के पास शॉर्टहैंड नोटेशन का एक समृद्ध संग्रह है जो आपको अपने शेल इतिहास में कमांड को याद करने और यहां तक कि संशोधित करने में सक्षम बनाता है।

उदाहरण के लिए, सबसे हालिया कमांड को फिर से चलाने के लिए (&nbsp;history | tail -n1 का आउटपुट, एक अग्रणी space का उपयोग करके, जिसे यहां &nbsp; द्वारा नामित किया गया है, इतिहास कमांड को अपने इतिहास से बाहर रखने के लिए), आप बस बैश में !! टाइप कर सकते हैं:

$ wc -w luarocks.xml
1284 luarocks.xml
$ !!
1284 luarocks.xml

सबसे हालिया कमांड को चलाने के लिए जबकि उस कमांड के हिस्से को किसी और चीज़ से बदल दिया जाता है, आप स्ट्रिंग प्रतिस्थापन का उपयोग कर सकते हैं:

$ wc -w luarocks.xml
1284 luarocks.xml
$ ^-w^-l
$ wc -l luarocks.xml
214 luarocks.xml

ऐसे कई शॉर्टकट हैं, उन सभी को बैश मैन और इन्फो पेज में प्रलेखित किया गया है। स्वीकार करते हैं, इनमें से कई ट्रिक्स उन्नत उपयोगकर्ताओं के लिए अभिप्रेत हैं जिनके लिए बैश इंटरैक्शन इतना दोहराव और सांसारिक हो गया है कि अस्पष्ट, प्रतीत होता है यादृच्छिक कुंजी संयोजन उपयोगी हैं। Zsh प्रभावी ढंग से बैश की नकल करता है, लेकिन कोई अन्य शेल इस तरह की अधिकतम दक्षता प्रदान नहीं करता।

बैश कैसे खड़ा होता है

बैश के इतिहास कमांड किसी भी अन्य शेल से बेजोड़ हैं (Zsh करीब आता है, लेकिन कुछ विकल्पों का अभाव है, जैसे लाइन नंबर द्वारा हटाने की क्षमता)।

एसोसिएटिव ऐरे

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

हालांकि, बैश में एसोसिएटिव ऐरे बनाने की क्षमता शामिल है, और यह इन ऐरे को किसी अन्य ऐरे के समान मानता है। एक एसोसिएटिव ऐरे आपको केवल नंबर वाले मानों के बजाय कुंजी और मान जोड़े की सूची बनाने देता है।

एसोसिएटिव ऐरे के बारे में अच्छी बात यह है कि कुंजियाँ मनमानी हो सकती हैं:

$ declare -A userdata
$ userdata[name]=seth
$ userdata[pass]=8eab07eb620533b083f241ec4e6b9724
$ userdata[login]=`date --utc +%s`

किसी भी कुंजी को क्वेरी करें:

$ echo "${userdata[name]}"
seth
$ echo "${userdata[login]}"
1583362192

आपके द्वारा ऐरे से अपेक्षित अधिकांश सामान्य ऐरे ऑपरेशन उपलब्ध हैं।

बैश कैसे खड़ा होता है

बैश एसोसिएटिव ऐरे के लिए पूर्ण समर्थन प्रदान करने वाला एकमात्र शेल है (फिर से, Zsh करीब आता है लेकिन कुंजियों को सूचीबद्ध करने के लिए फंक्शन का अभाव है)।

शेल स्क्रिप्टिंग के लिए बैश चुनें

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

व्यवहार में, हालांकि, बैश फ्री और ओपन सोर्स सॉफ्टवेयर है, इसलिए कोई भी इसे इंस्टॉल कर सकता है, चाहे वे लिनक्स, BSD, OpenIndiana, विंडोज, या macOS चलाते हों। बैश इंस्टॉल करने के लिए उपयोगकर्ता को बैश को अपने डिफ़ॉल्ट शेल के रूप में उपयोग करने की आवश्यकता नहीं होती है, या यहां तक कि इसे जानबूझकर लॉन्च करने की भी नहीं, क्योंकि एक अच्छी शेल स्क्रिप्ट अपनी शीर्ष shebang लाइन (#!/bin/bash, उदाहरण के लिए) में पहचानती है कि वह किस शेल का उपयोग करती है।

संदेह होने पर, अपने दस्तावेज़ीकरण में अपने शेल स्क्रिप्ट के डिपेंडेंसी के रूप में बैश को शामिल करें (भले ही यह एकमात्र डिपेंडेंसी हो) ताकि उपयोगकर्ताओं को सचेत किया जा सके कि यह एक बैश स्क्रिप्ट है न कि एक सामान्य शेल स्क्रिप्ट।

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

सिसएडमिन के लिए बैश स्क्रिप्टिंग के बारे में हमारी ईबुक डाउनलोड करें!

  1. Mac पर SvnX के साथ सबवर्जन मास्टर करें: आपका संपूर्ण शुरुआती गाइड Mac पर SvnX के साथ सबवर्जन मास्टर करें: आपका संपूर्ण शुरुआती गाइड

    यदि आप एक डेवलपर हैं, तो वर्जन कंट्रोल सॉफ्टवेयर आपको अपने कोड में परिवर्तनों को ट्रैक करने की अनुमति देता है। यह उन परियोजनाओं पर आवश्यक है जहां आप एक टीम के हिस्से के रूप में काम कर रहे हैं, जिससे आप परिवर्तनों को होते ही ट्रैक कर सकते हैं। जबकि GIT जैसी सेवाएं लोकप्रिय हैं, विशेष रूप से ओपन-सोर्स

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

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

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

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