Aide sur script shell convertir ip hexa

bir0ute -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
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. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    et comme ça

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

    192.168.0.1
    0
    1. bir0ute
       
      Nan :(

      bash-2.03$ IPHEXA="0xC0 0xA8 0x00 0x01"
      bash-2.03$ printf "%d.%d.%d.%d" $IPHEXA
      bash: printf: 0xC0: illegal number
      0
      1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659 > bir0ute
         
        que répond which printf
        0
      2. bir0ute > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        bash-2.03$ which printf
        /usr/bin/printf
        0
      3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659 > bir0ute
         
        essaye
        IPHEXA="0xC0 0xA8 0x00 0x01"
        /usr/bin/printf "%d.%d.%d.%d" $IPHEXA
        0
  2. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
     
    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. bir0ute
       
      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. bir0ute
     
    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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Salut,

      Enlève les quotes :
      eval "echo $((16#"$i"))"
      
      eval echo $((16#$i))
      ;-))
      0
      1. bir0ute > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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
      2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > bir0ute
         
        Que te renvoie les commandes suivantes :
        readlink -f /bin/sh
        ls -l /bin/sh
        0
      3. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Je ne vois que ça en effet :)
        -1
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,
    ~$ for i in C0 A8 00 01;do echo -e "$(echo "ibase=16;$i" | bc) \c";done;echo
    192 168 0 1

    0