जब आप बैश के साथ स्क्रिप्टिंग कर रहे होते हैं, तो कभी-कभी आपको किसी फाइल से डेटा पढ़ने या किसी फाइल में डेटा लिखने की आवश्यकता होती है। कभी-कभी एक फाइल में कॉन्फ़िगरेशन विकल्प हो सकते हैं, और दूसरी बार फाइल वह डेटा होती है जिसे आपका उपयोगकर्ता आपके एप्लिकेशन के साथ बना रहा है। हर भाषा इस कार्य को थोड़ा अलग तरीके से संभालती है, और यह लेख दर्शाता है कि बैश और अन्य POSIX शेल के साथ डेटा फाइलों को कैसे संभालना है।
बैश इंस्टॉल करें
यदि आप लिनक्स पर हैं, तो शायद आपके पास पहले से ही बैश है। यदि नहीं, तो आप इसे अपने सॉफ्टवेयर रिपॉजिटरी में पा सकते हैं।
macOS पर, आप डिफ़ॉल्ट टर्मिनल का उपयोग कर सकते हैं, या तो बैश या Zsh, जो macOS संस्करण पर निर्भर करता है जिसे आप चला रहे हैं।
विंडोज पर, बैश का अनुभव करने के कई तरीके हैं, जिसमें माइक्रोसॉफ्ट का आधिकारिक तौर पर समर्थित विंडोज सबसिस्टम फॉर लिनक्स (WSL) शामिल है।
एक बार जब आपके पास बैश इंस्टॉल हो जाए, तो अपना पसंदीदा टेक्स्ट एडिटर खोलें और कोडिंग के लिए तैयार हो जाएं।
बैश के साथ फाइल पढ़ना
शेल होने के अलावा, बैश एक स्क्रिप्टिंग भाषा है। बैश से डेटा पढ़ने के कई तरीके हैं: आप एक प्रकार का डेटा स्ट्रीम बना सकते हैं और आउटपुट को पार्स कर सकते हैं, या आप डेटा को मेमोरी में लोड कर सकते हैं। दोनों जानकारी ग्रहण करने के मान्य तरीके हैं, लेकिन प्रत्येक के काफी विशिष्ट उपयोग के मामले हैं।
बैश में फाइल सोर्स करें
जब आप बैश में एक फाइल को "सोर्स" करते हैं, तो आप बैश को फाइल की सामग्री को इस अपेक्षा के साथ पढ़ने का कारण बनते हैं कि इसमें वैध डेटा है जिसे बैश अपने स्थापित डेटा मॉडल में फिट कर सकता है। आप किसी भी पुरानी फाइल से डेटा सोर्स नहीं करेंगे, लेकिन आप इस विधि का उपयोग कॉन्फ़िगरेशन फाइलों और फंक्शन को पढ़ने के लिए कर सकते हैं।
उदाहरण के लिए, example.sh नामक एक फाइल बनाएं और इसमें यह डालें:
#!/bin/sh
greet opensource.com
echo "The meaning of life is $var"
कोड चलाएं यह देखने के लिए कि यह विफल होता है:
$ bash ./example.sh
./example.sh: line 3: greet: command not found
The meaning of life is
बैश में greet नामक कमांड नहीं है, इसलिए यह उस लाइन को निष्पादित नहीं कर सका, और इसके पास var नामक वेरिएबल का कोई रिकॉर्ड नहीं है, इसलिए जीवन का कोई ज्ञात अर्थ नहीं है। इस समस्या को ठीक करने के लिए, include.sh नामक एक फाइल बनाएं:
greet() {
echo "Hello ${1}"
}
var=42
अपने example.sh स्क्रिप्ट को source कमांड शामिल करने के लिए संशोधित करें:
#!/bin/sh
source include.sh
greet opensource.com
echo "The meaning of life is $var"
स्क्रिप्ट चलाएं यह देखने के लिए कि यह काम करता है:
$ bash ./example.sh
Hello opensource.com
The meaning of life is 42
greet कमांड आपके शेल वातावरण में लाया जाता है क्योंकि यह include.sh फाइल में परिभाषित है, और यह तर्क (opensource.com इस उदाहरण में) को भी पहचानता है। वेरिएबल var सेट और आयात किया जाता है, भी।
बैश में फाइल पार्स करें
डेटा को "बैश में" प्राप्त करने का दूसरा तरीका इसे डेटा स्ट्रीम के रूप में पार्स करना है। ऐसा करने के कई तरीके हैं। आप grep या cat या किसी भी कमांड का उपयोग कर सकते हैं जो डेटा लेता है और इसे stdout पर पाइप करता है। वैकल्पिक रूप से, आप बैश में अंतर्निहित चीजों का उपयोग कर सकते हैं: रीडायरेक्शन। रीडायरेक्शन अपने आप में बहुत उपयोगी नहीं है, इसलिए इस उदाहरण में, मैं परिणाम को प्रिंट करने के लिए बिल्ट-इन echo कमांड का भी उपयोग करता हूँ:
#!/bin/sh
echo $( < include.sh )
इसे stream.sh के रूप में सहेजें और परिणाम देखने के लिए इसे चलाएँ:
$ bash ./stream.sh
greet() { echo "Hello ${1}" } var=42
$
include.sh फाइल में प्रत्येक लाइन के लिए, बैश लाइन को आपके टर्मिनल पर प्रिंट (या इको) करता है। इसे पहले एक उपयुक्त पार्सर पर पाइप करना बैश के साथ डेटा पढ़ने का एक सामान्य तरीका है। उदाहरण के लिए, एक पल के लिए मान लें कि include.sh एक कॉन्फ़िगरेशन फाइल है जिसमें बराबर (=) चिह्न द्वारा अलग की गई कुंजी और मान जोड़े हैं। आप awk या यहां तक कि cut के साथ मान प्राप्त कर सकते हैं:
#!/bin/sh
myVar=`grep var include.sh | cut -d'=' -f2`
echo $myVar
स्क्रिप्ट चलाने का प्रयास करें:
$ bash ./stream.sh
42
बैश के साथ फाइल में डेटा लिखना
चाहे आप अपने एप्लिकेशन के साथ आपके उपयोगकर्ता द्वारा बनाए गए डेटा को संग्रहीत कर रहे हों या केवल उपयोगकर्ता ने एप्लिकेशन में क्या किया इसके बारे में मेटाडेटा (उदाहरण के लिए, गेम सेव या हाल ही में बजाए गए गाने), बाद में उपयोग के लिए डेटा संग्रहीत करने के कई अच्छे कारण हैं। बैश में, आप सामान्य शेल रीडायरेक्शन का उपयोग करके फाइलों में डेटा सहेज सकते हैं।
उदाहरण के लिए, आउटपुट युक्त एक नई फाइल बनाने के लिए, एक सिंगल रीडायरेक्ट टोकन का उपयोग करें:
#!/bin/sh
TZ=UTC
date > date.txt
स्क्रिप्ट को कुछ बार चलाएँ:
$ bash ./date.sh
$ cat date.txt
Tue Feb 23 22:25:06 UTC 2021
$ bash ./date.sh
$ cat date.txt
Tue Feb 23 22:25:12 UTC 2021
डेटा जोड़ने के लिए, डबल रीडायरेक्ट टोकन का उपयोग करें:
#!/bin/sh
TZ=UTC
date >> date.txt
स्क्रिप्ट को कुछ बार चलाएँ:
$ bash ./date.sh
$ bash ./date.sh
$ bash ./date.sh
$ cat date.txt
Tue Feb 23 22:25:12 UTC 2021
Tue Feb 23 22:25:17 UTC 2021
Tue Feb 23 22:25:19 UTC 2021
Tue Feb 23 22:25:22 UTC 2021
आसान प्रोग्रामिंग के लिए बैश
बैश कुछ बुनियादी अवधारणाओं के साथ जटिल प्रोग्राम बनाने में सक्षम होने के कारण सीखने में आसान होने में उत्कृष्ट है। पूर्ण दस्तावेज़ीकरण के लिए, GNU.org पर उत्कृष्ट बैश दस्तावेज़ीकरण देखें।