मैं कुछ सामान्य करने की कोशिश कर रहा हूं: शेल स्क्रिप्ट में उपयोगकर्ता इनपुट। यदि उपयोगकर्ता ने एक वैध पूर्णांक प्रदान किया है, तो स्क्रिप्ट एक काम करता है, और यदि मान्य नहीं है, तो यह कुछ और करता है। मुसीबत यह है, मुझे ऐसा करने का एक आसान (और उचित रूप से सुरुचिपूर्ण) तरीका नहीं मिला है - मैं नहीं चाहता कि मैं इसे चार-चार करके अलग करूं।
मुझे पता है कि यह आसान होना चाहिए लेकिन मुझे नहीं पता कि कैसे। मैं इसे एक दर्जन भाषाओं में कर सकता था, लेकिन BASH नहीं!
अपने शोध में मैंने यह पाया:
यह जांचने के लिए नियमित अभिव्यक्ति है कि क्या एक स्ट्रिंग में आधार 10 में एक वैध वास्तविक संख्या है
और इसमें एक उत्तर है कि रेगेक्स के बारे में बात करता है, लेकिन अभी तक मुझे पता है, कि सी (दूसरों के बीच) में उपलब्ध एक फ़ंक्शन है। फिर भी, यह एक महान जवाब की तरह लग रहा था तो मैंने इसे grep के साथ आज़माया, लेकिन grep को यह नहीं पता था कि इसके साथ क्या करना है। मैंने कोशिश की- जो मेरे बॉक्स पर है, इसका मतलब है कि इसे एक perL regexp - nada के रूप में माना जाए। डैश E (-E) ने भी काम नहीं किया। और न ही-एफ।
बस स्पष्ट होने के लिए, मैं कुछ इस तरह की कोशिश कर रहा हूं, किसी भी आउटपुट की तलाश कर रहा हूं - वहां से, मुझे जो भी मिलेगा उसका लाभ उठाने के लिए स्क्रिप्ट को हैक करूंगा। (आईओडब्ल्यू, मैं उम्मीद कर रहा था कि एक गैर-अनुरूप इनपुट कुछ भी नहीं देता है जबकि एक वैध रेखा दोहराई जाती है।)
snafu=$(echo "$2" | grep -E "/^[-+]?(?:\.[0-9]+|(?:0|[1-9][0-9]*)(?:\.[0-9]*)?)$/")
if [ -z "$snafu" ] ;
then
echo "Not an integer - nothing back from the grep"
else
echo "Integer."
fi
क्या कोई यह वर्णन करेगा कि यह सबसे आसानी से कैसे किया जाता है?
सच कहूँ तो, यह मेरी राय में, टेस्ट का एक छोटा-सा दौरा है। इस तरह का झंडा होना चाहिए
if [ -I "string" ] ;
then
echo "String is a valid integer."
else
echo "String is not a valid integer."
fi
[पुराना संगत हैtest;[[बैश की नई चीज है, जिसमें अधिक परिचालन और अलग-अलग उद्धरण नियम हैं। यदि आप पहले से ही बैश के साथ रहने का फैसला कर चुके हैं, तो इसके लिए जाएं[[(यह वास्तव में बहुत अच्छा है); यदि आपको अन्य गोले के लिए पोर्टेबिलिटी की आवश्यकता है, तो[[पूरी तरह से बचें ।