2010-11-09 19 views
12

मैं पटकथा को झुकाव के लिए एक नया छात्र हूं, और मैं एक असाइनमेंट प्रश्न पर फंस गया हूं। मैं सोच रहा था कि क्या यह निर्धारित करने का एक आसान तरीका है कि उपयोगकर्ता का इनपुट पूर्णांक है या नहीं। अधिक विशेष रूप से, यदि किसी उपयोगकर्ता को पूर्णांक इनपुट करने के लिए कहा जाता है, तो क्या सत्यापित करने के लिए एक त्वरित जांच है?क्या यह निर्धारित करने का कोई आसान तरीका है कि उपयोगकर्ता इनपुट बैश में एक पूर्णांक है या नहीं?

उत्तर

8

यह द्वारा परीक्षण कर सकते हैं एक प्रकार का कड़वाहट है, यह किसी अन्य चीज़ के लिए -ईक का उपयोग कर रहा है, फिर इसका इरादा क्या था, लेकिन यह एक पूर्णांक की जांच करता है, अगर इसे कोई int नहीं मिलता है तो यह एक त्रुटि देता है जिसे आप/dev/null और टॉस कर सकते हैं झूठ का मूल्य

read input 
if [ $input -eq $input 2>/dev/null ] 
then 
    echo "$input is an integer" 
else 
    echo "$input is not an integer" 
fi 
+1

यह मानता है/dev/null मौजूद है – Xofo

+1

यह भी मानता है कि तर्क खाली नहीं है –

21

एक तरीका यह जांचना है कि इसमें गैर-संख्या वाले वर्ण हैं या नहीं। आप सभी अंकों के पात्रों को कुछ भी नहीं बदलते हैं और लंबाई की जांच करते हैं - यदि लंबाई है तो वहां गैर अंकों वाले वर्ण हैं।

if [[ -n ${input//[0-9]/} ]]; then 
    echo "Contains letters!" 
fi 

एक अन्य दृष्टिकोण यह जांचना है कि परिवर्तनीय संदर्भ में मूल्यांकन चरम स्वयं के बराबर है या नहीं। यह पार्टी विशेष के

if [[ $((foo)) != $foo ]]; then 
    echo "Not just a number!" 
fi 
+0

स्वच्छ और सुरुचिपूर्ण – Xofo

+0

मीठा और सरल उत्तर, धन्यवाद! – Felipe

+0

यदि इनपुट उदाहरण के लिए 5 बी है, तो यह चेक विफल हो जाएगा। –

3

मार पूछे जाने वाले प्रश्न entry #54

+0

वह अकसर किये गए सवाल का शीर्षक है "मैं कैसे बता सकता हूं कि चर में एक वैध संख्या है या नहीं?" - पहचानने के संभावित तरीकों का एक गुच्छा प्रदान करता है। –

1

मैं इस पोस्ट http://www.unix.com/shell-programming-scripting/21668-how-check-whether-string-number-not.html है कि इस बारे में बात करती पाया जाता है।

अपने इनपुट अगर वहाँ नंबर पर एक +/- की जाँच करने की जरूरत नहीं है, तो आप कर सकते हैं:

expr $num + 1 2> /dev/null 
if [ $? = 0 ] 
then 
    echo "Val was numeric" 
else 
    echo "Val was non-numeric" 
fi 
7

आप नियमित अभिव्यक्ति का उपयोग कर

if ! [[ "$yournumber" =~ ^[0-9]+$ ]] ; 
then exec >&2; echo "error: Not a number"; exit 1 
fi 
+0

यह सबसे शाब्दिक है, और इसलिए याद रखना सबसे आसान है। –

0

यह करने का एक और तरीका है। यह ज्यादातर मामलों में आवश्यकतानुसार थोड़ा अधिक विस्तृत है, लेकिन decimals भी संभाल लेंगे। मैंने गोलाकार संख्या प्राप्त करने के लिए नीचे दिया गया कोड लिखा था। यह प्रक्रिया में संख्यात्मक इनपुट के लिए भी जांच करता है।

#--- getRound -- Gives number rounded to nearest integer ----------------------- 
    # usage: getRound <inputNumber> 
    # 
    # echos the rounded number 
    # Best to use it like: 
    #  roundedNumber=`getRound $Number` 
    #  check the return value ($?) and then process further 
    # 
    # Return Value: 
    #  2 - if <inputNumber> is not passed, or if more arguments are passed 
    #  3 - if <inputNumber> is not a positive number 
    #  0 - if <inputNumber> is successfully rounded 
    # 
    # Limitation: Cannot be used for negative numbers 
    #------------------------------------------------------------------------------- 
    getRound(){ 
     if [ $# -ne 1 ] 
     then 
      exit 2 
     fi 

     #--- Check if input is a number 
     Input=$1 
     AB=`echo A${Input}B | tr -d [:digit:] | tr -d '.'` 
     if [ "${AB}" != "AB" ] #--- Allow only '.' and digit 
     then 
      exit 3 
     fi 
     DOTorNone=`echo ${Input} | tr -d [:digit:]` #--- Allow only one '.' 
     if [ "${DOTorNone}" != "" ] && [ "${DOTorNone}" != "." ] 
     then 
      exit 3 
     fi 

     echo $Input | awk '{print int($1+0.5)}' #--- Round to nearest integer 
    } 

    MyNumber=`getRound $1` 
    if [ $? -ne 0 ] 
    then 
     echo "Empty or invalid input passed" 
    else 
     echo "Rounded input: $MyNumber" 
    fi 
संबंधित मुद्दे

 संबंधित मुद्दे