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 bracketsthen
echo "Your number is divisible by 5"else
echo "Your number is not divisible by 5"fi
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
!/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
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 %.
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
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
Respostas:
Você pode usar uma sintaxe mais simples no Bash do que algumas das outras mostradas aqui:
fonte
if (( 10#$number % 5 == 0 ))
forçar$number
a ser interpretado como base 10 (em vez da base 8 / octal implicada pelo zero inicial).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 (%) .
fonte
Que tal usar o
bc
comando:fonte
expr $number % $divisor
bc
especialista em cálculos, ele pode lidar com coisas como 33,3% 11,1 queexpr
provavelmente seriam sufocadas.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
%
.fonte
Eu fiz isso de uma maneira diferente. Verifique se funciona para você.
Exemplo 1 :
Exemplo 2:
Lógica simples.
12/3 = 4
4 * 3 = 12 -> mesmo número
11/3 = 3
3 * 3 = 9 -> não é o mesmo número
fonte
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
.fonte
dc
instalado.Você também pode usar
expr
assim:fonte