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.txtsi l'UID est compris entre 1000 et 1999 (inclus)
- system_users.txtsur l'UI est strictement inférieur à 1000
- other_users.txtpour 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/bashfor entry in $(cat /etc/passwd | cut -d":" -f1,3)
douser=$(echo "$entry" | cut -d":" -f1)
user_id=$(echo "$entry" | cut -d":" -f2)
if [ $user_id -ge 1000 ] && [ $user_id -lt 2000 ]
  thenecho "L'utilisateur $user a comme UID $user_id" >> users.txt
elif [ $user_id -lt 1000 ]
  thenecho "L'utilisateur $user a comme UID $user_id" >> system_users.txt
  elseecho "L'utilisateur $user a comme UID $user_id" >> other_users.txt
  fidoneIl 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)