Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format
PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | Prochaine révision Les deux révisions suivantes | ||
doc:programmation:shells:debuter-avec-les-scripts-shell-bash [30/05/2014 07:04] Hypathie [Les redirections dans les scripts] |
doc:programmation:shells:debuter-avec-les-scripts-shell-bash [30/05/2014 07:04] Hypathie [variable et calcul sur les entiers] |
||
---|---|---|---|
Ligne 594: | Ligne 594: | ||
- | |||
- | =====variable et calcul sur les entiers===== | ||
- | Nous allons voir différentes méthodes pour faire de calcul | ||
- | |||
- | ==== 1) valeur numérique avec déclare -i==== | ||
- | |||
- | <note important> | ||
- | Méthode non POSIX | ||
- | </note> | ||
- | |||
- | La valeur d'une variable peut une expression arithmétique, pour initialiser une variable de type entier on utilise l'option -i de la commande declare : declare -i nom[=expression] nom[=expression] ... | ||
- | |||
- | <code bash> | ||
- | #!/bin/bash | ||
- | declare -i x=35*2 | ||
- | echo $x | ||
- | </code> | ||
- | retour | ||
- | <code> | ||
- | 70 | ||
- | </code> | ||
- | |||
- | Pour que la valeur d'une variable ne soit pas accidentellement modifier, il faut ajouter l'attribut -r. | ||
- | |||
- | <code bash> | ||
- | #!/bin/bash | ||
- | declare -ir a=35*2 | ||
- | declare -ir b=5+5 | ||
- | echo $(($a+$b)) | ||
- | </code> | ||
- | retour | ||
- | <code> | ||
- | 80 | ||
- | </code> | ||
- | |||
- | ====2) valeur numérique avec let==== | ||
- | Cette commande permet elle aussi d'effectuer des calculs avec les variables. | ||
- | |||
- | <code bash> | ||
- | #!/bin/bash | ||
- | let "a = 10" | ||
- | let "b = 2" | ||
- | let "c = a+b" | ||
- | echo $c | ||
- | let "e = 10*2" | ||
- | echo $e | ||
- | let "f = 15" | ||
- | let "f *=2" | ||
- | echo $f | ||
- | </code> | ||
- | Retour | ||
- | <code> | ||
- | 12 | ||
- | 20 | ||
- | 30 | ||
- | </code> | ||
- | |||
- | ====3)convertir les nombre d'une base à l'autre==== | ||
- | À savoir : utiliser la commande bc | ||
- | *convertir de décimal au binaire : obase | ||
- | <code user> | ||
- | echo 'obase=2;50' | bc | ||
- | </code> | ||
- | =>110010 | ||
- | *convertir du binaire au décimal : ibase | ||
- | <code user> | ||
- | echo 'ibase=2;100110111101' | bc | ||
- | </code> | ||
- | =>2493 | ||
- | |||
- | *convertir de l'hexadécimal (2F) au binaire : ibase;obase | ||
- | <code user> | ||
- | echo 'ibase=16;obase=2;2F' | bc | ||
- | </code> | ||
- | =>101111 | ||
- | |||
- | |||
- | ====4) considérations avancées==== | ||
- | |||
- | Pré-requis : [[atelier:chantier:page-man-bash-iv-symboles-dans-les-calculs-mathematiques]] | ||
- | |||
- | Même lien pour la commande interne : | ||
- | <code> | ||
- | ((expression-arithmitique)) | ||
- | </code> | ||
- | |||
- | Avec cette commande interne,\\ | ||
- | outre les opérateurs arithmétiques de calculs basiques (+ - * / %)\\ | ||
- | bash intègre les opérateurs arithmétiques de décalages binaires à droite et à gauche : | ||
- | <code> | ||
- | >> et << | ||
- | </code> | ||
- | |||
- | et les opérateurs d'opérations binaires : | ||
- | * & : et | ||
- | * | : ou | ||
- | * ^ : ou exclusif | ||
- | * ~ : négation binaire | ||
- | |||
- | Les blancs (espace), ne sont pas obligatoires, mais ils améliorent la lisibilité du code !\\ | ||
- | |||
- | ===notion de constante numérique=== | ||
- | La constante numérique par défaut est de base 10 : ouffffff ;-) | ||
- | |||
- | Mais on peut la modifier, pour manipuler les données binaires ou octales !\\ | ||
- | |||
- | **La syntaxe est la suivante : nombre** | ||
- | * si "nombre" commence par 0, la constante est considérée comme octale (base 8); | ||
- | * si "nombre" commence par 0x, elle est considérée comme hexadécimale (base 16) | ||
- | |||
- | **Autre syntaxe: base#nombre** | ||
- | *où l'on remplace "base" par la base souhaitée, et le nombre est la valeur numérique à traiter. | ||
- | |||
- | Exemple de manipulation logique sur les décimaux : | ||
- | |||
- | <code bash> | ||
- | #!/bin/bash | ||
- | var1=10#10 #base 10 | ||
- | var2=10#5 | ||
- | |||
- | echo $(($var1 & $var2)) #10 et 5 | ||
- | echo $(($var1 | $var2)) #10 ou 5 = aucun =0 | ||
- | echo $(($var1 ^ $var2)) # | ||
- | #echo $(($var1 <<2)) | ||
- | echo $(($var1 >>2)) | ||
- | </code> | ||
- | Retour | ||
- | <code> | ||
- | 0 | ||
- | 15 | ||
- | 15 | ||
- | 2 | ||
- | </code> | ||
- | Exemple de manipulation logique sur les binaires : | ||
- | |||
- | <code> | ||
- | #!/bin/bash | ||
- | var1=2#00010110 #base 2 | ||
- | var2=2#0011001 | ||
- | |||
- | echo $(($var1 & $var2)) | ||
- | echo $(($var1 | $var2)) | ||
- | echo $(($var1 ^ $var2)) | ||
- | #echo $(($var1 <<2)) #88 | ||
- | echo $(($var1 >>2)) | ||
- | </code> | ||
- | Retour | ||
- | <code> | ||
- | 16 | ||
- | 31 | ||
- | 15 | ||
- | 5 | ||
- | </code> | ||