Journal Script pour Admins GL

Posté par  .
Étiquettes : aucune
0
12
août
2004
Bon c est qu un début , mais faut bien se lancer (dans le scripting j entend)

Problèmes :
assigner le nom du processGL a une variable dont le nom varie a chaque boucle
apres lecture du choix utilisateur , réobtenir le nom du processGL a travers la variable précédement définis .

Si qqu un peut m aider mici bocou

############################################
#!/bin/bash
version="GLadmin 0.01 by P.Hamon"
#Fonction fexit
#Pour quitter :)
function fexit()
{
exit
}
#Fonction fmenuhost
#Permet de choisir la machine sur laquelle on veut travailler
#Menu a implémenter a la main , ainsi que le test qui va bien apres
# A faire : faire lire le fichier gllist.dat , cutter la colonne 2 , et n'afficher qu une fois une valeur si elle apparait plusieurs fois
function fmenuhost ()
{
clear
echo $version
echo
echo "Selectionnez un serveur"
echo
echo " 1) GL Liffe Fin"
echo " 2) GL Liffe Equ"
echo " 3) Gl Backup"
echo
echo " 0) Quitter"
echo
echo Votre Choix
echo -n "-> "
read serveur
case $serveur in
0)
fexit ;;
1)
fmenuprocess glliffefin ;;
2)
fmenuprocess glliffeequ ;;
3)
fmenuprocess glbackup ;;
*)
fmenuhost ;;
esac
}
#Fonction fmenuprocess
#Prend en variable un nom de serveur , et grep gllist.dat par rapport a ce nom de machine .
#Affiche un menu avec les process dispo sur la machine en question .
#Lance fmenuaction avec pour variables le nom de la machine et le process en question .
function fmenuprocess ()
{
hostname=$1
clear
echo $version
echo
echo "Selectionnez un processus GL fonstionnant sur $hostname"
echo
nbprocessgl=`/bin/cat ./gllist.dat |grep $hostname|wc -l`
varmenuprocess=1
cat gllist.dat |grep $hostname |
while read ligne; do
process=`echo $ligne |cut -f3 -d" "`
processa=process$varmenuprocess
echo $process
echo "$processa"
eval "process$varmenuprocess=$process"
echo "$varmenuprocess) Processus $process sur $hostname"
varmenuprocess=$[$varmenuprocess+1]
done
echo
echo Selectionnez un processus
#echo -n "-> "
echo "$process1"
echo "$process2"
echo "$process3"
echo "$process4"
read processnumber
processnum=process$processnumber
echo $processnum
processname=`echo ${!processnum}`
echo $processname
fexit
fmenuaction $hostname $processname
}
#Fonction fmenuaction
#Prend en variable le nom de la machine et le process surlequel on veut travailler
#Permet de lire les logs / Editer un fichier / Trier etc .
#A faire : plusieurs fmenuaction : fmenuactionslc / fmenuactionsle , selon le type de process
function fmenuaction ()
{
echo $hostname
echo $processname
}
fmenuhost
###############################################
  • # 1er deffrichage

    Posté par  . Évalué à 2.

    (je me demande si le precedent n'a pas été effacé parcequ'il serait mieux dans les forums, en fait)

    1er point, pour éviter de faire des evals de noms de variable concaténés: utilise un tableau !
    à la place de eval "process$varmenuprocess=$process" utilise process_array[$varmenuprocess]=$process
    , et à la fin pour récuperer le choix de l'utilisateur, fais read processnumber;
    echo ${process_array[$processnumber]}


    2eme point, et là c'est le vrai probleme du script en fait (je pense que sinon il marcherait avec ta concaténation,
    même si c'est pas tres beau): quand tu fais un pipe de commande, le shell lance un nouveau processus,
    avec ses propres variables d'environnement. Donc tout ce qui est dans le while de
    cat gllist.dat |grep $hostname |
    while read ligne; do.... done

    s'execute dans un nouveau shell, et toutes les variables que tu peux déclarer/modifier à l'interieur
    ne seront pas vues à l'extérieur, donc dans la suite de ton script.

    Il faut donc se débrouiller pour éviter cette structure de pipe. Là tout de suite, je ne sais pas comment faire.
    • [^] # Re: 1er deffrichage

      Posté par  (site web personnel) . Évalué à 3.

      > cat gllist.dat |grep $hostname |
      >while read ligne; do.... done
      >Il faut donc se débrouiller pour éviter cette structure de pipe. Là tout de suite, je ne sais pas comment faire.


      for line in $(grep $hostname gllist.dat) do
      ...
      done

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.