क्या Linux में '[' वास्तव में एक कमांड है

अवलोकन

Ubuntu टर्मिनल में काम करते समय हम अक्सर चौकोर ब्रैकेट [ को केवल Bash सिंटैक्स या शेल की आंतरिक संरचना का हिस्सा मान लेते हैं। लेकिन पर्दे के पीछे की सच्चाई यह है कि यह अपने आप में एक स्वतंत्र और पूर्णतः कार्यात्मक निष्पादन योग्य (executable) कमांड है। इस गाइड में, हम यह गहराई से समझेंगे कि [ कमांड सिस्टम पर वास्तव में कैसे पहचानी जाती है, इसकी निष्पादन प्रणाली क्या है, और इसके मूल्यांकन परिणाम यानी एग्जिट स्टेटस कोड ($?) का विश्लेषण करके मजबूत स्क्रिप्ट्स कैसे लिखी जा सकती हैं।

1. ‘[’ कमांड की आंतरिक बनावट और सिस्टम पाथ की पड़ताल

यह सत्यापित करने के लिए कि क्या ऑपरेटिंग सिस्टम के भीतर सचमुच इस नाम की कोई बाइनरी फाइल दर्ज है, हम which [ चलाकर इसकी डायरेक्टरी लोकेशन की जांच करते हैं।
कमांड निष्पादित होने पर आउटपुट में /usr/bin/[ पाथ प्राप्त होता है, जिससे यह तकनीकी तथ्य स्पष्ट हो जाता है कि यह केवल शेल पार्सर का संकेत नहीं बल्कि डिस्क पर मौजूद एक स्टैंडअलोन बाइनरी है।
⚙️ [महत्वपूर्ण परीक्षण ऑप्शन्स]

-f : यह जांचता है कि लक्षित पाथ एक सामान्य रेगुलर फाइल (regular file) है या नहीं।
-d : दिए गए पाथ के डायरेक्टरी होने की पुष्टि करता है।
-e : सिस्टम पर फाइल अथवा डायरेक्टरी की वास्तविक मौजूदगी की जांच करता है।
-z : यदि स्ट्रिंग पूरी तरह खाली (लंबाई 0) हो, तो सत्य लौटता है।
-n : पुष्टि करता है कि स्ट्रिंग खाली नहीं है (अर्थात उसमें डेटा मौजूद है)।
= : दो स्ट्रिंग्स के मानों में पूर्ण समानता की तुलना करता है।
-eq : दो पूर्णांकों (integers) का संख्यात्मक मान बराबर होने पर सत्य देता है।
-ne : दो पूर्णांक संख्याओं के मान भिन्न होने की स्थिति की जांच करता है।

which कमांड द्वारा बाइनरी पाथ की पुष्टि

शेल एनवायरनमेंट इस कैरेक्टर को कैसे इंटरप्रेट करता है और प्राथमिक रूप से कहाँ ढूंढता है, इसका पूरा क्रम देखने के लिए type -a [ रन करें।
परिणाम दर्शाता है कि परफॉरमेंस ऑप्टिमाइज़ेशन के लिए यह मुख्य रूप से एक शेल बिल्ट-इन (shell builtin) के रूप में मेमोरी में मौजूद है, लेकिन साथ ही फॉलबैक के रूप में फाइलसिस्टम पर /usr/bin/[ एवं /bin/[ दोनों जगह इसकी भौतिक बाइनरी भी स्थापित है।

type -a कमांड से शेल इंटरप्रिटेशन का विश्लेषण

डिस्क पर स्थित इस वास्तविक निष्पादन योग्य फाइल के परमिशन्स और मेटाडेटा की पड़ताल ls -l /usr/bin/[ द्वारा की जा सकती है।
आउटपुट में निष्पादन अधिकार (-rwxr-xr-x) साफ दिखाई देते हैं, जो सिद्ध करते हैं कि इसे किसी भी सामान्य Linux यूटिलिटी की भांति निष्पादित किया जा सकता है।

ls -l द्वारा बाइनरी फाइल अनुमतियों का निरीक्षण

2. बुनियादी मूल्यांकन और एग्जिट स्टेटस ($?) की तकनीकी समझ

संख्यात्मक तुलना का परीक्षण करने के लिए [ 10 -gt 5 ] चलाएं, जो यह परखता है कि क्या पहली संख्या दूसरी से बड़ी (-gt, greater than) है।
यह टूल स्क्रीन पर कोई टेक्स्ट आउटपुट जनरेट नहीं करता; बल्कि यह अपनी प्रक्रिया पूरी करके केवल एक आंतरिक स्थिति कोड (Exit Code) लौटाता है।

संख्यात्मक तुलना निष्पादन

पिछली प्रक्रिया की सफलता या विफलता का स्टेटस जानने के लिए echo $? कमांड चलाकर विशेष शेल वेरिएबल की जांच करें।
टर्मिनल पर 0 प्रदर्शित होता है, जिसका UNIX मानक के अनुसार अर्थ है कि दी गई शर्त पूरी तरह ‘सत्य (True)’ थी और प्रक्रिया सफलतापूर्वक संपन्न हुई।

एग्जिट कोड 0 की जांच

इसके विपरीत परिदृश्य को देखने के लिए [ 10 -lt 5 ] चलाएं, जिससे यह जाँचा जा सके कि क्या 10 वास्तव में 5 से छोटा (-lt, less than) है।
अपेक्षित रूप से यहाँ भी कंसोल पर कोई प्रत्यक्ष संदेश नहीं आएगा, क्योंकि परिणाम शेल रिटर्न कोड के रूप में दर्ज हो चुका है।

असत्य शर्त का परीक्षण

पुनः echo $? निष्पादित करके स्थिति कोड को स्क्रीन पर प्रिंट करें।
इस बार शून्य के अतिरिक्त मान (आमतौर पर 1) प्राप्त होता है, जो स्पष्ट रूप से दर्शाता है कि लॉजिकल कंडीशन विफल यानी ‘असत्य (False)’ रही।

विफलता स्टेटस कोड का आउटपुट

3. फाइलसिस्टम घटकों की स्थिति जांचना (-f, -d, -s)

व्यावहारिक परीक्षण हेतु एक समर्पित कार्यक्षेत्र और रिक्त फाइल तैयार करने के लिए mkdir -p /tmp/bracket_test && touch /tmp/bracket_test/sample.txt कमांड रन करें।

परीक्षण डायरेक्टरी और फाइल का निर्माण

निर्दिष्ट पाथ पर एक वैध रेगुलर फाइल की उपस्थिति परखने हेतु [ -f /tmp/bracket_test/sample.txt ] && echo "파일이 정상적으로 존재합니다" निष्पादित करें।
चूंकि फाइल मौजूद है, इसलिए शेल का तार्किक ऑपरेटर && सक्रिय हो जाता है और उसके बाद दिया गया संदेश टर्मिनल पर प्रिंट होता है।

नियमित फाइल सत्यापन

यह पुष्टि करने के लिए कि लक्षित पथ वास्तव में एक फ़ोल्डर है, [ -d /tmp/bracket_test ] && echo "디렉터리가 맞습니다" कमांड का उपयोग करें।
डायरेक्टरी की पुष्टि होने पर कंडीशन सत्य रिटर्न करती है और निर्धारित पुष्टि संदेश कंसोल पर दिखाई देता है।

डायरेक्टरी संरचना की पुष्टि

फाइल के आकार की जांच के लिए [ -s /tmp/bracket_test/sample.txt ] || echo "파일 크기가 0(비어있음)입니다" चलाएं, जो यह देखता है कि क्या फाइल में कुछ बाइट्स डेटा मौजूद है।
चूंकि हमने touch से शून्य आकार की फाइल बनाई थी, यह जांच विफल (False) हो जाती है और || ऑपरेटर के कारण फॉलबैक संदेश निष्पादित होता है।

शून्य बाइट फाइल आकार का परीक्षण

4. प्रोडक्शन स्क्रिप्टिंग में कंडीशनल स्टेटमेंट्स (if) और शॉर्ट-सर्किट लॉजिक

सामग्री-आधारित ब्रांचिंग का वास्तविक परीक्षण करने हेतु echo "Ubuntu Shell Test" > /tmp/bracket_test/sample.txt चलाकर फाइल में कुछ स्ट्रिंग डेटा लिखें।

फाइल में स्ट्रिंग डेटा जोड़ना

स्वचालित स्क्रिप्ट्स के वास्तविक प्रवाह का अनुकरण करने के लिए if [ -s /tmp/bracket_test/sample.txt ]; then echo "내용 확인: $(cat /tmp/bracket_test/sample.txt)"; fi चलाएं, जहाँ [ सीधे if ब्लॉक के साथ मिलकर निर्णय लेता है।
फाइल में डेटा होने के कारण -s टेस्ट सफल होता है, और शेल then ब्लॉक के अंदर जाकर फाइल की सामग्री को सफलतापूर्वक प्रदर्शित करता है।

कंडीशनल if ब्लॉक के साथ एकीकरण

लैब समाप्त होने के बाद सिस्टम स्वच्छता बनाए रखने के लिए rm -rf /tmp/bracket_test चलाकर सभी अस्थायी परीक्षण संसाधनों को हटा दें।

अस्थायी फ़ोल्डर की सफाई

इस ट्यूटोरियल के माध्यम से हमने समझा कि Linux में [ मात्र सिंटैक्टिक शुगर नहीं बल्कि एक सशक्त मूल्यांकन टूल है जो एग्जिट स्टेटस के आधार पर काम करता है। इस मूलभूत व्यवस्था को समझकर आप अधिक सुदृढ़, त्रुटिहीन और पेशेवर Bash ऑटोमेशन स्क्रिप्ट्स तैयार कर सकते हैं।