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

  1. donnez une ligne de commande permettant de connaître le nombre de ligne du fichier /etc/passwd de votre poste
  2. donnez une ligne de commande permettant d'afficher les lignes 3 à 9 du fichier /etc/passwd de votre poste
  3. 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.
  4. 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
  1. tous les fichiers commençant par une lettre majuscule non accentuée
  2. tous les fichiers finissant par les caractères ".txt" et commençants par un chiffre.
  3. les fichiers dont le nom fait exactement 4 caractères
  4. 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

  1. 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.
  2. 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
  1. é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.
  2. é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.
  3. écrire une fonction prixTotal qui affiche la somme des prix des articles commandés.
  4. 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 =============================================