Bienvenue, Roger. Pouvez-vous envelopper le code dans votre question dans des balises de code (ou utiliser le bouton de code sur l'éditeur)? Cela rend les choses beaucoup plus faciles à lire.
Télémaque
Réponses:
39
Vous pouvez utiliser une syntaxe plus simple dans Bash que certaines des autres illustrées ici:
#!/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
Merci! je savais qu'il devait y avoir un moyen plus simple mais je n'ai pas eu de chance. Les scripts bash ont toujours été un peu un art noir pour moi.
Quack Quichotte
Cela entraînera le message d'erreur "((: 08: valeur trop grande pour la base (le jeton d'erreur est" 08 ")" et "((: 09: valeur trop grande pour la base (le jeton d'erreur est" 09 ")" voir ubuntuforums.org/showthread.php?t=677751 pour explication
Red Cricket
@RedCricket: Uniquement si vous entrez un zéro non significatif. Si c'est un problème, vous pouvez faire: if (( 10#$number % 5 == 0 ))pour forcer $numberà être interprété comme base 10 (au lieu de base 8 / octal impliqué par le zéro de tête).
pause jusqu'à nouvel ordre.
@Deniis Williamson Oui, c'est plus précis. Merci! :)
Red Cricket
11
Aucun bc n'est nécessaire tant qu'il s'agit de mathématiques entières (vous aurez cependant besoin de bc pour la virgule flottante): En bash, l' opérateur (()) fonctionne comme expr .
Comme d'autres l'ont souligné, l'opération que vous souhaitez est modulo (%) .
#!/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
Alternativement, vous pouvez utiliser expr au lieu de bc: reste =expr $number % $divisor
Dan Dyer
@Dan Oui, cela devrait suffire pour l'OP. Cependant, je pense qu'étant bcspécialisé dans les calculs, il peut gérer des choses comme 33,3% 11,1 qui exprs'étoufferaient probablement.
nagul
serait certainement étouffer; expr et (()) ne gèrent que les mathématiques entières.
Quack Quichotte
3
La réponse de Nagul est excellente, mais juste pour info, l'opération que vous voulez est le module (ou modulo) et l'opérateur est généralement %.
Dans l'intérêt de la neutralité syntaxique et de la correction du biais de notation infixe manifeste autour de ces parties, j'ai modifié la solution de nagul à utiliser 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
Je me rends compte que c'est une très vieille question mais j'ai une question sur le code. Je suis relativement nouveau à bash et j'ai juste essayé d'exécuter ce script. Cependant, cela me donne quelques erreurs et je ne sais vraiment pas pourquoi. Après avoir entré le nombre et le diviseur, j'obtiens: test.sh: 7: test.sh: dc: non trouvé Reste: test.sh: 10: [: opérateur inattendu "Votre nombre n'est pas divisible par 2" Avez-vous une idée pourquoi ?
AreusAstarte
1
@AreusAstarte: Cela signifie que vous n'avez pas dcinstallé.
pause jusqu'à nouvel ordre.
0
Vous pouvez également utiliser exprcomme ceci:
#!/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
Réponses:
Vous pouvez utiliser une syntaxe plus simple dans Bash que certaines des autres illustrées ici:
la source
if (( 10#$number % 5 == 0 ))
pour forcer$number
à être interprété comme base 10 (au lieu de base 8 / octal impliqué par le zéro de tête).Aucun bc n'est nécessaire tant qu'il s'agit de mathématiques entières (vous aurez cependant besoin de bc pour la virgule flottante): En bash, l' opérateur (()) fonctionne comme expr .
Comme d'autres l'ont souligné, l'opération que vous souhaitez est modulo (%) .
la source
Que diriez-vous d'utiliser la
bc
commande:la source
expr $number % $divisor
bc
spécialisé dans les calculs, il peut gérer des choses comme 33,3% 11,1 quiexpr
s'étoufferaient probablement.La réponse de Nagul est excellente, mais juste pour info, l'opération que vous voulez est le module (ou modulo) et l'opérateur est généralement
%
.la source
Je l'ai fait d'une manière différente. Vérifiez si cela fonctionne pour vous.
Exemple 1 :
Exemple 2:
Logique simple.
12/3 = 4
4 * 3 = 12 -> même nombre
11/3 = 3
3 * 3 = 9 -> pas le même nombre
la source
Dans l'intérêt de la neutralité syntaxique et de la correction du biais de notation infixe manifeste autour de ces parties, j'ai modifié la solution de nagul à utiliser
dc
.la source
dc
installé.Vous pouvez également utiliser
expr
comme ceci:la source