एक बयान कैसे करें जो यह जांचता है कि क्या कुछ शेष के बिना किसी अन्य द्वारा विभाज्य है (BASH)


21
#!/bin/bash


Echo “Enter a number”

Read  $number

If [$number ] ; then 

Echo “Your number is divisible by 5”

Else

Echo “Your number is not divisible by 5”

fi

अगर [$ संख्या] कथन वह है जो मैं नहीं जानता कि कैसे स्थापित किया जाए


स्वागत है, रोजर। क्या आप कृपया कोड प्रश्न को कोड टैग में लपेट सकते हैं (या संपादक पर कोड बटन का उपयोग कर सकते हैं)? यह चीजों को पढ़ने में बहुत आसान बनाता है ।
— टेलीमेकस

जवाबों:


39

आप यहाँ दिखाए गए कुछ अन्य की तुलना में बैश में एक सरल वाक्यविन्यास का उपयोग कर सकते हैं:

#!/bin/bash
read -p "Enter a number " number    # read can output the prompt for you.
if (( $number % 5 == 0 ))           # no need for brackets
then
    echo "Your number is divisible by 5"
else
    echo "Your number is not divisible by 5"
fi

धन्यवाद! मुझे पता था कि एक सरल तरीका होना चाहिए, लेकिन कोई भी भाग्य नहीं था। बैश स्क्रिप्टिंग मेरे लिए हमेशा एक काली कला रही है।
— 10

यह त्रुटि संदेश के परिणामस्वरूप होगा, "((:: 08: मान भी आधार के लिए बहुत बड़ा है (त्रुटि टोकन" 08 "है)" और "(:: (09: 09) मान भी आधार के लिए बहुत अच्छा है (त्रुटि टोकन" 09 "है)" देखें ubuntuforums.org/showthread.php?t=677751 स्पष्टीकरण के लिए।
— रेड क्रिकेट

@RedCricket: यदि आप एक अग्रणी शून्य दर्ज करते हैं। यदि यह एक मुद्दा है, तो आप कर सकते हैं: बेस 10 के रूप में व्याख्या करने के if (( 10#$number % 5 == 0 ))लिए मजबूर $numberकरने के लिए (आधार 8 / ऑक्टल के बजाय प्रमुख शून्य द्वारा निहित)।
— अगली सूचना तक रोक दिया गया।

@ डेनिस विलियमसन हां जो अधिक सटीक है। धन्यवाद! :)
— लाल क्रिकेट

11

जब तक पूर्णांक गणित की आवश्यकता नहीं होती है, तब तक आपको कोई बीसी की आवश्यकता नहीं होती है (आपको फ़्लोटिंग पॉइंट के लिए बीसी की आवश्यकता होगी): बैश में, (()) ऑपरेटर एक्सआर की तरह काम करता है ।

जैसा कि अन्य ने बताया है कि आप जो ऑपरेशन चाहते हैं वह मोडुलो (%) है ।

#!/bin/bash  

echo "Enter a number"
read number

if [ $(( $number % 5 )) -eq 0 ] ; then
   echo "Your number is divisible by 5"
else
   echo "Your number is not divisible by 5"
fi

3

bcकमांड का उपयोग करने के बारे में कैसे :

!/usr/bin/bash

echo “Enter a number”
read number
echo “Enter divisor”
read divisor
remainder=`echo "${number}%${divisor}" | bc`
echo "Remainder: $remainder"

if [ "$remainder" == "0" ] ; then
        echo “Your number is divisible by $divisor”
else
        echo “Your number is not divisible by $divisor”
fi

1
वैकल्पिक रूप से, आप bc के बजाय expr का उपयोग कर सकते हैं: शेष =expr $number % $divisor
— Dan Dyer

@ हाँ, यह ओपी के लिए पर्याप्त होना चाहिए। हालांकि, मुझे लगता है कि bcगणना में माहिर होने के कारण, यह 33.3% 11.1 जैसे सामान को संभाल सकता है, जो exprकि संभवत: चोक हो जाएगा।
— नगुल

निश्चित रूप से घुट जाएगा; expr और (()) केवल पूर्णांक गणित को संभालते हैं।
— क्वैकोट क्विकोट

3

नागुल का जवाब बहुत अच्छा है, लेकिन सिर्फ फी, जो ऑपरेशन आप चाहते हैं वह मापांक (या मोडुलो) है और ऑपरेटर आमतौर पर है %।


1

मैंने इसे एक अलग तरीके से किया है। जांचें कि क्या यह आपके लिए काम करता है।
उदाहरण 1 :

num=11;
[ `echo $num/3*3 | bc` -eq $num ] && echo "is divisible" || echo "not divisible"
Output : not divisible

उदाहरण 2:

num=12;
[ `echo $num/3*3 | bc` -eq $num ] && echo "is divisible" || echo "not divisible"
Output : is divisible

सरल तर्क।

12/3 = 4
4 * 3 = 12 -> समान संख्या

11/3 = 3
3 * 3 = 9 -> समान संख्या नहीं


0

सिंटैक्स न्यूट्रलिटी के हित में और इन भागों के आसपास ओवर्ट इनफ़िक्स नोटेशन पूर्वाग्रह को संशोधित करने के लिए, मैंने उपयोग करने के लिए नगुल के समाधान को संशोधित किया है dc।

!/usr/bin/bash

echo “Enter a number”
read number
echo “Enter divisor”
read divisor
remainder=$(echo "${number} ${divisor}%p" | dc)
echo "Remainder: $remainder"

if [ "$remainder" == "0" ]
then
        echo “Your number is divisible by $divisor”
else
        echo “Your number is not divisible by $divisor”
fi

मुझे एहसास है कि यह वास्तव में एक पुराना सवाल है, लेकिन मेरे पास कोड के बारे में एक सवाल है। मैं बैश करने के लिए अपेक्षाकृत नया हूं और बस इस स्क्रिप्ट को चलाने की कोशिश की। हालांकि यह मुझे कुछ त्रुटियां देता है और मैं ईमानदारी से नहीं जानता कि क्यों। संख्या और विभाजक में प्रवेश करने के बाद मुझे प्राप्त होता है: test.sh: 7: test.sh: dc: not found Rainder: test.sh: 10: [: अनपेक्षित ऑपरेटर "आपका नंबर 2 से विभाज्य नहीं है" क्या आपको पता है क्यों ?
— अरेसस्टार्ट

1
@AreusAstarte: इसका मतलब है कि आपने dcइंस्टॉल नहीं किया है।
— अगली सूचना तक रोक दिया गया।

0

आप भी इस exprतरह का उपयोग कर सकते हैं :

#!/bin/sh

echo -n "Enter a number: "
read number
if [ `expr $number % 5` -eq 0 ]
then
    echo "Your number is divisible by 5"
else
    echo "Your number is not divisible by 5"
fi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.