Journal : Script pour Admins GL
Posté par snurpsss () le 12 août 2004Problè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).
1er deffrichage
(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)
-
Les journaux sont destinés à des informations qui ne sont pas suffisamment intéressantes
pour être validées en dépêche (sinon n'hésitez pas à proposer votre information en
dépêche), qui sont sans rapport avec Linux ou le libre, ou simplement pour donner votre
avis. Si vous désirez poser une question, merci d'utiliser 

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.