Erreur lors de tests if

Erreur lors de tests if - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 10-08-2008 à 21:19:18    

Code :
  1. #!/bin/sh
  2. getip() {
  3. ipinfo=`curl http://ipinfo/ip.php`
  4. ip=`echo $ipinfo |cut -f1 -d\;`
  5. hostname=`echo $ipinfo |cut -f2 -d\;`
  6. echo $ip
  7. echo $hostname
  8. }
  9. #Lancement de la procédure
  10. getip
  11. if (( `echo $hostname | grep .net` -o `echo $hostname | grep .com` ))
  12. then
  13. getip
  14. elif (( `echo $hostname | grep .info` -o `echo $hostname | grep .org` ))
  15. then
  16. getip
  17. fi
  18. exit
 

Parfois, j'ai une erreur de ce type:

 
Code :
  1. line 17:  ((: -o domain.info  : syntax error in expression (error token is "domain.info " )
 

Que celà signifie t-il ?

 

Merci d'avance !
RedVivi


Message édité par redvivi le 10-08-2008 à 21:23:34
Reply

Marsh Posté le 10-08-2008 à 21:19:18   

Reply

Marsh Posté le 11-08-2008 à 00:48:54    

qu'il y une erreur dans ta syntaxe
 
et moi non plus je comprends rien à ton if ....
 
tu es sur de ton -o ?  
 
pourquoi ne pas utiliser tout simplement utiliser soit l'opérateur d'égalité = , soit !=, soit -eq (equal), soit -ne (not equal)
 
exemple :
if [ "totot" = "titi" ]

Reply

Marsh Posté le 11-08-2008 à 00:53:00    

Ce n'est pas le but, -o (cf bash) signifie OR, je teste la présence ou non de la chaine de caractere .net, .org, .com etc..

Reply

Marsh Posté le 11-08-2008 à 01:33:47    

Si le but est simplement de déterminer si la variable se termine par ".com", ".net", etc. Essaye ça :

 

test=`echo $hostname | egrep '\.(net|com|info|org)$'`
if [ ${#test} -ne 0 ]; then
        getip
fi

 

\.(net|com|info|org)$ => reconnais toutes les chaines finissant par ".com", ".net", ".info", ou ".org"

 

Remarque : Il y a sûrement une façon plus simple de le faire, mais c'est la seule que je connais...

Message cité 1 fois
Message édité par zeblods le 11-08-2008 à 01:39:43
Reply

Marsh Posté le 11-08-2008 à 01:45:22    

zeblods a écrit :

Si le but est simplement de déterminer si la variable se termine par ".com", ".net", etc. Essaye ça :
 

test=`echo $hostname | egrep '\.(net|com|info|org)$'`
if [ ${#test} -ne 0 ]; then
        getip
fi


 
\.(net|com|info|org)$ => reconnais toutes les chaines finissant par ".com", ".net", ".info", ou ".org"
 
Remarque : Il y a sûrement une façon plus simple de le faire, mais c'est la seule que je connais...


 
En fait je voudrais reconnaitre toutes les chaines "contenant" et non "se terminant par"
 
Il y a possibilité d'inclure les paramètres de test directement dans le test apres le if au lieu de passer par une variable ?

Reply

Marsh Posté le 11-08-2008 à 01:51:51    

redvivi a écrit :

 

En fait je voudrais reconnaitre toutes les chaines "contenant" et non "se terminant par"

 

Il y a possibilité d'inclure les paramètres de test directement dans le test apres le if au lieu de passer par une variable ?


Dans ce cas :

test=`echo $hostname | egrep '\.(net|com|info|org)'`
if [ ${#test} -ne 0 ]; then
        getip
fi

 

Et pour tout mettre dans le if, justement là j'ai pas encore trouvé de solution...
Le seul truc qui marche (de tout ce que j'ai déja testé), c'est de mettre le résultat dans une variable, puis de tester si cette variable est de taille nulle...

 


PS : Si tu veux plutot faire ce script en perl, il te suffirait de faire :

if($hostname =~ /\.(net|com|info|org)/) {
        getip();
}



Message édité par zeblods le 11-08-2008 à 01:57:15
Reply

Marsh Posté le 11-08-2008 à 09:37:42    

C'est le (re)drame, maintenant j'ai une erreur de type:
 

Code :
  1. grep: Echec du pairage de ) ou de \)


 
Pas courant comme erreur..keskivapa?

Reply

Marsh Posté le 11-08-2008 à 11:20:56    

redvivi a écrit :

C'est le (re)drame, maintenant j'ai une erreur de type:
 

Code :
  1. grep: Echec du pairage de ) ou de \)


 
Pas courant comme erreur..keskivapa?


T'as pas le même nombre de "(" et de " )".

Reply

Marsh Posté le 11-08-2008 à 11:26:48    

Ben pourtant j'ai bien une ouverture et une fermeture...!? (cf ton script)

Reply

Marsh Posté le 11-08-2008 à 12:04:56    

Pourtant chez moi ce script fonctionne sans soucis :

test=`echo $hostname | egrep '\.(net|com|info|org)'`
if [ ${#test} -ne 0 ]; then
        getip
fi

 

Ah, et j'utilise bash pour exécuter le script

 

Par contre si tu as essayer ce script la :

if($hostname =~ /\.(net|com|info|org)/) {
        getip();
}


il faut définir perl comme interpréteur.


Message édité par zeblods le 11-08-2008 à 12:08:22
Reply

Marsh Posté le 11-08-2008 à 12:04:56   

Reply

Marsh Posté le 11-08-2008 à 16:12:27    

C'est pas possible, voici mon code:

 
Code :
  1. #!/bin/sh (j'ai essayé /bin/bash aussi)
  2. getip() {
  3. ipinfo=`curl --silent --max-time 60 --connect-timeout 30 http://xxxx.xxx/ip.php`
  4. ip=`echo $ipinfo |cut -f1 -d\;`
  5. hostname=`echo $ipinfo |cut -f2 -d\;`
  6. echo $ip
  7. echo $hostname
  8. }
  9. #hostname est du genre: blabla.inet.us par exemple
  10. #Lancement de la procédure
  11. getip
  12. #Vérification des hostnames
  13. test=`echo $hostname | egrep '.\(edu|com|net|anon)'`
  14. if [ ${#test} -ne 0 ]; then
  15.         getip
  16. fi
  17. exit
 

Et l'erreur:

Code :
  1. grep: Échec du pairage de ) ou de \)
 

Comprends pas pourquoi ça marche pas

Message cité 1 fois
Message édité par redvivi le 11-08-2008 à 16:15:07
Reply

Marsh Posté le 11-08-2008 à 17:47:23    

Code :
  1. if grep foo <(echo foo) >/dev/null; then echo FOO; fi


Message édité par Taz le 11-08-2008 à 17:47:34
Reply

Marsh Posté le 11-08-2008 à 17:56:32    

redvivi a écrit :

C'est pas possible, voici mon code:
 

Code :
  1. #!/bin/sh (j'ai essayé /bin/bash aussi)
  2. getip() {
  3. ipinfo=`curl --silent --max-time 60 --connect-timeout 30 http://xxxx.xxx/ip.php`
  4. ip=`echo $ipinfo |cut -f1 -d\;`
  5. hostname=`echo $ipinfo |cut -f2 -d\;`
  6. echo $ip
  7. echo $hostname
  8. }
  9. #hostname est du genre: blabla.inet.us par exemple
  10. #Lancement de la procédure
  11. getip
  12. #Vérification des hostnames
  13. test=`echo $hostname | egrep '.\(edu|com|net|anon)'`
  14. if [ ${#test} -ne 0 ]; then
  15.         getip
  16. fi
  17. exit


 
Et l'erreur:

Code :
  1. grep: Échec du pairage de ) ou de \)


 
Comprends pas pourquoi ça marche pas


Et avec test=`echo "$hostname" | egrep '.\(edu|com|net|anon)'` ?

Reply

Marsh Posté le 11-08-2008 à 19:54:47    

Non plus, par contre Taz merci de ra réponse mais j'ai pas bien saisi la portée ce celle-ci..:-\
 

Reply

Marsh Posté le 11-08-2008 à 21:07:20    

redvivi a écrit :

Non plus, par contre Taz merci de ra réponse mais j'ai pas bien saisi la portée ce celle-ci..:-\
 


Mouarf, je viens de voir qu'en fait tu avais inversé la position du "\" ...

 

test=`echo $hostname | egrep '\.(edu|com|net|anon)'`

 

Faute que j'ai recopié sans faire attention par la suite...


Message édité par zeblods le 11-08-2008 à 21:08:33
Reply

Marsh Posté le 11-08-2008 à 21:11:33    

Oh bien vu !!
 
Merci !

Reply

Marsh Posté le 11-08-2008 à 21:39:13    

Oui mais non, c'est le redrame, il ne reconnait que les chaines finissant par les expressions désignés et non celles qui contiennent les expressions, moi et les regexp c'est la galère alors...

Reply

Marsh Posté le 11-08-2008 à 21:44:13    

redvivi a écrit :

Oui mais non, c'est le redrame, il ne reconnait que les chaines finissant par les expressions désignés et non celles qui contiennent les expressions, moi et les regexp c'est la galère alors...


Avec egrep '\.(edu|com|net|anon)' ça reconnais le pattern peut importe sa position dans la chaine.
Avec egrep '\.(edu|com|net|anon)$' ça signifie que le pattern doit se situé à la fin de la chaine.

Reply

Marsh Posté le 11-08-2008 à 21:54:49    

Non ça ne fonctionne pas, il reconnait uniquement les fins de chaines
 
essaye avec
 

Code :
  1. hostname=anonymiser.fgffgfgsf.fi

Reply

Marsh Posté le 11-08-2008 à 22:03:58    

redvivi a écrit :

Non ça ne fonctionne pas, il reconnait uniquement les fins de chaines

 

essaye avec

 
Code :
  1. hostname=anonymiser.fgffgfgsf.fi



??? Il faut reconnaître quoi la dedans ? ça ne contient ni .edu, ni .com, ni .net, ni .anon

 

Or c'est bien ce que tu cherches ?

redvivi a écrit :

Ce n'est pas le but, -o (cf bash) signifie OR, je teste la présence ou non de la chaine de caractere .net, .org, .com etc..

 


Dis clairement quelles sont les pattern a trouver


Message édité par zeblods le 11-08-2008 à 22:06:36
Reply

Marsh Posté le 11-08-2008 à 22:06:32    

Ra horreur, j'ai compris, non je je ne veux pas de .edu, juste edu (pas le point)

Reply

Marsh Posté le 11-08-2008 à 22:08:39    

redvivi a écrit :

Ra horreur, j'ai compris, non je je ne veux pas de .edu, juste edu (pas le point)


egrep 'edu|\.com|\.net|anon'

 

La par exemple ça reconnais : edu, .com, .net, anon


Message édité par zeblods le 11-08-2008 à 22:10:26
Reply

Marsh Posté le 11-08-2008 à 23:02:02    

J'ai fait copier coller de ton code sur mon PC, j'ai lancé le script et je ne rentre pas dans la boucle...

 

[EDIT] le temps que je réponde, redvivi à supprimé son post...


Message édité par zeblods le 11-08-2008 à 23:02:42
Reply

Marsh Posté le 11-08-2008 à 23:32:39    

Oui, en fait dès que je rentrais une fois dans la boucle je n'y sortait plus ! Problème corrigé ! En tout cas merci pour ton aide et ta patience (sic!)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed