Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/11/2007, 12h43   #1
Invité de passage
 
Inscription : novembre 2007
Messages : 1
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 1
Points : 0
Points : 0
Par défaut bash: Debordement de valeur avec variable dans 1 while

Bonjour,

J'ai une boucle while qui me crée des pb car lorsque je l'exécute avec le fichier à lire suivant;
08048000-080e5000
080e5000-080eb000
080eb000-08183000


Code :
1
2
3
4
5
6
7
8
9
10
#! /bin/bash -f
 
while SPR= read ADDRESS
do
    echo -e "start=`echo $ADDRESS | cut -f1 -d-` end=`echo $ADDRESS | cut -f2 -d-`"
    let start=10#`echo $ADDRESS | cut -f1 -d-`
    let end=10#`echo $ADDRESS | cut -f2 -d-`
    echo -e `printf "%d" 0x${start}`
    echo -e `printf "%d" 0x${end}`
done < proc/$PID/maps
J'obtiens les msg d'erreurs suivants
Code :
1
2
3
4
start=080e5000 end=080eb000
./essai_1.sh: line 71: let: start=10#080e5000: value too great for base (error token is "10#080e5000")
./essai_1.sh: line 72: let: end=10#080eb000: value too great for base (error token is "10#080eb000") 134512640
./essai_1.sh: line 74: printf: 0x: invalid number 0

Pouvez-vous me dire ce qui ne va pas.
Merci d'avance pour votre aide.
devloren
devloren est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2007, 12h14   #2
Membre émérite
 
Avatar de Celelibi
 
Inscription : janvier 2004
Messages : 990
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 990
Points : 822
Points : 822
Enlève le let.
let est utilisé pour mettre dans une variable le résultat d'une expression arithmétique. Les opérandes de cette expression peuvent être écrit dans n'importe quelle base.

Par exemple
Code :
1
2
let a=2#101010
echo $a
affichera 42.

De plus, les opérandes peuvent être écris en notation exponentielle.ça met dans la variable a la valeur 5*10^2 = 500.

Pour faire une affectation en bash, il n'y a pas de mot clé à mettre, c'est juste Ou alors ce que tu voulais c'est récupérer une valeur utilisable (donc en décimal) auquel cas c'est pas 10# mais 16# puisque tes adresses sont écrites en hexa.

Tu peux tout aussi bien enlever tes echo -e étant donné que printf va déjà de lui-même afficher les données sur la sortie standard.
__________________
Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.
Celelibi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h44.


 
 
 
 
Partenaires

Hébergement Web