Traduction du sh au csh

Fermé
yoopi - 4 févr. 2009 à 13:40
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 4 févr. 2009 à 18:43
Bonjour,

je voudrais traduire ceci du shell au csh

ce qui se passe c'est que en shell (sur linux) cela fonctionne très bien mais en csh (sur solaris) j'ai un petit problème;

le compteur qui évolue dans ma boucle est initialisé à 0 lorsque je sors de la boucle et donc sa valeur est perdue, hors j'ai grandement besoin de la valeur de mon compteur.

qqn peut m'aider ?

grep " AVAIL" $HOME/file.txt | awk -F"(" '{ print $2 }'| awk -F")" '{ print $1 }' > $HOME/liste_node

cpt=0
{
while read line

do grep "$line" $HOME/liste_node >/dev/null
if [ "$?" = 1 ]
then
echo ""$line""
cpt=`expr $cpt + 1`
fi

done < $HOME/list.txt
}
echo $cpt

if [ "$cpt" = 0 ]
then
STAT=" ALL NODE ARE AVAILABLE "
echo $STAT
RET=0
exit $RET

else
STAT=" THERE IS $cpt NODE MISSING "
echo $STAT
RET=1
exit $RET
fi

d'avance merci

3 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
4 févr. 2009 à 18:43
Essaie plutôt avec une boucle "foreach" à la place du while :
foreach line ( $(cat /export/home/glerelay/list.txt) )
grep "$line" liste_node >/dev/null
if ("$?" == 1)
then
@ cpt++
endif 
end
Et n'oublie pas de convertir tous les :

if [ ... ] then ... fi
en
if ( ...) then ... endif

dans le reste du script ;-))
1
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 622
4 févr. 2009 à 14:19
hello
pourquoi ne pas l'exécuter tel quel sur Solaris en plaçant en première ligne:
#!/bin/sh
ou
#!/bin/ksh
0
hello,

j'avais oublié de mettre le programme au complet ; le voici :

#!/bin/sh
cpt=0
grep accepted /export/home/glerelay/slerel/log/p10_`\date +"%Y%m%d"`.log |awk -F"." '{ p
rint $3 }'|awk -F")" '{ print $1 }' > liste_node
{
while read line

do grep "$line" liste_node >/dev/null
if [ "$?" = 1 ]
then
echo "$line"
cpt=`expr $cpt + 1`
fi
done < /export/home/glerelay/list.txt
}
echo "##############"
echo $cpt
if [ "$cpt" = 0 ]
then
STAT=" ALL NODE ARE AVAILABLE "
echo $STAT
RET=0
exit $RET

else
STAT=" !!! THERE IS NODE MISSING !!! "
echo $STAT
RET=1
exit $RET
fi

lorsque j'affiche la valeur de mon compteur quand je sors de la boucle c'est toujours 0 alors que ce devrait être 1

je vais seulement aller voir la page que tu m'as conseillé.

merci
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 622 > yoopi
4 févr. 2009 à 16:07
le même script sur Linux affiche 1 ?
0
yoopi > dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024
4 févr. 2009 à 16:21
oui ça fonctionne et j'ai 1 comme valeur de mon compteur ou 2 ou 3 selon que je change mon fichier d'origine mais l'important c'est qu'il garde la valeur et ne la réinitialise pas en sortant de la boucle.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
4 févr. 2009 à 14:48
Salut,

Voir sur cette page les principales différences et correspondances entre les shells sh et csh.
0
re,

j'ai corrigé quelques paramètres :

#!/bin/csh

set cpt = 0

grep accepted /export/home/glerelay/slerel/log/p10_`\date +"%Y%m%d"`.log |awk -F"." '{ p
rint $3 }'|awk -F")" '{ print $1 }' > liste_node

while (read line)

grep "$line" liste_node >/dev/null
if [ "$?" = 1 ]
then
echo "$line"
cpt=`expr $cpt + 1`
fi
end < /export/home/glerelay/list.txt

echo "##############"
echo $cpt
if [ "$cpt" = 0 ]
then
STAT=" ALL NODE ARE AVAILABLE "
echo $STAT
RET=0
exit $RET

else
STAT=" !!! THERE IS NODE MISSING !!! "
echo $STAT
RET=1
exit $RET
fi

mais après exécution, il me dit que j'ai un problème de syntax dans ma boucle while ????
0
slt,

mon programme ressemble à cela maintenant mais il y a une erreure de syntax dans la boucle while :

#!/bin/csh

set cpt = 0

grep accepted /export/home/glerelay/slerel/log/p10_`\date +"%Y%m%d"`.log |awk
-F"." '{ print $3 }'|awk -F")" '{ print $1 }' > liste_node

while (read line)
grep "$line" liste_node >/dev/null
if ("$?" == 1)
then
@ cpt++
endif
end < /export/home/glerelay/list.txt

echo "##############"
echo $cpt
if [ "$cpt"= = 0 ]
then
set STAT = " ALL NODE ARE AVAILABLE "
echo $STAT
set RET = 0
exit $RET

else
set STAT = " !!! THERE IS NODE MISSING !!! "
echo $STAT
set RET = 1
exit $RET
fi
0