Shell : contrôle continu No 1
Durée: 1h15. Tous les documents sont autorisés.
Vous m'enverrez par mail à l'adresse pascal.petit@shayol.org le fichier contenant les réponses aux questions.
Exercice 1
- donnez une ligne de commande permettant de connaître le
nombre de ligne du fichier /etc/passwd de votre poste
- donnez une ligne de commande permettant d'afficher les lignes 3
à 9 du fichier /etc/passwd de votre poste
- le fichier /etc/passwd est constitué de champs
séparés par le caractère ":". Le premier
champ contient le nom d'ouverture de session (nom d login) de
l'utilisateur. Donnez une commande permettant d'obtenir la liste des
noms de login des utilisateurs du système.
- le fichier /etc/passwd est constitué de champs
séparés par le caractère ":". Le troisième
champ contient le numero de
groupe (appelé GID) de l'utilisateur. donnez une commande qui
affiche la liste des numéros de groupes différents
utilisés dans /etc/passwd. Un même numéro ne doit
être affiché qu'une seule fois.
éléments de correction:
wc -l < /etc/passwd
head -n 9 < /etc/passwd |tail -n 7
cat /etc/passwd | cut -d : -f 1
cat /etc/passwd | cut -d : -f 3 |sort -n | uniq
Exercice 2 expansion des noms de fichiers
Donnez l'argument à donner à la commande ls pour afficher
- tous les fichiers commençant par une lettre majuscule non accentuée
- tous les fichiers finissant par les caractères ".txt" et commençants par un chiffre.
- les fichiers dont le nom fait exactement 4 caractères
- les fichiers commençant par un chiffre ou le
caractère \
éléments de correction:
ls [A-Z]*
ls [0-9]*.txt
ls ????
ls [0-9]\\
Exercice 3
- Donnez la ligne de commande permettant de faites en sorte que la
liste des fichiers et dossier présents directement dans le dossier /etc
soit dans un fichier nommé /tmp/liste.txt.
- Donnez la ligne de commande permettant d'ajouter liste des fichiers et dossier présents directement dans le dossier /var au fichier /tmp/liste.txt.
éléments de correction:
ls /etc > /tmp/liste.txt
ls /var >> /tmp.liste.txt
Exercice 4
Dans cet exercice, on travaille avec le fichier fournitures.txt. Ce fichier contient les commandes de
fournitures de bureau d'un service administratif. Les lignes sont
constitués de champs séparés par le caractère ":". Elles ont la forme
suivante:
nom:prénom:bureau:ville:article commandé:prix
- écrire une fonction listeArticlesCommandés qui
affiche la liste des articles commandés. Un article commandé plusieurs
fois apparaîtra plusieurs fois. Si vous ne savez pas écrire une
fonction, vous pouvez fournir la commande permettant d'obtenir la liste
des articles commandés.
- écrire une fonction listeOccupantBureau qui
affiche la liste des nom et prénom des différents occupant d'un bureau.
Le numéro de bureau sera passé en paramètre à la fonction. Chaque
personne doit apparaître une seule fois.
- écrire une fonction prixTotal qui affiche la somme des prix des articles commandés.
- Question subsidiaire: écrire un script prixParPersonne qui affiche pour chaque personne la somme totale des articles qu'il a commmandé.
éléments de correction :
#! /bin/bash
fichier=fournitures.txt
function listeArticlesCommandes (){
cut -d : -f 5 $fichier
}
echo ----------------------------------------------
echo test de la fonction listeArticlesCommandes
listeArticlesCommandes
echo =============================================
# fonction a un argument : le No de bureau
# affiche la liste des nom et prénom des occupants du bureau
function listeOccupantsbureau (){
grep "^[^:]*:[^:]*:$1:" $fichier | cut -d : -f 1,2 |sort |uniq
}
echo ----------------------------------------------
echo test de la fonction listeOccupantsbureau
listeOccupantsbureau 51
echo =============================================
function prixTotal () {
listePrix=$(cut -d : -f 6 $fichier)
s=0
for i in $listePrix
do
s=$(( $s+$i ))
done
echo $s
}
echo ----------------------------------------------
echo test de la fonction prixTotal
prixTotal
echo =============================================