Як зробити заяву, яка перевіряє, чи щось ділиться чимось іншим без залишку (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

оператор if [$ number] - це те, що я не знаю, як налаштувати


Ласкаво просимо, Роджер. Чи можете ви, будь ласка, загорнути код у своєму питанні в кодові теги (або скористатися кнопкою коду в редакторі)? Це робить речі набагато простішими для читання.
Телемах

Відповіді:


39

Ви можете використовувати простіший синтаксис у Bash, ніж деякі інші, показані тут:

#!/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

Спасибі! Я знав, що повинен бути простіший спосіб, але не мав жодної долі. сценарний сценарій завжди був для мене трохи чорним мистецтвом.
шарлатаний кіхот

Це призведе до повідомлення про помилку, "((: 08: значення занадто велике для базової (маркер помилки" 08 ")" та "((: 09: значення занадто велике для бази (маркер помилки" 09 ")" див. ubuntuforums.org/showthread.php?t=677751 для пояснення.
Red Cricket

@RedCricket: Тільки якщо ви введете провідний нуль. Якщо це проблема, ви можете зробити: if (( 10#$number % 5 == 0 ))змусити $numberінтерпретувати як базу 10 (замість основи 8 / восьмигранник мається на увазі провідний нуль).
Призупинено до подальшого повідомлення.

@ Деніс Вільямсон Так, точніше. Спасибі! :)
Червоний крикет

11

Жоден bc не потрібен, поки це ціла математика (вам знадобиться bc для плаваючої точки): В bash оператор (()) працює як expr .

Як зазначають інші, операція, яку потрібно, - це модуль (%) .

#!/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
Крім того, ви можете використовувати expr замість bc: remainder =expr $number % $divisor
Dan Dyer

@Dan Так, це повинно вистачити для проведення ОП. Однак, я думаю, оскільки bcспеціалізується на розрахунках, він може обробляти такі речі, як 33,3% 11,1, які expr, ймовірно, задушаться.
nagul

неодмінно задихнувся б; 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

Тільки в інтересах нейтралітету синтаксису та виправлення упереджених ухилів нотації інфікування навколо цих частин я змінив рішення nagul для використання 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

Я розумію, що це дуже старе питання, але у мене є питання про код. Я відносно новачок у bash і просто спробував запустити цей сценарій. Однак це дає мені кілька помилок, і я, чесно кажучи, не знаю, чому. Після введення числа та дільника я отримую: test.sh: 7: test.sh: dc: не знайдено Залишок: test.sh: 10: [: несподіваний оператор “Ваш номер не ділиться на 2” Чи маєте ви поняття, чому ?
AreusAstarte

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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.