मैं यह जांचने के लिए बैश फ़ंक्शन लिखने की कोशिश कर रहा हूं कि क्या एक चर एक पूर्णांक है। नीचे स्क्रिप्ट में is_number फ़ंक्शन यह चेक करता है।
जब मैं इसे चलाता हूं (1234 के परीक्षण मूल्य के साथ) तो मुझे निम्न त्रुटि संदेश मिलता है:
./test_n2.sh: line 13: [: Checking 1234
1234: integer expression expected
n is not an integrer
मैं उलझन में हूँ: फ़ंक्शन $ लौटाता है?, जो मेरे एक लाइनर परीक्षणों में grep के साथ अभिन्न मूल्यों के लिए सही ढंग से 0 पर सेट है। मुख्य ब्लॉक में पूर्णांक तुलना ["$ रिटेल" -eq 0] के रूप में की जाती है, जो AFAIK पूर्णांक के परीक्षण के लिए सही रूप है।
क्या कोई मदद कर सकता है?
TIA।
#!/usr/bin/env bash
function is_number {
number=$1
echo "Checking $number"
echo $number | /bin/egrep "^[0-9]+$"
return $?
}
n=1234
retval=`is_number $n`
if [ "$retval" -eq 0 ]; then
echo n is an integer
exit 0
fi
echo n is not an integrer
exit 1
उत्तर:
जवाब के लिए 2 № 1जब आप backticks का उपयोग कर एक चर असाइन करते हैं या $(...)
, यह कमांड का मानक आउटपुट प्राप्त करता है। एक कमांड का रिटर्न वैल्यू वेरिएबल में डाला जाता है $?
। तो आपको करना चाहिए:
is_number $n
retval=$?
या आप बस लिख सकते हैं:
if is_number $n; then
echo n is an integer
exit 0
fi
जवाब के लिए 0 № 2
आपको जरूरत नहीं है grep
इस सब के लिए, अपने दम पर खुशी से काम करेंगे, और अधिक कुशलता से:
is_number() {
# Check if $1 only consists of digits
[[ $1 = +([[:digit:]]) ]]
}
तो आप इसे इस प्रकार उपयोग कर सकते हैं:
if is_number 123; then
echo "it"s a number!"
else
echo "it"s not a number!"
fi
निम्नलिखित कैविएट के साथ इसका उपयोग करें: यदि आपको अंकगणित करने की आवश्यकता है, तो अवगत रहें कि अग्रणी शून्य "स्ट्रिंग को रेडिक्स में संख्या के रूप में व्याख्या करने के लिए बाध्य करेगा। इसलिए निम्न त्रुटि है:
a=09
if is_number "$a"; then
echo $((a+1));
else
echo "Not a number"
fi
आपका स्निपेट इसलिए बेहतर लिखा जाता है:
#!/usr/bin/env bash
shopt -s extglob
is_number() {
# Check if $1 only consists of digits
[[ $1 = +([[:digit:]]) ]]
}
n=1234
if is_number "$n"; then
echo "n is an integer"
exit 0
else
echo "n is not an integer"
exit 1
fi
या यदि आपको फ़ंक्शन का रिटर्न मान बचाने की आवश्यकता है is_number
:
#!/usr/bin/env bash
shopt -s extglob
is_number() {
# Check if $1 only consists of digits
[[ $1 = +([[:digit:]]) ]]
}
n=1234
is_number "$n"
ret=$?
if ((ret==0)); then
echo "n is an integer"
else
echo "n is not an integer"
fi
exit "$ret"