किसी भी अन्य साधारण कमांड की तरह, [ ... ]
या test
इसके तर्कों के बीच रिक्त स्थान की आवश्यकता होती है।
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
fi
या
if test "$#" -ne 1; then
echo "Illegal number of parameters"
fi
सुझाव
बैश में होने पर, [[ ]]
इसके बजाय का उपयोग करना पसंद करें क्योंकि यह शब्द विभाजन और अपने वैरिएबल के लिए मार्गनिर्देशन का विस्तार नहीं करता है कि जब तक यह अभिव्यक्ति का हिस्सा नहीं होता तब तक उद्धृत करना आवश्यक नहीं हो सकता है।
[[ $# -ne 1 ]]
इसमें कुछ अन्य विशेषताएं भी हैं जैसे कि अनक्वॉटेड कंडीशन ग्रुपिंग, पैटर्न मैचिंग (विस्तारित पैटर्न से मेल खाते हुए extglob
) और रेगेक्स मिलान।
निम्न उदाहरण जाँचता है कि क्या तर्क मान्य हैं। यह एक या दो तर्क देता है।
[[ ($# -eq 1 || ($# -eq 2 && $2 == <glob pattern>)) && $1 =~ <regex pattern> ]]
शुद्ध गणित भाव के लिए, का उपयोग कर (( ))
कुछ करने के लिए अभी भी बेहतर हो सकता है, लेकिन वे अभी भी संभव हो रहे हैं [[ ]]
चाहते अपने अंकगणितीय ऑपरेटर के साथ -eq
, -ne
, -lt
, -le
, -gt
, या -ge
एक भी स्ट्रिंग तर्क के रूप में अभिव्यक्ति रखकर:
A=1
[[ 'A + 1' -eq 2 ]] && echo true ## Prints true.
यदि आपको इसे अन्य सुविधाओं के साथ संयोजित करने की आवश्यकता होगी तो यह सहायक होना चाहिए [[ ]]
।
स्क्रिप्ट से बाहर निकलना
जब अवैध पैरामीटर को पास कर दिया जाता है तो स्क्रिप्ट से बाहर निकलना भी तर्कसंगत है। यह पहले से ही इवांका द्वारा टिप्पणियों में सुझाया गया है, लेकिन किसी ने इस उत्तर को संपादित किया है ताकि इसे लौटाए गए मूल्य के साथ हो, इसलिए मैं इसे सही कर सकता हूं।-1
-1
हालांकि बैश द्वारा एक तर्क के रूप में स्वीकार किया जाना exit
स्पष्ट रूप से प्रलेखित नहीं है और एक सामान्य सुझाव के रूप में उपयोग किए जाने के लिए सही नहीं है। 64
इसके sysexits.h
साथ परिभाषित होने के बाद भी सबसे औपचारिक मूल्य है #define EX_USAGE 64 /* command line usage error */
। अधिकांश उपकरण जैसे अमान्य तर्कों पर ls
भी लौटते हैं 2
। मैं 2
अपनी स्क्रिप्ट में भी लौटता था, लेकिन हाल ही में मुझे वास्तव में परवाह नहीं थी, और बस 1
सभी त्रुटियों में उपयोग किया गया था। लेकिन चलो बस 2
यहाँ जगह है क्योंकि यह सबसे आम है और शायद ओएस-विशिष्ट नहीं है।
if [[ $# -ne 1 ]]; then
echo "Illegal number of parameters"
exit 2
fi
संदर्भ
test
। यह एक मानक यूनिक्स कमांड का नाम है, आप इसे छाया नहीं देना चाहेंगे।