Développement d'un Shell script
Bonjour,
j'ai un problème de développement d'un Shell script il se peut qu'il parait facile mais comme chwi débutante en unix je le trouve un peu difficile et j'arrive pas à le résoudre si quelqu'un peut m'aider ça sera très gentil ,l'énoncé est comme suit :
Développer un Shell script qui permet de réaliser selon le choix de l'utilisateur l'une des taches suivantes:
*pour chaque processus (parmi tous les processus en cours), afficher sur le stdout le PID, le PPID ; la commande associée, l'état et le propriétaire.
*pour un utilisatuer défini par son nom ou son UID ,afficher sur le stdout les PID , les PPID et les commandes associés aux processus dont il est propriétaire
Le Shell doit offrir deux modes d'utilisation:un mode interactif(menu de choix , saisie des données ,..) ou un mode direct dans lequel on indique les info nécessaires (tache à effectuer , utilisateur ) à travers les arguments transmis au script lors de son exécution.
j'ai fait un ptt essai:
if (($# == 0))
then ps -ef | awk '{printf("PID:%s PPID:%s cmd: %s etat:%s proprietaire:%s \n", $2,$3,$8,$4,$1);'}
else
if (($# == 1))
then
name=$1
ps -ef |grep "$name"| awk '{printf("UID:%s PID:%s PPID:%s cmd:%s \n",$1,$2,$3,$8);}'
fi
fi
j'ai un problème de développement d'un Shell script il se peut qu'il parait facile mais comme chwi débutante en unix je le trouve un peu difficile et j'arrive pas à le résoudre si quelqu'un peut m'aider ça sera très gentil ,l'énoncé est comme suit :
Développer un Shell script qui permet de réaliser selon le choix de l'utilisateur l'une des taches suivantes:
*pour chaque processus (parmi tous les processus en cours), afficher sur le stdout le PID, le PPID ; la commande associée, l'état et le propriétaire.
*pour un utilisatuer défini par son nom ou son UID ,afficher sur le stdout les PID , les PPID et les commandes associés aux processus dont il est propriétaire
Le Shell doit offrir deux modes d'utilisation:un mode interactif(menu de choix , saisie des données ,..) ou un mode direct dans lequel on indique les info nécessaires (tache à effectuer , utilisateur ) à travers les arguments transmis au script lors de son exécution.
j'ai fait un ptt essai:
if (($# == 0))
then ps -ef | awk '{printf("PID:%s PPID:%s cmd: %s etat:%s proprietaire:%s \n", $2,$3,$8,$4,$1);'}
else
if (($# == 1))
then
name=$1
ps -ef |grep "$name"| awk '{printf("UID:%s PID:%s PPID:%s cmd:%s \n",$1,$2,$3,$8);}'
fi
fi
A voir également:
- Développement d'un Shell script
- Classic shell - Télécharger - Personnalisation
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Script cmd - Guide
1 réponse
C'est en effet une manière de faire
- ps va te permettre de récupérer la liste des processus
- grep va permettre de mettre en place un filtre pour n'extraire que les lignes qui t'intéressent
- awk permet de remettre en forme la ligne extraite
Si tu regardes :
... tu verras que tu peux demander à ps de sortir exactement les colonnes qui t'intéressent et dans l'ordre qui t'arrange. En particulier extraire en première colonne l'utilisateur permettrait de mettre en place une expression régulière plus fine (dans ton cas, que se passe-t'il le jour où un processus porte le nom d'un utilisateur passé en paramètre ?).
Le ^ signifie "commence par".
Tu noteras l'espace derrière root (ce qui éviterait d'extraire un utilisateur dont le login n'est pas root mais commence par "root...".)
Ensuite il ne reste plus qu'à remettre en forme le résultat avec awk comme tu l'as fait.
Bonne chance
- ps va te permettre de récupérer la liste des processus
- grep va permettre de mettre en place un filtre pour n'extraire que les lignes qui t'intéressent
- awk permet de remettre en forme la ligne extraite
Si tu regardes :
man ps
... tu verras que tu peux demander à ps de sortir exactement les colonnes qui t'intéressent et dans l'ordre qui t'arrange. En particulier extraire en première colonne l'utilisateur permettrait de mettre en place une expression régulière plus fine (dans ton cas, que se passe-t'il le jour où un processus porte le nom d'un utilisateur passé en paramètre ?).
ps -eo user,pid,ppid,command | grep "^root "
Le ^ signifie "commence par".
Tu noteras l'espace derrière root (ce qui éviterait d'extraire un utilisateur dont le login n'est pas root mais commence par "root...".)
Ensuite il ne reste plus qu'à remettre en forme le résultat avec awk comme tu l'as fait.
Bonne chance