Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> बाश प्रोग्रामिंग

अपने बैश कार्यक्रम में सहायता सुविधा कैसे जोड़ें

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

इस श्रृंखला के चार लेखों में से यह तीसरा बताता है कि एक साधारण सहायता फ़ंक्शन कैसे बनाएं और उसका उपयोग कैसे करें। अपनी सहायता सुविधा बनाते समय, आप फ़ंक्शन का उपयोग करने और -h जैसे कमांड-लाइन विकल्पों को संभालने के तरीके के बारे में भी जानेंगे। ।

सहायता क्यों?

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

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

फ़ंक्शंस के बारे में

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

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

फ़ंक्शन का सिंटैक्स है:

FunctionName(){program statements}

सीएलआई में एक साधारण फ़ंक्शन बनाकर इसका अन्वेषण करें। (फ़ंक्शन को शेल वातावरण में संग्रहीत किया जाता है, जिसमें इसे बनाया जाता है।) आप hw नामक एक फ़ंक्शन बनाने जा रहे हैं। , जो "हैलो वर्ल्ड" के लिए खड़ा है। सीएलआई में निम्नलिखित कोड दर्ज करें और Enter दबाएं . फिर hw . दर्ज करें जैसा कि आप कोई अन्य शेल कमांड करेंगे:

[student@testvm1 ~]$ hw(){ echo "Hi there kiddo"; }
[student@testvm1 ~]$ hw
Hi there kiddo
[student@testvm1 ~]$

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

[student@testvm1 ~]$ declare -f | less
<snip>
hw ()
{
    echo "Hi there kiddo"
}
<snip>

उस फ़ंक्शन को हटा दें क्योंकि अब आपको इसकी आवश्यकता नहीं है। आप इसे अनसेट . के साथ कर सकते हैं आदेश:

[student@testvm1 ~]$ unset -f hw ; hw
bash: hw: command not found
[student@testvm1 ~]$

सहायता फ़ंक्शन बनाना

नमस्तेखोलें एक संपादक में प्रोग्राम करें और नीचे सहायता फ़ंक्शन को नमस्ते . में जोड़ें प्रोग्राम कोड कॉपीराइट स्टेटमेंट के बाद लेकिन गूंज "हैलो वर्ल्ड!" . से पहले बयान। यह सहायता फ़ंक्शन प्रोग्राम का संक्षिप्त विवरण, सिंटैक्स आरेख और उपलब्ध विकल्पों का संक्षिप्त विवरण प्रदर्शित करेगा। हेल्प फंक्शन के परीक्षण के लिए एक कॉल जोड़ें और कुछ टिप्पणी लाइनें जो फंक्शन और प्रोग्राम के मुख्य भाग के बीच एक दृश्य सीमांकन प्रदान करती हैं:

################################################################################
# Help                                                                         #
################################################################################
Help()
{
   # Display Help
   echo "Add description of the script functions here."
   echo
   echo "Syntax: scriptTemplate [-g|h|v|V]"
   echo "options:"
   echo "g     Print the GPL license notification."
   echo "h     Print this Help."
   echo "v     Verbose mode."
   echo "V     Print software version and exit."
   echo
}

################################################################################
################################################################################
# Main program                                                                 #
################################################################################
################################################################################

Help
echo "Hello world!"

इस सहायता फ़ंक्शन में वर्णित विकल्प मेरे द्वारा लिखे जाने वाले प्रोग्राम के लिए विशिष्ट हैं, हालांकि अभी तक कोई भी कोड में नहीं है। इसका परीक्षण करने के लिए प्रोग्राम चलाएँ:

[student@testvm1 ~]$ ./hello
Add description of the script functions here.

Syntax: scriptTemplate [-g|h|v|V]
options:
g     Print the GPL license notification.
h     Print this Help.
v     Verbose mode.
V     Print software version and exit.

Hello world!
[student@testvm1 ~]$

चूंकि आपने सहायता को केवल तभी प्रदर्शित करने के लिए कोई तर्क नहीं जोड़ा है जब आपको इसकी आवश्यकता हो, प्रोग्राम हमेशा सहायता प्रदर्शित करेगा। चूंकि फ़ंक्शन सही ढंग से काम कर रहा है, इसलिए सहायता को प्रदर्शित करने के लिए कुछ तर्क जोड़ने के लिए आगे पढ़ें, जब -h जब आप कमांड लाइन पर प्रोग्राम को इनवाइट करते हैं तो विकल्प का उपयोग किया जाता है।

हैंडलिंग विकल्प

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

गेटटॉप्स कमांड कमांड लाइन पर निर्दिष्ट किसी भी और सभी विकल्पों को पढ़ता है और उन विकल्पों की एक सूची बनाता है। नीचे दिए गए कोड में, जबकि $options . चर सेट करके विकल्पों की सूची के माध्यम से कमांड लूप करता है प्रत्येक के लिए। मामला स्टेटमेंट का इस्तेमाल बारी-बारी से प्रत्येक विकल्प का मूल्यांकन करने और संबंधित श्लोक में कथनों को निष्पादित करने के लिए किया जाता है। जबकि स्टेटमेंट तब तक विकल्पों की सूची का मूल्यांकन करना जारी रखेगा जब तक कि वे सभी संसाधित नहीं हो जाते हैं या यह एक एग्जिट स्टेटमेंट का सामना नहीं करता है, जो प्रोग्राम को समाप्त कर देता है।

"नमस्ते दुनिया!" . को गूंजने से ठीक पहले सहायता फ़ंक्शन कॉल को हटाना सुनिश्चित करें बयान ताकि कार्यक्रम का मुख्य भाग अब इस तरह दिखे:

################################################################################
################################################################################
# Main program                                                                 #
################################################################################
################################################################################
################################################################################
# Process the input options. Add options as needed.                            #
################################################################################
# Get the options
while getopts ":h" option; do
   case $option in
      h) # display Help
         Help
         exit;;
   esac
done

echo "Hello world!"

-h . के लिए केस ऑप्शन में एग्जिट स्टेटमेंट के अंत में डबल सेमीकॉलन पर ध्यान दें . प्रत्येक विकल्प के अंत को चित्रित करने के लिए इस केस स्टेटमेंट में जोड़े गए प्रत्येक विकल्प के लिए यह आवश्यक है।

परीक्षण

परीक्षण अब थोड़ा और जटिल है। आपको अपने प्रोग्राम को कई अलग-अलग विकल्पों के साथ परीक्षण करने की आवश्यकता है - और कोई विकल्प नहीं - यह देखने के लिए कि यह कैसे प्रतिक्रिया करता है। सबसे पहले, यह सुनिश्चित करने के लिए बिना किसी विकल्प के परीक्षण करें कि यह "हैलो वर्ल्ड!" जैसा होना चाहिए:

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

यह काम करता है, इसलिए अब उस तर्क का परीक्षण करें जो सहायता पाठ प्रदर्शित करता है:

[student@testvm1 ~]$ ./hello -h
Add description of the script functions here.

Syntax: scriptTemplate [-g|h|t|v|V]
options:
g     Print the GPL license notification.
h     Print this Help.
v     Verbose mode.
V     Print software version and exit.

यह अपेक्षा के अनुरूप काम करता है, इसलिए कुछ परीक्षण करके देखें कि जब आप कुछ अप्रत्याशित विकल्प दर्ज करते हैं तो क्या होता है:

[student@testvm1 ~]$ ./hello -x
Hello world!
[student@testvm1 ~]$ ./hello -q
Hello world!
[student@testvm1 ~]$ ./hello -lkjsahdf
Add description of the script functions here.

Syntax: scriptTemplate [-g|h|t|v|V]
options:
g     Print the GPL license notification.
h     Print this Help.
v     Verbose mode.
V     Print software version and exit.

[student@testvm1 ~]$

कार्यक्रम बिना किसी त्रुटि के विशिष्ट प्रतिक्रियाओं के बिना किसी भी विकल्प को अनदेखा करता है। लेकिन अंतिम प्रविष्टि पर ध्यान दें (-lkjsahdf . के साथ) विकल्पों के लिए):क्योंकि एक h . है विकल्पों की सूची में, प्रोग्राम इसे पहचानता है और हेल्प टेक्स्ट को प्रिंट करता है। इस परीक्षण से पता चला है कि प्रोग्राम में गलत इनपुट को संभालने की क्षमता नहीं है और यदि कोई पता चला है तो प्रोग्राम को समाप्त कर सकता है।

आप किसी भी विकल्प से मेल खाने के लिए केस स्टेटमेंट में एक और केस स्टांजा जोड़ सकते हैं जिसमें स्पष्ट मिलान नहीं है। यह सामान्य मामला ऐसी किसी भी चीज़ से मेल खाएगा जिसके लिए आपने विशिष्ट मिलान प्रदान नहीं किया है। केस स्टेटमेंट अब इस तरह दिखता है, \? . के कैच-ऑल मैच के साथ पिछले मामले के रूप में। किसी भी अतिरिक्त विशिष्ट मामले को इस अंतिम मामले से पहले होना चाहिए:

while getopts ":h" option; do
   case $option in
      h) # display Help
         Help
         exit;;
     \?) # incorrect option
         echo "Error: Invalid option"
         exit;;
   esac
done

पहले के समान विकल्पों का उपयोग करके प्रोग्राम का फिर से परीक्षण करें और देखें कि यह अब कैसे काम करता है।

आप कहां हैं

आपने इस आलेख में आदेश-पंक्ति विकल्पों को संसाधित करने की क्षमता और एक सहायता प्रक्रिया जोड़कर एक अच्छी राशि हासिल की है। आपकी बैश स्क्रिप्ट अब इस तरह दिखती है:

#!/usr/bin/bash
################################################################################
#                              scriptTemplate                                  #
#                                                                              #
# Use this template as the beginning of a new program. Place a short           #
# description of the script here.                                              #
#                                                                              #
# Change History                                                               #
# 11/11/2019  David Both    Original code. This is a template for creating     #
#                           new Bash shell scripts.                            #
#                           Add new history entries as needed.                 #
#                                                                              #
#                                                                              #
################################################################################
################################################################################
################################################################################
#                                                                              #
#  Copyright (C) 2007, 2019 David Both                                         #
#  LinuxGeek46@both.org                                                        #
#                                                                              #
#  This program is free software; you can redistribute it and/or modify        #
#  it under the terms of the GNU General Public License as published by        #
#  the Free Software Foundation; either version 2 of the License, or           #
#  (at your option) any later version.                                         #
#                                                                              #
#  This program is distributed in the hope that it will be useful,             #
#  but WITHOUT ANY WARRANTY; without even the implied warranty of              #
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
#  GNU General Public License for more details.                                #
#                                                                              #
#  You should have received a copy of the GNU General Public License           #
#  along with this program; if not, write to the Free Software                 #
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   #
#                                                                              #
################################################################################
################################################################################
################################################################################

################################################################################
# Help                                                                         #
################################################################################
Help()
{
   # Display Help
   echo "Add description of the script functions here."
   echo
   echo "Syntax: scriptTemplate [-g|h|t|v|V]"
   echo "options:"
   echo "g     Print the GPL license notification."
   echo "h     Print this Help."
   echo "v     Verbose mode."
   echo "V     Print software version and exit."
   echo
}

################################################################################
################################################################################
# Main program                                                                 #
################################################################################
################################################################################
################################################################################
# Process the input options. Add options as needed.                            #
################################################################################
# Get the options
while getopts ":h" option; do
   case $option in
      h) # display Help
         Help
         exit;;
     \?) # incorrect option
         echo "Error: Invalid option"
         exit;;
   esac
done

echo "Hello world!"

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

अगली बार

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

अगला लेख यह सुनिश्चित करने के लिए कि कार्यक्रम सही परिस्थितियों में चलेगा, चरों को प्रारंभ करने और कुछ विवेकपूर्ण जाँच करने पर विचार करेगा।

संसाधन

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

लेखों की यह श्रृंखला आंशिक रूप से डेविड दोनों के तीन-भाग वाले Linux स्व-अध्ययन पाठ्यक्रम के खंड 2, अध्याय 10 पर आधारित है, लिनक्स का उपयोग और व्यवस्थापन—SysAdmin के लिए ज़ीरो।


  1. अपने विंडोज डेस्कटॉप में साइडबार कैसे जोड़ें

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

  1. अपने मैक में स्टार्टअप आइटम कैसे जोड़ें

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

  1. अपने पीसी पर अवांछित प्रोग्राम कैसे अनइंस्टॉल करें

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