अवलोकन
लिनक्स Bash शेल स्क्रिप्ट लिखते समय इंटरैक्टिव यूज़र इनपुट को संभालने और टेक्स्ट डेटा को पार्स करने के लिए आवश्यक read कमांड के मुख्य उपयोगों पर चर्चा की गई है। बुनियादी इनपुट हैंडलिंग से लेकर पासवर्ड मास्किंग (-s), टाइमआउट (-t), डिलीमीटर विभाजन (IFS), और व्यावहारिक कार्यों में सबसे अधिक उपयोग किए जाने वाले while लूप आधारित फ़ाइल लाइन-दर-लाइन प्रोसेसिंग में आप पूरी तरह महारत हासिल कर सकते हैं।
1. read कमांड की मूल बातें, प्रॉम्प्ट (-p) और डिफ़ॉल्ट मान सेट करना
read कमांड का अभ्यास करने के लिए एक समर्पित डायरेक्टरी बनाने और उसमें जाने के लिए mkdir -p ~/read-demo && cd ~/read-demo कमांड चलाएं।

read कमांड मानक इनपुट (standard input) से एक लाइन पढ़कर उसे वेरिएबल में स्टोर करता है। -p विकल्प का उपयोग करके यूज़र गाइड प्रॉम्प्ट प्रदर्शित किया जा सकता है और ${वेरिएबल_नाम:-डिफ़ॉल्ट_मान} सिंटैक्स की मदद से मान खाली होने पर डिफ़ॉल्ट मान असाइन किया जा सकता है।
निष्पादन परिणाम में, read कमांड को सीधे इनपुट पास नहीं किया गया था, इसलिए username वेरिएबल खाली रहा और ${username:-guest} सिंटैक्स के अनुसार डिफ़ॉल्ट मान guest प्रिंट हुआ।
⚙️ [प्रमुख विकल्प]
-p : इनपुट प्राप्त करने से पहले स्क्रीन पर प्रदर्शित होने वाली प्रॉम्प्ट स्ट्रिंग निर्दिष्ट करता है।-s : पासवर्ड जैसी संवेदनशील जानकारी दर्ज करते समय स्क्रीन पर इनपुट कैरेक्टर न दिखाने वाले सीक्रेट मोड को सक्रिय करता है।-t : इनपुट प्रतीक्षा के लिए समय सीमा (सेकंड में) निर्धारित करता है और निर्दिष्ट समय बीत जाने पर इनपुट समाप्त कर देता है।-n : केवल निर्दिष्ट वर्णों की संख्या तक ही इनपुट स्वीकार करता है और Enter कुंजी दबाए बिना भी तुरंत समाप्त हो जाता है।-r : बैकस्लैश (\) को एस्केप कैरेक्टर के रूप में व्याख्यायित किए बिना मूल रूप में ही पढ़ता है।-a : दर्ज किए गए शब्दों को स्पेस के आधार पर विभाजित करके एक ऐरे (array) वेरिएबल में क्रमानुसार स्टोर करता है।-d : न्यूलाइन वर्ण के बजाय इनपुट समाप्त करने के लिए एक कस्टम डिलीमीटर (delimiter) वर्ण निर्दिष्ट करता है।

2. पासवर्ड मास्किंग (-s) और इनपुट समय सीमा (-t) हैंडलिंग
अभ्यास जारी रखने के लिए, पहले बनाई गई ~/read-demo डायरेक्टरी में cd ~/read-demo कमांड चलाकर जाएं।

-s विकल्प के साथ इनपुट स्क्रीन को मास्क किया जाता है और -t 5 विकल्प के साथ 5 सेकंड की समय सीमा निर्धारित करके इनपुट प्राप्त किया जाता है।
पासवर्ड समय सीमा के भीतर सफलतापूर्वक दर्ज किया गया, इसलिए एग्जिट स्टेटस कोड ($?) 0 के रूप में आउटपुट हुआ।

3. डिलीमीटर (IFS) और -a विकल्प का उपयोग करके मल्टीपल वेरिएबल्स और ऐरे विभाजन
अभ्यास जारी रखने के लिए, पहले बनाई गई ~/read-demo डायरेक्टरी में cd ~/read-demo कमांड चलाकर जाएं।

इंटरनल फ़ील्ड सेपरेटर (IFS) को कॉमा (,) के रूप में सेट करने के बाद, Here-String (<<<) द्वारा पास की गई CSV फॉर्मेट की स्ट्रिंग को read कमांड द्वारा पढ़कर col1, col2, और col3 वेरिएबल्स में अलग-अलग विभाजित करके स्टोर किया जाता है।
निष्पादन परिणाम में, स्ट्रिंग में शामिल सर्वर का नाम, IP पता और सर्विस का नाम निर्दिष्ट डिलीमीटर के अनुसार प्रत्येक वेरिएबल में सही ढंग से विभाजित होकर आउटपुट हुआ।

डिलीमीटर (IFS) को कोलन (:) के रूप में सेट करके और -a विकल्प का उपयोग करके /etc/passwd फॉर्मेट की स्ट्रिंग को user_info ऐरे वेरिएबल में विभाजित करके स्टोर किया जाता है।
ऐरे के 0वें इंडेक्स से अकाउंट का नाम (root) और 6वें इंडेक्स से लॉगिन शेल पाथ (/bin/bash) सफलतापूर्वक निकाला गया और प्रदर्शित हुआ।
![bash -c ‘IFS=":" read -ra user_info «< “root:x:0:0:root:/root:/bin/bash”; echo “계정명: ${user_info[0]}, 셸: ${user_info[6]}”’](/ubuntu/20261007_143401_98/captures/s03_c03_bash_-c__IFS_____read_-ra_user_info______root_x_0.png)
4. प्रैक्टिकल कोर: while लूप और read -r का उपयोग करके बड़ी फ़ाइलों को लाइन-दर-लाइन प्रोसेस करना
अभ्यास जारी रखने के लिए, पहले बनाई गई ~/read-demo डायरेक्टरी में cd ~/read-demo कमांड चलाकर जाएं।

फ़ाइल को लाइन-दर-लाइन प्रोसेस करने के अभ्यास के लिए, सर्वर नाम और संचालन स्थिति को कॉमा द्वारा अलग करने वाली एक नमूना CSV फ़ाइल servers.csv बनाएं।

while लूप और read -r कमांड का एक साथ उपयोग करते हुए, और इंटरनल फ़ील्ड सेपरेटर (IFS) को कॉमा (,) के रूप में सेट करके, servers.csv फ़ाइल की प्रत्येक पंक्ति को सुरक्षित रूप से एक-एक करके पढ़ा जाता है।
निष्पादन परिणाम में, फ़ाइल में दर्ज प्रत्येक सर्वर का नाम और स्थिति की जानकारी name और status वेरिएबल्स में सही ढंग से असाइन होकर निर्धारित फॉर्मेट के अनुसार आउटपुट हुई।
![while IFS="," read -r name status; do echo “[상태 점검] $name 서버는 현재 $status 상태입니다.”; done < servers.csv](/ubuntu/20261007_143401_98/captures/s04_c03_while_IFS_____read_-r_name_status__do_echo___%EC%83%81%ED%83%9C_%EC%A0%90%EA%B2%80.png)
अब तक, हमने लिनक्स शेल स्क्रिप्ट में उपयोग किए जा सकने वाले read कमांड के बुनियादी उपयोग से लेकर व्यावहारिक कार्यों में अक्सर उपयोग की जाने वाली फ़ाइल को लाइन-दर-लाइन पढ़ने की तकनीकों को संक्षेप में देखा है।
आज चर्चा किए गए विभिन्न विकल्पों और उदाहरणों के आधार पर, आशा है कि आप अपनी आवश्यकताओं के अनुरूप इंटरैक्टिव ऑटोमेशन स्क्रिप्ट खुद लिखने का प्रयास करेंगे।