|
|
|
|
||||||
| fr.comp.os.unix Système UNIX. |
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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. |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
On 9 May 2006 02:28:04 -0700, dorisnemo wrote:
[...] > if [[${h} == | awk '/^[lx]/ {print}' ]] case $h in [lx]* ...;; *) ...;; esac -- Stephane |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
Stephane Chazelas :
> [lx]* ...;; Coquille: il faut mettre un «)» après l'étoile. |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
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 ! |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
merci
Gérald |
|
|
|
#9 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#10 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#11 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#12 |
|
Messages: n/a
Hébergeur: |
"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 -+- |
|
![]() |
| Outils de la discussion | |
|
|