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

बैश और लिनक्स शेल में HEREDOC (यहाँ दस्तावेज़) - ट्यूटोरियल

यह लेख आपको दिखाएगा कि हेरेडोक का उपयोग कैसे करें (यहां दस्तावेज़ ) बैश/शैल स्क्रिप्ट में मल्टी-लाइन टेक्स्ट के साथ काम करने के लिए।

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

यह एक इंटरैक्टिव प्रोग्राम में कई कमांड भी भेज सकता है - इसे बाद के उदाहरणों में दिखाया जाएगा।

इस लेख के उदाहरण बैश और ज़श शैल दोनों में काम करेंगे।

मानक इनपुट, पाइपिंग और पुनर्निर्देशन

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

लिनक्स/बैश में रीडायरेक्ट स्टड, स्टडआउट, स्टैडर, उदाहरणों के साथ

नीचे दिए गए उदाहरण उपरोक्त आलेख में शामिल अवधारणाओं और विधियों का कई बिंदुओं पर उपयोग करेंगे।

बैश/Zsh हेरेडोक सिंटैक्स

एक Heredoc . शुरू करने के लिए , आप बस << . का उपयोग करें आज्ञा। यह ऊपर उल्लिखित इनपुट/आउटपुट पुनर्निर्देशन का एक रूप है।

Heredoc . का उपयोग करने के लिए सिंटैक्स इस प्रकार है:

COMMAND <<LIMITSTRING
text line 1
text line 2
...
LIMITSTRING

ध्यान दें कि:

  • कमांड कोई भी लिनक्स कमांड या स्क्रिप्ट हो सकती है - हेरेडोक में निहित पाठ की सामग्री को पुनर्निर्देशन का उपयोग करके इसे भेजा जाएगा
  • < हेरेडोक कथन की शुरुआत को परिभाषित करता है
    • यदि आप बहु-पंक्ति पाठ को इंडेंट करने जा रहे हैं, तो <<- का उपयोग करें (जोड़े गए डैश पर ध्यान दें) इसके बजाय - यह प्रत्येक पंक्ति से अग्रणी टैब को हटा देगा
  • LIMITSTRING वह स्ट्रिंग है जिसे हेरेडोक के लिए टेक्स्ट की प्रविष्टि को समाप्त करने के लिए टाइप किया जाना चाहिए
    • चूंकि हेरेडॉक्स बहु-पंक्ति हैं, उपयोगकर्ता अगली पंक्ति में जाने के लिए ENTER कुंजी दबाते हैं, आप नया टेक्स्ट दर्ज करना बंद करने के लिए एंटर नहीं दबा सकते हैं।
    • LIMITSTRING , इसकी उपस्थिति पर, हेरेडोक को बताता है कि आपने पाठ दर्ज करना और समाप्त करना समाप्त कर दिया है
    • यह कुछ भी हो सकता है - सुनिश्चित करें कि आप वर्णों की एक श्रृंखला का उपयोग करते हैं जिन्हें आपके टेक्स्ट में प्रदर्शित होने की आवश्यकता नहीं होगी ताकि यह समय से पहले समाप्त न हो।
    • EOF . टेक्स्ट का उपयोग करना एक आम बात है ( . के लिए संक्षिप्त nd OF ile) LIMITSTRING . के रूप में - जब तक यह टेक्स्ट हेरेडोक के अंदर प्रदर्शित नहीं होने वाला है।
  • आपके पास टेक्स्ट की जितनी चाहें उतनी पंक्तियां हो सकती हैं

हेयरडॉक उदाहरण

मल्टी-लाइन टेक्स्ट इनपुट स्वीकार करना

यह उदाहरण टेक्स्ट की कई पंक्तियों को स्वीकार करेगा और उन्हें बिल्ली . को भेजेगा प्रदर्शन के लिए आदेश:

cat <<EOF
This is line 1
This is line 2
EOF

उपरोक्त उदाहरण आपके टर्मिनल प्रोग्राम में टाइप किया जाना चाहिए।

चर का उपयोग करना

आप अपने हेरेडोक में शेल चर का उपयोग कर सकते हैं:

cat <<EOF
This is line 1
This is line 2
Your current directory is $PWD
EOF

ऊपर, $PWD चर हेरेडोक की पंक्तियों में से एक में प्रदर्शित होता है - यह चर वर्तमान कार्यशील निर्देशिका का मान रखता है।

Heredoc के आउटपुट को रीडायरेक्ट करना

मानक पुनर्निर्देशन (यदि आप नहीं जानते कि यह क्या है तो लेख में पहले देखें) का उपयोग हेरेडोक की सामग्री को COMMAND को किसी अन्य प्रोग्राम या फ़ाइल में भेजे जाने के बाद भेजने के लिए किया जा सकता है:

cat <<EOF > output.txt
This is line 1
This is line 2
Your current directory is $PWD
EOF

ऊपर, बिल्ली हेरेडोक की सामग्री और बिल्ली . के आउटपुट को पढ़ता है फ़ाइल पर रीडायरेक्ट किया जाता है और लिखा जाता है output.txt > . का उपयोग करके आदेश।

मल्टी-लाइन टेक्स्ट को स्क्रिप्ट में परिभाषित करना

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

अपने स्क्रिप्ट कोड को इंडेंट करने में सक्षम होना अच्छा है - यदि आप नहीं चाहते कि वे टैब आपके टेक्स्ट में दिखाई दें, तो आप एक - जोड़ सकते हैं (डैश) प्रत्येक पंक्ति की शुरुआत से किसी भी सफेद स्थान को छीनने के लिए आपके हेरेडोक घोषणा में:

#!/bin/bash

if $trueOrFalse; then
    cat <<-EOF > output.txt
    This is line 1
    This is line 2
    Your current directory is $PWD
    EOF
fi

#!/bin/bash
है

वैरिएबल को हेरेडोक असाइन करना

आप एक हेरेडॉक में बहु-पंक्ति पाठ को एक स्क्रिप्ट चर को बिल्ली के साथ पढ़कर असाइन कर सकते हैं कमांड और आउटपुट को एक वैरिएबल को असाइन करना जैसे:

mytext=$(cat <<-EOF 
    This is line 1
    This is line 2
    Your current directory is $PWD
    EOF
)

echo $mytext

एक इंटरैक्टिव प्रोग्राम में एकाधिक कमांड भेजना

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

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

mysql -uUSERNAME -pPASSWORD DATABASE <<EOF
SHOW TABLES;
SELECT * FROM posts;
EOF

ऊपर, MySQL कमांड का उपयोग किसी दिए गए DATABASE को USERNAME और PASSWORD से जोड़ने के लिए किया जाता है।

कनेक्शन तैयार होने के बाद दो अनुक्रमिक आदेश जारी किए जाएंगे - एक तालिका दिखाएं के लिए और एक को चुनें पोस्ट . के सभी रिकॉर्ड टेबल।


  1. बैश वैरिएबल ट्यूटोरियल - 6 प्रैक्टिकल बैश ग्लोबल और लोकल वेरिएबल उदाहरण

    यह लेख हमारी चल रही बैश ट्यूटोरियल श्रृंखला का हिस्सा है। किसी भी अन्य प्रोग्रामिंग भाषाओं की तरह, बैश भी चर प्रदान करता है। बैश चर जानकारी के लिए अस्थायी भंडारण प्रदान करते हैं जिसकी कार्यक्रम के जीवनकाल के दौरान आवश्यकता होगी।सिंटैक्स: VARNAME=VALUE नोट: वेरिएबल असाइनमेंट में = साइन के आसपास कोई

  1. बैश शैल फंक्शन ट्यूटोरियल 6 व्यावहारिक उदाहरणों के साथ

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

  1. बैश स्क्रिप्टिंग परिचय ट्यूटोरियल 5 व्यावहारिक उदाहरणों के साथ

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