Je veux faire quelque chose comme ça:
if [ $1 % 4 == 0 ]; then
...
Mais cela ne fonctionne pas.
Que dois-je faire à la place?
read n
if ! ((n % 4)); then
echo "$n divisible by 4."
fi
L'opérateur (( ))
Évalue les expressions en arithmétique C et a un retour booléen.
Par conséquent, (( 0 ))
Est faux et (( 1 ))
Est vrai. [1]
L'opérateur $(( ))
développe également les expressions arithmétiques C, mais au lieu de renvoyer true/false, il renvoie la valeur à la place. Pour cette raison, vous pouvez tester la sortie si $(( ))
de cette façon: [2]
[[ $(( n % 4 )) == 0 ]]
Mais cela équivaut à: if (function() == false)
. Ainsi, le test le plus simple et le plus idiomatique est:
! (( n % 4 ))
[1]: Bash moderne gère les nombres jusqu'à la taille intmax_t
De votre machine.
[2]: Notez que vous pouvez déposer $
À l'intérieur de (( ))
, Car il déréférence les variables à l'intérieur.
crochets simples ([..]
) ne fonctionne pas pour certains tests, essayez avec des crochets doubles ([[...]]
) et enfermez le mod dans ((..))
pour évaluer le %
opérateur correctement:
if [[ $(( $1 % 4 )) == 0 ]]; then
Plus de détails ici:
http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_02.html
a=4
if [ $(( $a % 4 )) -eq 0 ]; then
echo "I'm here"
fi
Cela pourrait fonctionner pour vous:
((a%4==0)) && echo "$a is divisible by 4" || echo "$a is not divisible by 4"
ou plus succinctement:
((a%4)) && echo "$a is not divisible by 4" || echo "$a is divisible by 4"