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
Question
Écrivez le script permettant de réaliser cela.
Indice
On peut trouver la liste des utilisateurs et leur UID dans le fichier /etc/passwd
.
Indice
La commande cut
est très utile pour extraire des informations depuis du texte ayant un format bien défini.
Solution
On créé et rend exécutable un fichier defi.sh
qui va contenir notre script.
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.