PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Forums Hébergement > Forum Serveur - Sécurité et techniques > fr.comp.os.unix > condition avec test sur un debut de ligne
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
fr.comp.os.unix Système UNIX.

condition avec test sur un debut de ligne

Réponse
 
LinkBack Outils de la discussion
Vieux 09/05/2006, 10h28   #1
dorisnemo
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut condition avec test sur un debut de ligne

Bonjour,

J'ai un fichier qui contient une liste de hostname ($host)
je souhaite effectuer une condition si le début de la ligne commence
soit par "lx" soit par une IP. Mais j'ai une erreur lorsque je lance le
script sur le else. Pour acceder a la machine linux je dois faire du
ssh que je n'ai pas encore intégrer dans la fonction mais je souhaite
avant tout savoir si ma condition fonctionne.

######################
fctlsgrpgene() {

for h in $(cat $hosts)
do
## condition test pour serveurs linux
if [[${h} == | awk '/^[lx]/ {print}' ]]
then
echo "Group:GID:ListeMbrGroup" > $DIR_LOG/lsgrpgeneLinux.log
cat /etc/group | awk -F: '{print $1":"$3":"$4}' >>
$DIR_LOG/lsgrpgeneLinux.log

cp $DIR_LOG/lsgrpgeneLinux.log
"$DIR_LOG/lsgrpgeneLinux"$(dte)".sort"
rm $DIR_LOG/lsgrpgeneLinux.log
else
for grp in $(rsh $h "lsgroup -a ALL")
do
echo "${h}:\c" >> $DIR_LOG/lsgrpgene.log
rsh $h "lsgroup -c -a id admin adms $grp" | tail -1 >>
$DIR_LOG/lsgrpgene.log
done
fi
done
echo "Hostname:Group:GID:AdminGrp:AdminUsers" > $DIR_LOG/lsgrpgene.sort
sort -t: +1 $DIR_LOG/lsgrpgene.log >> $DIR_LOG/lsgrpgene.sort
rm $DIR_LOG/lsgrpgene.log
##########################################

Avez-vous une idée ?
G.

  Réponse avec citation
Vieux 09/05/2006, 11h33   #2
Stephane Chazelas
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: condition avec test sur un debut de ligne

On 9 May 2006 02:28:04 -0700, dorisnemo wrote:
[...]
> if [[${h} == | awk '/^[lx]/ {print}' ]]


case $h in
[lx]* ...;;
*) ...;;
esac

--
Stephane
  Réponse avec citation
Vieux 09/05/2006, 16h30   #3
Nicolas MICHEL
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: condition avec test sur un debut de ligne

dorisnemo <gberengue@unedic.fr> wrote:


> if [[${h} == | awk '/^[lx]/ {print}' ]]

[snip]
> Avez-vous une idée ?


C'est trop gros, je vais encore passer pour un con, mais...
ne manque-t-il pas un espace entre [[ et ${h} ?


--
S'il n'y a pas de solutions, c'est qu'il n'y a pas de problèmes
iChat/AIM : michelnicolas
  Réponse avec citation
Vieux 09/05/2006, 16h38   #4
Luc Habert
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: condition avec test sur un debut de ligne

Stephane Chazelas :

> [lx]* ...;;


Coquille: il faut mettre un «)» après l'étoile.
  Réponse avec citation
Vieux 09/05/2006, 16h45   #5
Stephane Chazelas
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: condition avec test sur un debut de ligne

2006-05-9, 15:38(+00), Luc Habert:
> Stephane Chazelas :
>
>> [lx]* ...;;

>
> Coquille: il faut mettre un «)» après l'étoile.


Elle etait dans le "..." :-b

--
Stéphane
  Réponse avec citation
Vieux 10/05/2006, 15h49   #6
dorisnemo
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: condition avec test sur un debut de ligne

Stephane avec ta solution, j'ai un tout petit problème, mais vraiment
minuscule c'est qu'il me prend tous hostname avec "xi" sinon comment je
fait pour remplacer par une valeur qui va contenir une adresse IP.
Sinon ça fonctionne trés bien ;-) mieux qu'avant !

  Réponse avec citation
Vieux 10/05/2006, 16h10   #7
Stephane Chazelas
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: condition avec test sur un debut de ligne

On 10 May 2006 07:49:50 -0700, dorisnemo wrote:
> Stephane avec ta solution, j'ai un tout petit problème, mais vraiment
> minuscule c'est qu'il me prend tous hostname avec "xi"


case $h in [xi]*)

selectionne les noms qui commencent par x ou i, n'etait-ce pas
ce que tu demandais?

> sinon comment je
> fait pour remplacer par une valeur qui va contenir une adresse IP.
> Sinon ça fonctionne trés bien ;-) mieux qu'avant !


Si tu veux matcher une IPv4 address sous la forme x.x.x.x, ou x
sont des nombres decimaux uniquement:

case $h in
*[!0-9.] | *..* | *.*.*.*.* | .* | *. | *25[6-9]* | \
*2[6-9][!.]* | *[3-9][!.][!.]* | *[1-9][!.][!.][!.]*)
echo not decimal quad IP address;;
*.*.*.*)
echo decimal quad IP address;;
*)
echo not decimal quad IP address;;
esac

Ou encore:

if awk '
function isoctet(i) {
return ((i ~ /^[0-9]+$/) && (i <= 255))
}
BEGIN {
if (split(ARGV[1], a, /[.]/) != 4) exit(1)
for (i=1; i<=4; i++)
if (!isoctet(a[i]))
exit(1)
exit(0)
}' "$h"
then
echo decimal quad IP address;;
else
echo not decimal quad IP address;;
fi

--
Stephane
  Réponse avec citation
Vieux 11/05/2006, 08h40   #8
dorisnemo
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: condition avec test sur un debut de ligne

merci
Gérald

  Réponse avec citation
Vieux 11/05/2006, 08h46   #9
dorisnemo
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: condition avec test sur un debut de ligne

En fait je veux bien une explication sur la premiere partie afin de
comprendre mieux:
*[!0-9.] | *..* | *.*.*.*.* | .* | *. | *25[6-9]* | \
*2[6-9][!.]* | *[3-9][!.][!.]* | *[1-9][!.][!.][!.]*)
echo not decimal quad IP address;;
merci de ton retour
Gérald

  Réponse avec citation
Vieux 11/05/2006, 08h46   #10
dorisnemo
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: condition avec test sur un debut de ligne

En fait je veux bien une explication sur la premiere partie afin de
comprendre mieux:
*[!0-9.] | *..* | *.*.*.*.* | .* | *. | *25[6-9]* | \
*2[6-9][!.]* | *[3-9][!.][!.]* | *[1-9][!.][!.][!.]*)
echo not decimal quad IP address;;
merci de ton retour
Gérald

  Réponse avec citation
Vieux 11/05/2006, 09h01   #11
Stephane Chazelas
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: condition avec test sur un debut de ligne

2006-05-11, 00:46(-07), dorisnemo:
> En fait je veux bien une explication sur la premiere partie afin de
> comprendre mieux:
> *[!0-9.] | *..* | *.*.*.*.* | .* | *. | *25[6-9]* | \

^
manque un *

> *2[6-9][!.]* | *[3-9][!.][!.]* | *[1-9][!.][!.][!.]*)
> echo not decimal quad IP address;;
> merci de ton retour

[...]

Le patterns des shells ne sont pas des regexp, et sont plus
limités.

Souvent, c'est plus facile de decrire ce qui ne matche pas que
ce qui matche.

Ce qui ne matche pas un <0-255>.<0-255>.<0-255>.<0-255>, c'est
soit quelquechose qui contient un charactere autre que 0-9 ou .
Une fois qu'on a eliminé ceux la, il ne reste guere a eliminer
que ce qui contient ".." ou commence ou se termine par "." ou
contiennent plus de 3 "." puis les nombres qui ne sont pas
compris entre 0 et 255, donc les <256-259>, les <2[6-9]x> les
<[3-9]xx> pour les nombres a trois chiffres et tous les nombres
a plus de trois chiffres.

La ligne d'apres est importante car avec:
*.*.*.*) on exclue ce qui a moins de 3 ".", ce que ce recupere
les
*) a la ligne suivante.

Si on avait du decrire tout ce qui matche, on n'en aurait pas
finit:

[0-9].[0-9].[0-9].[0-9] | \
[0-9].[0-9].[0-9].[0-9][0-9] | \
[0-9].[0-9].[0-9][0-9].[0-9] | \
[0-9].[0-9][0-9].[0-9].[0-9] | \
[0-9].[0-9].[0-9].[0-9] | \
[0-9].[0-9].[0-9][0-9].[0-9][0-9] | \
[0-9][0-9].[0-9].[0-9][0-9].[0-9] | \
[0-9].[0-9][0-9].[0-9][0-9].[0-9] | \
[0-9][0-9].[0-9].[0-9].[0-9][0-9] | \
....

Sans compter qu'on ne pourrait pas decrire 0000001.2.3.4

--
Stéphane
  Réponse avec citation
Vieux 11/05/2006, 09h18   #12
Stephane Dupille
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: condition avec test sur un debut de ligne

"dorisnemo" <gberengue@unedic.fr> écrit :
> En fait je veux bien une explication sur la premiere partie afin de
> comprendre mieux:


La première partie sert à déterminer les cas d'erreurs. Par exemple,
un truc sous la forme 712.123.123.123 n'est pas une adresse IP mais
aurait été matché positivement par la seconde partie.

> *[!0-9.]


Si le machin contient autre chose que des nombres et des points

> *..*


Si ça contient deux points consécutifs

> *.*.*.*.*


Si ça contient 5 points (ou plus)

> .*


Si ça commence par un point


> *.


Si ça finit par un point

> *25[6-9]*


Si ça contient une valeur comprise entre 256 et 259.

> *2[6-9][!.]*


Si ça contient une valeur entre 260 et 299.

> *[3-9][!.][!.]*


Si ça contient une valeur entre 300 et 999.

> *[1-9][!.][!.][!.]*)


Si ça contient une valeur entre 1000 et 9999 (ou plus).

> echo not decimal quad IP address;;


Alors ce ne sont pas des adresses IP correctement formées.

> merci de ton retour


HTH.

--
CJ> Les censeurs agitent plus de vent que les moulins des Pays Bas.
Tiens, je savais pas que c'étaient les moulins qui créaient le vent.
-+- GR in GNU : Dame qui se shoote et sang chaud pensa -+-
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 08h33.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,14554 seconds with 20 queries