Bienvenido Roger. ¿Puede incluir el código de su pregunta en etiquetas de código (o usar el botón de código en el editor)? Hace las cosas mucho más fáciles de leer.
Telémaco el
Respuestas:
39
Puede usar una sintaxis más simple en Bash que algunas de las otras que se muestran aquí:
#!/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
¡Gracias! Sabía que tenía que haber una manera más simple, pero no estaba teniendo suerte. las secuencias de comandos bash siempre han sido un poco un arte negro para mí.
quack quijote
Esto dará como resultado el mensaje de error, "((: 08: valor demasiado grande para la base (el token de error es" 08 ")" y "((: 09: valor demasiado grande para la base (el token de error es" 09 ")" ver ubuntuforums.org/showthread.php?t=677751 para explicación.
Red Cricket
@RedCricket: solo si ingresa un cero inicial. Si eso es un problema, puede hacer: if (( 10#$number % 5 == 0 ))forzar $numbera ser interpretado como base 10 (en lugar de base 8 / octal implícito por el cero inicial).
Pausado hasta nuevo aviso.
@Deniis Williamson Sí, eso es más preciso. ¡Gracias! :)
Red Cricket
11
No se necesita bc siempre que sea matemática entera (aunque necesitará bc para coma flotante): en bash, el operador (()) funciona como expr .
Como otros han señalado, la operación que desea es 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, puede usar expr en lugar de bc: resto =expr $number % $divisor
Dan Dyer
@ Dan Sí, debería ser suficiente para el OP. Sin embargo, creo que dado que se bcespecializa en cálculos, puede manejar cosas como 33.3% 11.1 que exprprobablemente se ahogarían.
nagul
definitivamente se ahogaría; expr y (()) solo manejan matemática entera.
quack quijote
3
La respuesta de Nagul es excelente, pero para su información, la operación que desea es el módulo (o módulo) y el operador generalmente %.
Solo en aras de la neutralidad de la sintaxis y la reparación del sesgo de notación infijo abierta alrededor de estas partes, he modificado la solución 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
Me doy cuenta de que esta es una pregunta muy antigua, pero tengo una pregunta sobre el código. Soy relativamente nuevo en bash e intenté ejecutar este script. Sin embargo, me da algunos errores y, sinceramente, no sé por qué. Después de ingresar el número y el divisor obtengo: test.sh: 7: test.sh: dc: no encontrado Restante: test.sh: 10: [: operador inesperado "Su número no es divisible por 2" ¿Tiene alguna idea de por qué ?
AreusAstarte
1
@AreusAstarte: significa que no tienes dcinstalado.
Pausado hasta nuevo aviso.
0
También puedes usar exprasí:
#!/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
Respuestas:
Puede usar una sintaxis más simple en Bash que algunas de las otras que se muestran aquí:
fuente
if (( 10#$number % 5 == 0 ))
forzar$number
a ser interpretado como base 10 (en lugar de base 8 / octal implícito por el cero inicial).No se necesita bc siempre que sea matemática entera (aunque necesitará bc para coma flotante): en bash, el operador (()) funciona como expr .
Como otros han señalado, la operación que desea es módulo (%) .
fuente
¿Qué hay de usar el
bc
comando:fuente
expr $number % $divisor
bc
especializa en cálculos, puede manejar cosas como 33.3% 11.1 queexpr
probablemente se ahogarían.La respuesta de Nagul es excelente, pero para su información, la operación que desea es el módulo (o módulo) y el operador generalmente
%
.fuente
Lo he hecho de otra manera. Comprueba si te funciona.
Ejemplo 1 :
Ejemplo 2
Lógica simple
12/3 = 4
4 * 3 = 12 -> mismo número
11/3 = 3
3 * 3 = 9 -> no es el mismo número
fuente
Solo en aras de la neutralidad de la sintaxis y la reparación del sesgo de notación infijo abierta alrededor de estas partes, he modificado la solución de nagul para usar
dc
.fuente
dc
instalado.También puedes usar
expr
así:fuente