Aide sur script shell convertir ip hexa

Fermé
bir0ute - 24 oct. 2008 à 09:30
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 24 oct. 2008 à 20:01
Bonjour à tous,

Je cherche a exécuter un script qui me permettre de traduire un ip hexadécimal en décimal.

Voici mon script :

#!/bin/sh

set -x

compteur=`expr 0`

IPHEXA="C0 A8 00 01"

for i in "$IPHEXA"
do
compteur=`expr $compteur + 1`
test."$compteur"=`echo $((16#$i))`
done

echo "$test.1"."$test.2"."$test.3"."$test.4"


Et voici ce que j'ai en retour :

+ expr 0 
compteur=0
IPHEXA=C0 A8 00 01
+ expr 0 + 1 
compteur=1
./script.ip.sh: syntax error at line 1: `(' unexpected


Merci de votre aide.

Sab.

4 réponses

dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
24 oct. 2008 à 09:50
hello
et comme ça

IPHEXA="0xC0 0xA8 0x00 0x01"
printf "%d.%d.%d.%d" $IPHEXA

192.168.0.1
0
Nan :(

bash-2.03$ IPHEXA="0xC0 0xA8 0x00 0x01"
bash-2.03$ printf "%d.%d.%d.%d" $IPHEXA
bash: printf: 0xC0: illegal number
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621 > bir0ute
24 oct. 2008 à 10:34
que répond which printf
0
bir0ute > dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024
24 oct. 2008 à 10:36
bash-2.03$ which printf
/usr/bin/printf
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621 > bir0ute
24 oct. 2008 à 12:49
essaye
IPHEXA="0xC0 0xA8 0x00 0x01"
/usr/bin/printf "%d.%d.%d.%d" $IPHEXA
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 426
24 oct. 2008 à 10:50
Salut,

Essayes avec ça:
#!/bin/sh

set -x

compteur=`expr 0`

IPHEXA="C0 A8 00 01"

for i in $IPHEXA; # pas de double quotes sinon, cela représente un seul élément.
do
compteur=`expr $compteur + 1`
# Une variable ne peut contenir un point dans son nom. donc '.' => '_'
eval test_$compteur=`echo $((16#$i))` # pour des nom de variable dynamique, utiliser eval <definition de variable>=<valeur>
done

echo "$test_1"."$test_2"."$test_3"."$test_4"


A plus :-)
0
Merci pour les corrections. J'ai une erreur :( :

+ expr 0
compteur=0
IPHEXA=C0 A8 00 01
+ expr 0 + 1
compteur=1
./script.ip.sh: syntax error at line 1: `(' unexpected
0
voici mes tests :

bash-2.03$ eval echo $((16#C0))
192
bash-2.03$ echo $((16#C0))
192



for i in $IPHEXA;
do
compteur=`expr $compteur + 1`
eval "echo $((16#"$i"))"
done


+ expr 0 
compteur=0
IPHEXA=C0 A8 00 01
+ expr 0 + 1 
compteur=1
+ eval echo $((16#C0)) 
./script.ip.sh: syntax error at line 1: `(' unexpected


Je ne comprends pas pourquoi ça fonctionne bien en ligne de commande mais pas dans mon script...
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
24 oct. 2008 à 12:12
Salut,

Enlève les quotes :
eval "echo $((16#"$i"))"

eval echo $((16#$i))
;-))
0
bir0ute > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
24 oct. 2008 à 16:06
Bah non toujours le meme probleme :

bash-2.03$ cat script.ip.sh 
#!/bin/sh

set -x

compteur=`expr 0`

IPHEXA="C0 A8 00 01"

for i in $IPHEXA;
do
compteur=`expr $compteur + 1`
eval echo $((16#$i))
done

echo "$test_1"."$test_2"."$test_3"."$test_4"
bash-2.03$ ./script.ip.sh 
+ expr 0 
compteur=0
IPHEXA=C0 A8 00 01
./script.ip.sh: syntax error at line 12: `(' unexpected
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > bir0ute
24 oct. 2008 à 17:59
Que te renvoie les commandes suivantes :
readlink -f /bin/sh
ls -l /bin/sh
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 426 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
24 oct. 2008 à 18:17
Je ne vois que ça en effet :)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
24 oct. 2008 à 20:01
Salut,
~$ for i in C0 A8 00 01;do echo -e "$(echo "ibase=16;$i" | bc) \c";done;echo
192 168 0 1

0