Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

condition avec test sur un debut de ligne

11 réponses
Avatar
dorisnemo
Bonjour,

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
##########################################

Avez-vous une id=E9e ?
G=2E

10 réponses

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


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

--
Stephane

Avatar
Nicolas.MICHEL
dorisnemo 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

Avatar
lhabert
Stephane Chazelas :

[lx]* ...;;


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

Avatar
Stephane Chazelas
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


Avatar
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 !
Avatar
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

Avatar
dorisnemo
merci
Gérald
Avatar
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
Avatar
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
Avatar
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:

[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

1 2