Aide sur script shell convertir ip hexa

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

  1. Contributeur
    hello
    et comme ça

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

    192.168.0.1
    0
    1. Nan :(

      bash-2.03$ IPHEXA="0xC0 0xA8 0x00 0x01"
      bash-2.03$ printf "%d.%d.%d.%d" $IPHEXA
      bash: printf: 0xC0: illegal number
      0
    2. Contributeur
      @bir0uteque répond which printf
      0
    3. @dubcekbash-2.03$ which printf
      /usr/bin/printf
      0
    4. Contributeur
      @bir0uteessaye
      IPHEXA="0xC0 0xA8 0x00 0x01"
      /usr/bin/printf "%d.%d.%d.%d" $IPHEXA
      0
  2. Webmaster
    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
    1. 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
  3. 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
    1. Modérateur
      Salut,

      Enlève les quotes :
      eval "echo $((16#"$i"))"
      
      eval echo $((16#$i))
      ;-))
      0
    2. @jipicyBah 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
    3. Modérateur
      @bir0uteQue te renvoie les commandes suivantes :
      readlink -f /bin/sh
      ls -l /bin/sh
      0
    4. Webmaster
      @jipicyJe ne vois que ça en effet :)
      -1
  4. Modérateur
    Salut,
    ~$ for i in C0 A8 00 01;do echo -e "$(echo "ibase=16;$i" | bc) \c";done;echo
    192 168 0 1

    0