Correction td2 programmation shell - systèmes d’exploitation

Correction du TD n°2 : Programmation Shell - Projet DVD-MIAGE 2010

Solutions détaillées aux exercices de programmation shell pour le projet DVD-MIAGE 2010.

Exercice 1 : Création de répertoires avec mkdir

Ce programme crée le répertoire fourni en argument, ainsi que tous les sous-répertoires intermédiaires nécessaires si besoin.

Solution : Utiliser l'option -p de la commande mkdir pour créer automatiquement les répertoires parents.

Exemple : mystere /home/dupont/test/projet

Exercice 2 : Utilisation de la boucle while

Ce script affiche tous les arguments passés en ligne de commande.

Solution :

#!/bin/shif [ $# -eq 0 ]; thenecho "Aucun argument fourni"exit 0fiwhile [ $# -gt 0 ]; doecho "$1"shiftdone

Exercice 3 : Redirection avec read

Ce programme lit les lignes d'un fichier et les affiche avec un préfixe.

Solution :

#!/bin/sh# Redirection de l'entrée standard vers le fichier donné en argumentwhile read ligne; doecho ">$ligne"done

Exercice 4 : Boucle for sur les répertoires

Ce script affiche le nom de tous les sous-répertoires du répertoire courant.

Solution :

#!/bin/shfor rep in *; do# Pour chaque élément "rep" du répertoire courantif [ -d "$rep" ]; thenecho "$rep"# Affiche le nom du répertoirefidone

Exercice 5 : Opérateurs sur les chaînes de caractères

Ce programme vérifie si un utilisateur est connecté au système.

Solution :

#!/bin/shw=$(who | grep "$1")if [ -z "$w" ]; thenecho "$1 n'est pas connecté"fi

Exercice 6 : Conditionnelles imbriquées

Ce script modifie les permissions du groupe pour tous les fichiers d'une extension donnée, dans un répertoire spécifié.

Solution :

#!/bin/shif [ $# -ne 2 ] && [ $# -ne 3 ]; thenecho "Erreur : donnez 2 ou 3 arguments" >&2exit 1fiif [ $# -eq 2 ]; thenrep="."droit="$1"ext="$2"elif [ $# -eq 3 ]; thenrep="$1"droit="$2"ext="$3"fifor fich in "${rep}"/*.${ext}; dochmod g"$droit" "$fich"echo "$fich"done

Exercice 7 : Instruction case pour confirmation

Ce script demande confirmation avant de supprimer un fichier.

Solution :

#!/bin/shwhile [ $# -ne 0 ]; dofich="$1"shiftrepeat=1while [ $repeat -eq 1 ]; doecho "Voulez-vous vraiment effacer le fichier \"$fich\" ?"read reponsecase "$reponse" in[Oo][Uu][Ii]*)rm "$fich"echo "Suppression confirmée"repeat=0;;[Nn][Oo][Nn]*)echo "Suppression abandonnée"repeat=0;;*)echo "Réponse invalide";;esacdonedone

Exercice 8 : Utilisation de basename pour renommer des fichiers

Ce script remplace l'extension d'un fichier par une nouvelle extension.

Solution :

#!/bin/shif [ $# -ne 2 ]; thenecho "Erreur : donnez 2 arguments." >&2exit 1fivieux="$1"nouveau="$2"for fich in *."${vieux}"; dobase=$(basename "$fich" ."${vieux}")mv "$fich" "$base.$nouveau"if [ $? -ne 0 ]; thenecho "Je ne peux pas renommer \"$fich\" en \"$base.$nouveau\"." >&2fidone

La commande basename extrait le nom du fichier sans son ancienne extension. Le nouveau nom est construit en ajoutant la nouvelle extension.

Exercice 9 : Guillemets, quotes ou backquotes

Exemples d'utilisation des différents types de quotes dans un script shell.

Solution 1 :

#!/bin/shecho "Entrez le nom d'un répertoire : "read direcho "Le répertoire $dir contient les fichiers suivants :"ls "$dir"

Solution 2 :

#!/bin/shif [ $# -ne 1 ]; thenecho "Erreur : Le script doit être appelé avec 1 argument." >&2exit 1fidir="$1"if [ ! -d "$dir" ]; thenecho "Erreur : \"$dir\" n'est pas un répertoire." >&2exit 1fiif [ ! -r "$dir" ]; thenecho "Erreur : Je ne peux pas lire le répertoire \"$dir\"." >&2exit 1fi# On tente de se déplacer dans le répertoire pour utiliser pwdcd "$dir" 2>/dev/nullif [ $? -ne 0 ]; thencmd="ls \"$dir\""elsedir=$(pwd)cmd="ls"fiecho "Le répertoire \"$dir\" contient les fichiers suivants :"exec $cmd

Exercice 10 : Expressions régulières avec grep

Utilisation des expressions régulières pour filtrer des lignes.

Solution :

1) Pour rechercher une ligne commençant par un 'a' (minuscule ou majuscule) :

grep -i '^a' fichier

ou

grep '^[aA]' fichier

2) Le symbole '$' représente la fin de la ligne. Pour rechercher des lignes se terminant par 'rs' :

grep 'rs$' fichier

Questions fréquentes (FAQ)

Quelle est la différence entre les guillemets simples et doubles dans un script shell ?

Les guillemets simples (') préservent tous les caractères, y compris les variables. Les guillemets doubles (") permettent l'expansion des variables et des commandes.

Comment utiliser basename pour extraire une extension ?

La commande basename fichier extension supprime l'extension spécifiée du nom du fichier. Par exemple, basename monfich.txt .txt donne monfich.

À quoi sert la redirection >&2 ?

La redirection >&2 envoie les messages d'erreur vers le flux standard d'erreur (terminal ou fichier de log), plutôt que vers le flux standard de sortie.

Cela peut vous intéresser :

Partagez vos remarques, questions , propositions d'amélioration ou d'autres cours à ajouter dans notre site

Enregistrer un commentaire (0)
Plus récente Plus ancienne