Journal : Script pour Admins GL

Posté par snurpsss () le 12 août 2004
0
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
###############################################

> Lire le journal (3 commentaires, moyenne: 2).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

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

1er deffrichage

Posté par daggett () le 12/08/2004 à 08:42. (lien). É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 Ramón Perez (page perso, ) le 12/08/2004 à 08:46. (lien). É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

    • [^]Re: 1er deffrichage

      Posté par Bruno Muller (Jabber id, page perso, ) le 12/08/2004 à 09:27. (lien). Évalué à 1.

      ou encore :

      while read ligne ; do
      ...
      done < <(grep $hostname gllist.dat)

Revenir en haut de page