यह छोटा ट्यूटोरियल आपको अपने Bash/शेल स्क्रिप्ट से टाइप किए गए इनपुट के लिए उपयोगकर्ता को प्रॉम्प्ट करना सिखाएगा। यह सीखना आसान है, करना आसान है, तो पढ़ें!
read कमांड
शेल स्क्रिप्ट में उपयोगकर्ता इनपुट पढ़ने के लिए, उपयुक्त नाम वाले read कमांड का उपयोग करें। इसका निम्नलिखित सिंटैक्स है:
read OPTIONS VARIABLES
ध्यान दें कि:
- read कमांड मानक इनपुट से एक लाइन पढ़ेगा और उस इनपुट को फ़ील्ड में विभाजित करेगा
- आमतौर पर, मानक इनपुट आपके कीबोर्ड से इनपुट के साथ टर्मिनल होता है, लेकिन आप read कमांड में इनपुट को पाइप या रीडायरेक्ट भी कर सकते हैं
- उपयोगकर्ता के दृष्टिकोण से, उन्हें संकेत दिया जाएगा और उन्हें एंटर कुंजी दबाने के बाद कुछ दर्ज करना होगा
- OPTIONS नीचे दी गई तालिका से विकल्प फ्लैग की एक सूची होनी चाहिए जो read कमांड के व्यवहार को संशोधित करेगी
- VARIABLES मानों की एक सूची है जो स्क्रिप्ट को स्पेस से अलग करके पास की जाएगी
- यदि -p विकल्प का उपयोग किया जाता है, तो आप इसे प्रॉम्प्ट की एक मिलान सूची के साथ जोड़ सकते हैं ताकि उपयोगकर्ता को बताया जा सके कि उन्हें क्या दर्ज करना चाहिए
- चूंकि कई VARIABLES को स्पेस से अलग करके आपूर्ति की जा सकती है, कोई भी मान जिसे आप इनपुट करना चाहते हैं, जिसमें स्पेस या अन्य विशेष वर्ण शामिल हैं, को उद्धृत किया जाना चाहिए
| read आमतौर पर उपयोग किए जाने वाले विकल्प | |
|---|---|
| -a array | पढ़े गए शब्दों को ARRAY वेरिएबल के क्रमिक सूचकांकों को असाइन करें, शून्य से शुरू |
| -p prompt | पढ़ने का प्रयास करने से पहले बिना ट्रेलिंग न्यूलाइन के PROMPT स्ट्रिंग आउटपुट करें |
| -r | बैकस्लैश को किसी भी वर्ण से बचने की अनुमति न दें |
| -s | टर्मिनल से आने वाले इनपुट को इको न करें |
| -t timeout | टाइम आउट और विफलता लौटाएं यदि TIMEOUT सेकंड के भीतर इनपुट की पूरी लाइन नहीं पढ़ी जाती है |
हमेशा की तरह, आप read कमांड के लिए उपयोगकर्ता मैनुअल प्राप्त कर सकते हैं, जिसमें उपलब्ध विकल्पों की पूरी सूची शामिल है, चलाकर:
man read
Read कमांड का उपयोग करके इनपुट के लिए प्रॉम्प्ट करना
Bash/शेल स्क्रिप्ट में उपयोगकर्ता इनपुट स्वीकार करने के लिए read कमांड का उपयोग करने के कुछ उदाहरण यहां दिए गए हैं।
लेकिन पहले…
Linux शेल स्क्रिप्ट में ‘#!’ क्या है?
सिर्फ इनपुट प्राप्त करना
यह कमांड का सबसे सरल उपयोग है – बस इनपुट से एक मान पढ़ना:
#!/bin/bash read word echo You just typed $word
ऊपर, इनपुट को $word नामक वेरिएबल में पढ़ा जाता है, और फिर echo कमांड का उपयोग करके प्रदर्शित किया जाता है। फिर से, कोई संकेत नहीं होगा – स्क्रीन रुकेगी और उपयोगकर्ता के कुछ टाइप करने का इंतजार करेगी, उसके बाद ENTER कुंजी – फिर स्क्रिप्ट दिए गए इनपुट के साथ फिर से शुरू होगी।
कई इनपुट मान प्राप्त करने के लिए, कमांड में स्पेस से अलग करके अधिक वेरिएबल जोड़ें:
#!/bin/bash read word1 word2 echo You just typed $word1 followed by $word2
संदेश के साथ इनपुट के लिए प्रॉम्प्ट करना
इनपुट की प्रतीक्षा में स्क्रीन रुकना वास्तव में उपयोगकर्ता के अनुकूल नहीं है। आमतौर पर, आप उपयोगकर्ता को बताना चाहेंगे कि उन्हें क्या दर्ज करना चाहिए – उदाहरण के लिए एक उपयोगकर्ता नाम या पासवर्ड। यह अगला उदाहरण ठीक यही करता है:
#!/bin/bash read -p 'Username: ' username read -sp 'Password: ' password echo Your username is $username, we will not display your password
ऊपर, प्रत्येक वेरिएबल के मान के लिए उपयोगकर्ता को क्या इनपुट करना चाहिए, यह बताने वाला एक संदेश – एक प्रॉम्प्ट प्रदर्शित करने के लिए -p विकल्प का उपयोग किया जाता है।
आप पासवर्ड वेरिएबल के लिए उपयोग किए गए -s विकल्प को भी देख सकते हैं, जो टाइप किए गए इनपुट को चुप करा देता है ताकि यह प्रदर्शित न हो।
संदेश के साथ एकाधिक इनपुट के लिए प्रॉम्प्ट करना
आप प्रॉम्प्ट कर सकते हैं और फिर कई मान पढ़ सकते हैं:
#!/bin/bash read -p 'Please type your first and last name: ' first last echo Your name is $first $last
हां/नहीं के लिए प्रॉम्प्ट करना
यहां बताया गया है कि while लूप और केस स्टेटमेंट का उपयोग करके उपयोगकर्ता से एक साधारण हां/नहीं प्रश्न कैसे पूछें। y या Y से शुरू होने वाली किसी भी स्ट्रिंग को हां* के रूप में व्याख्या किया जाएगा, n या N से शुरू होने वाली किसी भी स्ट्रिंग को नहीं के रूप में व्याख्या किया जाएगा:
#!/bin/bash while true; do read -p "Do you wish to perform this action?" yesno case $yesno in [Yy]* ) echo "You answered yes" ;; [Nn]* ) echo "You answered no, exiting" exit ;; * ) echo "Answer either yes or no!";; esac done
स्क्रिप्ट तब तक निष्पादित होगी जब तक नहीं प्राप्त नहीं होता – और उपयोगकर्ता को कोई भी कार्रवाई करने के लिए प्रॉम्प्ट करने के लिए आसानी से संशोधित किया जा सकता है।