Exercice : Défi
Il va falloir réaliser un script Bash complet qui réalise la tâche suivante : il va écrire le message "L'utilisateur NOM_UTILISATEUR a comme UID UID_UTILISATEUR", pour chaque utilisateur existant sur la machine. NOM_UTILISATEUR
et UID_UTILISATEUR
seront bien entendu remplacé par le nom de l'utilisateur et son UID.
Le message en question sera écrit dans l'un des 3 fichiers différents :
users.txt
si l'UID est compris entre 1000 et 1999 (inclus)system_users.txt
sur l'UI est strictement inférieur à 1000other_users.txt
pour les UID supérieurs ou égaux à 2000
Écrivez le script permettant de réaliser cela.
On peut trouver la liste des utilisateurs et leur UID dans le fichier /etc/passwd
.
La commande cut
est très utile pour extraire des informations depuis du texte ayant un format bien défini.
On créé et rend exécutable un fichier defi.sh
qui va contenir notre script.
#!/bin/bash
for entry in $(cat /etc/passwd | cut -d":" -f1,3)
do
user=$(echo "$entry" | cut -d":" -f1)
user_id=$(echo "$entry" | cut -d":" -f2)
if [ $user_id -ge 1000 ] && [ $user_id -lt 2000 ]
then
echo "L'utilisateur $user a comme UID $user_id" >> users.txt
elif [ $user_id -lt 1000 ]
then
echo "L'utilisateur $user a comme UID $user_id" >> system_users.txt
else
echo "L'utilisateur $user a comme UID $user_id" >> other_users.txt
fi
done
Il y a différentes manières de faire, mais celle-ci est plutôt une bonne proposition. On commence par faire une boucle for
sur toutes les entrées du fichier /etc/passwd
, dont l'on extrait uniquement le nom d'utilisateur et l'UID grâce à cut
.
Pour chaque entrée on récupère le nom d'utilisateur et son UID dans deux variables séparées, toujours grâce à cut
.
On applique ensuite une condition sur l'UID :
si l'UID est compris entre 1000 (inclus) et 2000 (exclus) on écrit le message à l'aide d'une redirection dans le fichier
users.txt
si l'UID est plus petit que 1000 on écrit le message à l'aide d'une redirection dans le fichier
system_users.txt
sinon on écrit dans
other_users.txt
On prends garde à écrire à l'aide de redirections >>
, et non pas >
, pour ne pas écraser le contenu des fichiers à chaque écriture.
Auto-évaluation
Auto-évaluez votre capacité à répondre correctement aux questions de ce défi (sur une échelle de 1 à 4) :
Je ne sais répondre à aucune question (ou presque)
Je sais répondre à moins de la moitié des questions
Je sais répondre à plus de la moitié des questions
Je sais répondre à toutes les questions (ou presque)
Auto-évaluez votre capacité à répondre correctement aux questions de ce défi (sur une échelle de 1 à 4) :
Je ne sais répondre à aucune question (ou presque)
Je sais répondre à moins de la moitié des questions
Je sais répondre à plus de la moitié des questions
Je sais répondre à toutes les questions (ou presque)