Un script shell interprète un nombre comme décimal (base 10), sauf si ce nombre a un certain préfixe ou une notation. Un nombre précédé par un 0 est octal (base 8). Un nombre précédé par 0x est hexadécimal (base 16). Un nombre comprenant un # est évalué comme BASE#NOMBRE (avec les restrictions sur l'étendue et la notation).
Exemple 8-4. Représentation des constantes numériques
#!/bin/bash # numbers.sh: Représentation des nombre en différentes bases. # Décimal: par défaut let "dec = 32" echo "nombre décimal = $dec" # 32 # Rien qui ne sort de l'ordinaire ici. # Octal: nombres précédés par '0' (zero) let "oct = 032" echo "nombre octal = $oct" # 26 # Exprime le résultat en décimal. # ------- -- -------- -- ------- # Héxadecimal: nombres précédés par '0x' ou '0X' let "hex = 0x32" echo "nombre héxadécimal = $hex" # 50 # Exprime le résultat en décimal. # Autres bases: BASE#NOMBRE # BASE entre 2 et 64. # NUMBER doit utiliser les symboles compris dans BASE, voir ci-dessous. let "bin = 2#111100111001101" echo "nombre binaire = $bin" # 31181 let "b32 = 32#77" echo "nombre en base-32 = $b32" # 231 let "b64 = 64#@_" echo "nombre en base-64 = $b64" # 4094 # # Cette notation fonctionne seulement pour un ensemble limité (2 - 64) # 10 chiffres + 26 caractères minuscules + 26 caractères majuscules + @ + _ echo echo $((36#zz)) $((2#10101010)) $((16#AF16)) $((53#1aA)) # 1295 170 44822 3375 # Note importante: # ---------------- # Utiliser un chiffre en dehors de l'échelle de la notation spécifiée #+ donnera un message d'erreur. let "bad_oct = 081" # numbers.sh: let: oct = 081: value too great for base (error token is "081") # Octal numbers use only digits in the range 0 - 7. exit 0 # Merci, Rich Bartell et Stephane Chazelas, pour cette clarification. |
Précédent | Sommaire | Suivant |
Opérateurs | Niveau supérieur | Après les bases |