Pages : 1
#1 Le 24/02/2016, à 14:16
- Rob414
[RESOLU] Script shell sous linux
Bonjour,
je préviens, pour éviter les sourires en coin, je suis juste un bidouilleur et ne me qualifie en aucun cas de programmeur ou développeur.
Ceci dit, dans un script shell sous linux RedHat, méthode simple pour supprimer les zero inutiles devant un nombre, 0015--->15 j'ai besoin de faire une addition comme suit :
#!/bin/sh
echo "n'importe quoi ?"
read r
echo $(($r+0))
or le résultat est inattendu :
$ toto.sh
n'importe quoi ?
0015
13
autre curiosité :
$ toto.sh
n'importe quoi ?
009
./toto.sh: line 5: 009: valeur trop grande pour la base (error token is "009")
et ce à partir du chiffre 8
et jusque à 7 c'est OK :
$ toto.sh
n'importe quoi ?
007
7
à noter que ça fonctionne tres bien sous unix AIX
Quelqu'un à une idée ?
Dernière modification par Rob414 (Le 14/03/2016, à 14:35)
Hors ligne
#2 Le 24/02/2016, à 14:36
- Inglebard
Re : [RESOLU] Script shell sous linux
Salut,
Je suppose que le faite de mettre un '0' devant te fait passer en base 8:
(15)8 = (13)10
Alors je ne connais pas toute la doc mais je suppose que ça doit être marqué quelque part.
Hors ligne
#3 Le 24/02/2016, à 15:36
- pingouinux
Re : [RESOLU] Script shell sous linux
Bonjour,
Je confirme le diagnostic de Inglebard : si le nombre commence par 0, c'est de l'octal.
Voici une méthode pour virer les zéros qui précèdent un autre chiffre :
r=0015
r=$(sed -r 's/^0+([1-9])/\1/' <<<"$r")
echo $r
Résultat
15
Hors ligne
#4 Le 24/02/2016, à 17:23
- Watael
Re : [RESOLU] Script shell sous linux
oh, le marteau-pneumatique !
$ r=0015
$ r=${r##*0}
$ echo $r
15
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 24/02/2016, à 17:33
- pingouinux
Re : [RESOLU] Script shell sous linux
oh, le marteau-pneumatique !
Je n'ai pas trouvé plus simple, car
$ r=10015
$ r=${r##*0}
$ echo $r
15
Hors ligne
#6 Le 24/02/2016, à 17:39
- Inglebard
Re : [RESOLU] Script shell sous linux
Après il est possible de faire plus simple si tu peux utiliser bash :
10# permet de dire quel base tu veux utiliser
echo $((10#09*2))
18
Source : http://unix.stackexchange.com/questions … as-decimal
Hors ligne
#7 Le 24/02/2016, à 17:46
- pingouinux
Re : [RESOLU] Script shell sous linux
Merci Inglebard, je ne connaissais pas…
Hors ligne
#8 Le 24/02/2016, à 19:42
- HP
Hors ligne
#9 Le 25/02/2016, à 08:29
- credenhill
Re : [RESOLU] Script shell sous linux
hello
Watael a écrit :oh, le marteau-pneumatique !
Je n'ai pas trouvé plus simple, car
$ r=10015 $ r=${r##*0} $ echo $r 15
$ r=0015
$ echo ${r##+(0)}
15
$ r=10015
$ echo ${r##+(0)}
10015
Hors ligne
#10 Le 25/02/2016, à 08:55
- HP
Re : [RESOLU] Script shell sous linux
# bc <<< 0015
15
# bc <<< 10015
10015
cat /dev/urandom >/dev/null 2>&1 #github
Hors ligne
#11 Le 25/02/2016, à 09:04
- pingouinux
Re : [RESOLU] Script shell sous linux
Finalement, on n'a que l'embarras du choix… Merci
Hors ligne
#12 Le 25/02/2016, à 09:08
- Watael
Re : [RESOLU] Script shell sous linux
que ce soit sed ou bc, quand ça peut être fait par bash, seul, c'est toujours dispendieux.
j'aime bien la formule donnée par Credenhill, mais je préfère l'évaluation arithmétique fournie par Inglebard.
+1 chacun
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#13 Le 14/03/2016, à 14:34
- Rob414
Re : [RESOLU] Script shell sous linux
Bonjour à tous, et mille excuses pour le retard.
Merci pour vos réponses, j'ai utilisé bc :
$ var=0015
$ echo "$var+0" |bc
15
J'étais loin de penser à l'octal !.
A la prochaine fois.
Hors ligne