एंड्रॉयड

बैश कार्य

बैश स्क्रिप्टिंग 7: कार्य और पाठ्यक्रम की समीक्षा

बैश स्क्रिप्टिंग 7: कार्य और पाठ्यक्रम की समीक्षा

विषयसूची:

Anonim

बैश फ़ंक्शन अनिवार्य रूप से आदेशों का एक सेट है जिसे कई बार कहा जा सकता है। एक फ़ंक्शन का उद्देश्य आपकी बैश स्क्रिप्ट को अधिक पठनीय बनाने में मदद करना है और एक ही कोड को बार-बार लिखने से बचना है।

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

बैश समारोह घोषणा

बश फ़ंक्शन घोषित करने का सिंटैक्स बहुत सरल है। उन्हें दो अलग-अलग स्वरूपों में घोषित किया जा सकता है:

  1. पहला प्रारूप फ़ंक्शन नाम से शुरू होता है, उसके बाद कोष्ठक। यह पसंदीदा और अधिक उपयोग किया जाने वाला प्रारूप है।

    function_name () { commands }

    एकल पंक्ति संस्करण:

    function_name () { commands; }

    दूसरा प्रारूप फ़ंक्शन नाम के बाद आरक्षित शब्द के साथ शुरू होता है।

    function function_name { commands }

    एकल पंक्ति संस्करण:

    function function_name { commands; }

कुछ बिंदुओं पर ध्यान दिया जाना चाहिए:

  • कर्ली ब्रेसेस {} बीच कमांड लिस्ट फंक्शन की बॉडी है। कर्ली ब्रेसिज़ जो फ़ंक्शन बॉडी को घेरते हैं, उन्हें रिक्त स्थान या newlines द्वारा बॉडी से अलग किया जाना चाहिए। फ़ंक्शन को निर्धारित करना इसे निष्पादित नहीं करता है। बैश फ़ंक्शन को लागू करने के लिए, बस फ़ंक्शन नाम का उपयोग करें। जब भी फ़ंक्शन को शेल स्क्रिप्ट में कहा जाता है तो घुंघराले ब्रेसिज़ के बीच कमांड निष्पादित किए जाते हैं। फ़ंक्शन को फ़ंक्शन के लिए किसी भी कॉल से पहले रखा जाना चाहिए। जब ​​सिंगल लाइन "कॉम्पैक्टेड" फ़ंक्शन का उपयोग करके अर्धविराम ; फ़ंक्शन में अंतिम आदेश का पालन करना चाहिए। आपको हमेशा अपने फ़ंक्शन के नाम वर्णनात्मक रखने का प्रयास करना चाहिए।

इसे बेहतर समझने के लिए, निम्नलिखित उदाहरण पर एक नज़र डालें:

~ / Hello_world.sh

#!/bin/bash hello_world () { echo 'hello, world' } hello_world

चलो लाइन द्वारा कोड लाइन का विश्लेषण करते हैं:

  • पंक्ति 3 हम इसे एक नाम देकर फ़ंक्शन को परिभाषित कर रहे हैं, और घुंघराले ब्रेस को खोलते हैं { जो फ़ंक्शन के शरीर की शुरुआत को चिह्नित करता है। लाइन 4 फ़ंक्शन बॉडी है। फ़ंक्शन बॉडी में कई कमांड और वैरिएबल डिक्लेरेशन हो सकते हैं। 5 , क्लोज़िंग कर्ली ब्रैकेट } , hello_world फ़ंक्शन के अंत को परिभाषित करता है। लाइन 7 हम फ़ंक्शन को निष्पादित कर रहे हैं। आप फ़ंक्शन को जितनी बार चाहें उतनी बार निष्पादित कर सकते हैं।

यदि आप स्क्रिप्ट चलाते हैं, तो यह hello, world को प्रिंट करेगा।

चर स्कोप

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

स्थानीय कीवर्ड के साथ फ़ंक्शन के भीतर स्थानीय चर घोषित किए जा सकते हैं और उनका उपयोग केवल उस फ़ंक्शन के अंदर ही किया जा सकता है। आपके पास विभिन्न कार्यों में एक ही नाम के साथ स्थानीय चर हो सकते हैं।

यह समझने के लिए कि बैश में वेरिएबल्स का दायरा कैसे काम करता है, आइए एक उदाहरण पर विचार करें:

~ / Variables_scope.sh

#!/bin/bash var1='A' var2='B' my_function () { local var1='C' var2='D' echo "Inside function: var1: $var1, var2: $var2" } echo "Before executing function: var1: $var1, var2: $var2" my_function echo "After executing function: var1: $var1, var2: $var2"

स्क्रिप्ट दो वैश्विक चर var1 और var2 को परिभाषित करके शुरू होती है। फिर एक फ़ंक्शन जो एक स्थानीय चर var1 सेट करता है और वैश्विक चर var2 को संशोधित करता है।

Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D

उपरोक्त आउटपुट से, हम यह निष्कर्ष निकाल सकते हैं:

  • यदि आप फ़ंक्शन बॉडी के अंदर एक स्थानीय वैरिएबल को मौजूदा ग्लोबल वैरिएबल के समान नाम के साथ सेट करते हैं, तो यह ग्लोबल वैरिएबल पर पूर्ववर्ती होगा। गोयल वैरिएबल को फंक्शन के भीतर से बदला जा सकता है।

वापसी मान

"वास्तविक" प्रोग्रामिंग भाषाओं में कार्यों के विपरीत, बैश फ़ंक्शन आपको कॉल किए जाने पर एक मान वापस करने की अनुमति नहीं देते हैं। जब कोई बैश फ़ंक्शन पूरा हो जाता है, तो उसका रिटर्न मान फ़ंक्शन में निष्पादित अंतिम कथन की स्थिति, सफलता के लिए 0 और गैर-शून्य दशमलव संख्या 1 - 255 में विफलता के लिए सीमा होती है।

रिटर्न की स्थिति return कीवर्ड का उपयोग करके निर्दिष्ट की जा सकती है, और इसे चर $? को सौंपा गया है $? return स्टेटमेंट फ़ंक्शन को समाप्त करता है। आप इसे फ़ंक्शन की निकास स्थिति के रूप में सोच सकते हैं।

~ / Return_values.sh

#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?

some result 55

वास्तव में एक फ़ंक्शन से एक मनमाना मूल्य वापस करने के लिए, हमें अन्य तरीकों का उपयोग करने की आवश्यकता है। सबसे आसान विकल्प यह है कि फंक्शन के परिणाम को ग्लोबल वैरिएबल में असाइन किया जाए:

~ / Return_values.sh

#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result

some result

किसी फ़ंक्शन से मान वापस करने का एक और बेहतर विकल्प, नीचे दिखाए गए की तरह इको या stdout का उपयोग करके stdout को मूल्य भेजना है:

~ / Return_values.sh

#!/bin/bash my_function () { local func_result="some result" echo "$func_result" } func_result="$(my_function)" echo $func_result

some result

केवल फ़ंक्शन को निष्पादित करने के बजाय, जो संदेश को stdout में प्रिंट करेगा, हम $() कमांड प्रतिस्थापन का उपयोग करके फ़ंक्शन आउटपुट को func_result चर में असाइन कर रहे हैं। चर को बाद में आवश्यकतानुसार उपयोग किया जा सकता है।

बैश कार्यों के लिए तर्क पारित करना

बैश फ़ंक्शन के किसी भी तर्क को पास करने के लिए, उन्हें फ़ंक्शन के नाम के ठीक बाद रखा जाता है, एक स्थान द्वारा अलग किया गया। इसमें तर्क के साथ दुराचार से बचने के लिए तर्कों को दुगुना करना एक अच्छा अभ्यास है।

  • पारित किए गए पैरामीटर $1 , $2 , $3 $n , जो फ़ंक्शन के नाम के बाद पैरामीटर की स्थिति के अनुरूप हैं। $0 चर फ़ंक्शन के नाम के लिए आरक्षित हैं। $# चर में स्थितीय मापदंडों / तर्कों की संख्या पास है। फ़ंक्शन। $* और $@ चर फ़ंक्शन के लिए पारित किए गए सभी स्थितीय मापदंडों / तर्कों को रखते हैं।
    • जब डबल उद्धृत किया जाता है, तो "$*" अंतरिक्ष द्वारा अलग किए गए एक स्ट्रिंग में फैलता है (IFS का पहला चरित्र) - "$1 $2 $n" । जब डबल उद्धृत किया जाता है, तो "$@" अलग तारों का विस्तार करता है - "$1" "$2" "$n" । जब दोहरे उद्धरण नहीं दिए जाते हैं, तो $* और $@ समान होते हैं।

यहाँ एक उदाहरण है:

~ / Passing_arguments.sh

#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"

Hello Joe

निष्कर्ष

बैश फ़ंक्शन किसी विशेष ऑपरेशन को करने के लिए डिज़ाइन किए गए पुन: प्रयोज्य कोड का एक ब्लॉक है। एक बार परिभाषित होने के बाद, फ़ंक्शन को स्क्रिप्ट के भीतर कई बार कहा जा सकता है।

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

बश टर्मिनल