Como fazer uma declaração que verifique se algo é divisível por algo sem resto (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

a instrução if [$ number] é o que eu não sei como configurar

John T
fonte
Bem-vindo, Roger. Você pode colocar o código da sua pergunta em tags de código (ou usar o botão de código no editor)? Isso torna as coisas muito mais fáceis de ler.
Telemachus

Respostas:

39

Você pode usar uma sintaxe mais simples no Bash do que algumas das outras mostradas aqui:

#!/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
Pausado até novo aviso.
fonte
obrigado! eu sabia que tinha que haver uma maneira mais simples, mas não estava tendo sorte. scripts bash sempre foram um pouco de arte negra para mim.
quack quixote
Isso resultará na mensagem de erro "((: 08: valor muito alto para a base (o token de erro é" 08 ")" e "((: 09: valor muito grande para a base (o token de erro é" 09 ")", consulte ubuntuforums.org/showthread.php?t=677751 para mais informações #
Red Cricket
@RedCricket: Somente se você digitar um zero inicial. Se isso é um problema, você pode fazer: if (( 10#$number % 5 == 0 ))forçar $numbera ser interpretado como base 10 (em vez da base 8 / octal implicada pelo zero inicial).
Pausado até novo aviso.
@ Deniis Williamson Sim, isso é mais preciso. Obrigado! :)
Red Cricket
11

Não é necessário bc , contanto que seja matemática inteira (você precisará de bc para ponto flutuante): No bash, o operador (()) funciona como expr .

Como outros já apontaram, a operação que você deseja é módulo (%) .

#!/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
charlatão quixote
fonte
3

Que tal usar o bccomando:

!/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
Nagul
fonte
11
Alternativamente, você poderia usar expr em vez de bc: restante =expr $number % $divisor
Dan Dyer
@ Dan Sim, deve ser suficiente para o OP. No entanto, acho que, uma vez que é bcespecialista em cálculos, ele pode lidar com coisas como 33,3% 11,1 que exprprovavelmente seriam sufocadas.
Nagul
definitivamente sufocaria; expr e (()) lidam apenas com números inteiros.
quack quixote
3

A resposta de Nagul é ótima, mas apenas para sua informação, a operação que você deseja é módulo (ou módulo) e, geralmente, o operador %.

Telêmaco
fonte
1

Eu fiz isso de uma maneira diferente. Verifique se funciona para você.
Exemplo 1 :

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

Exemplo 2:

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

Lógica simples.

12/3 = 4
4 * 3 = 12 -> mesmo número

11/3 = 3
3 * 3 = 9 -> não é o mesmo número

smilyface
fonte
0

Apenas no interesse da neutralidade da sintaxe e da correção do viés de notação de infixo evidente em torno dessas partes, modifiquei a solução de nagul para usar 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
Eroen
fonte
Percebo que essa é uma pergunta muito antiga, mas tenho uma pergunta sobre o código. Eu sou relativamente novo no bash e apenas tentei executar esse script. No entanto, isso me dá alguns erros e sinceramente não sei por quê. Depois de inserir o número e o divisor, recebo: test.sh: 7: test.sh: dc: não encontrado Restante: test.sh: 10: [: operador inesperado “Seu número não é divisível por 2” Você tem alguma idéia de por que ?
AreusAstarte
11
@AreusAstarte: Significa que você não tem dcinstalado.
Pausado até novo aviso.
0

Você também pode usar exprassim:

#!/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
Grilo vermelho
fonte