J'ai un fichier qui contient une liste de hostname ($host)
je souhaite effectuer une condition si le d=E9but 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=E9grer 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} =3D=3D | 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
##########################################
Coquille : il faut mettre un « ) » après l'étoile.
Elle etait dans le "..." :-b
-- Stéphane
dorisnemo
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 !
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 !
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 !
Stephane Chazelas
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
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 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
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
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
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
dorisnemo
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
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
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
Stephane Chazelas
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:
Sans compter qu'on ne pourrait pas decrire 0000001.2.3.4
-- Stéphane
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:
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: