2015-12-01 1 views
0

J'écris un script pour passer des commandes à une console et rediriger la sortie vers un journal pour analyse. C'est le script que j'ai maintenant.Utilisation de EOF dans la fonction ksh

#!/bin/ksh 
gg_sci(){ 
$GG_HOME/ggsci <<EOF > /home/org/obey.log 
obey /home/org/mon.oby 
EOF 
} 
check_st(){ 
status=`cat obey.log | grep -i $1 | awk '$2!=""{print $2}'` 
echo $status 
if [ $status -eq "RUNNING" ] 
then 
    echo "GG process $1 is running" 
    exit 0 
} 
gg_sci 
check_st test 

Ce script fonctionne si je mets les 2 fonctions dans 2 scripts différents. Quand je les ai mis dans un seul script, je reçois une erreur

ksh: 0403-057 Syntax error: `}' is not expected.

Après le débogage, j'ai déterminé l'EOF est en train de lire dans le} qui ferme la fonction. Je ne suis pas sûr de ce que je fais mal, la fonction EOF fonctionne correctement si c'est la seule chose dans le script.

Répondre

2

Il vous manque un fi pour fermer votre if.

En outre, -eq est utilisé pour vérifier l'égalité numérique, pour comparer des chaînes utilisent =:

check_st(){ 
    status=`cat obey.log | grep -i $1 | awk '$2!=""{print $2}'` 
    echo "$status" 
    if [ "$status" = "RUNNING" ] 
    then 
     echo "GG process $1 is running" 
     exit 0 
    fi 
} 
+0

Vous avez raison. Merci pour votre aide ... Je me sens très bête, les plus petites erreurs sont les plus faciles à manquer. – Gautam

+0

Et pendant votre édition, mettez également des guillemets autour de '$ status' (que se passera-t-il si le statut est vide ou contient un espace). Utilisez simplement des guillemets pour toutes les variables et (dans ce cas, innocent) utilisez des accolades: '" $ {status} "'. –

+1

@WalterUn bon point, même si personnellement je préfère ne pas écrire d'accolades si la variable est seule. – mata