Vous êtes sur la page 1sur 6

Script Shell 

Exercice 2 :
#!/bin/sh

if [ $# -ne 1 ]; then // si le nombre d’argument non égal à 1

echo "Fournir un nom en parametre" // afficher message

exit 1 // false

fi // condition fermé

if [ -d "$1" ]; then // si l’argument est un répertoire passé en premier argument . (-d : directory)

exit 0 //true

else //si nn

"$0" `dirname "$1"` // le chemin de répertoire passé en premier argument

mkdir "$1"

fi

----- Ce programme crée le répertoire fourni en argument, et au besoin tous


les sur-répertoires intermédiaires nécessaires.

Exercice 2 – La boucle while


Écrire un programme shell qui affiche les arguments du programme, dans
l'ordre d'apparition (1er argument en premier). Si le programme n'a aucun
argument, afficher « sans argument ».

#!/bin/sh

if [ $# -eq 0 ]; then //si le nombre d’argument=zéro (eq= égale)

echo "sans argument" //afficher message

exit 0 //true

fi while [ $# -gt 0 ]; do //si le nombre d’argument et supérieur à zero (gt > « supérieur »)

echo $1 //afficher le nombre d’argument actuelle

shift //supprime l’ancien argument et met en place le nouveau

done
Exercice 3 – La commande read
Écrire un programme shell qui affiche ligne par ligne le contenu d'un fichier
dont le nom est fourni en paramètre.

#!/bin/sh

exec < $1 // rediriger l’entrée standard vers le fichier dans le nom et passé en premier parametre

while read ligne ; do // boucle +read = lie chaque ligne de l’entrée

echo ">$ligne" // afficher chaque ligne précedé par >

done // Fin programme

Exercice 4 – La boucle for


Écrire un programme shell qui affiche tous les sous-répertoires du répertoire
courant, en utilisant une boucle.
#!/bin/sh

for rep in *; do //# pour chaque fichier "rep" du repertoire courant (* : all)

if [ -d "$rep" ]; then // # si rep est un repertoire

echo $rep //# affiche rep

fi

done

Exercice 5 – Opérateurs sur les chaînes


Que fait le programme shell suivant (remplacez les '...' par le texte adéquat) ?
#!/bin/sh
w=`who | grep $1`
if [ -z "$w" ]; then echo "$1 n'est pas ..."; fi

Ce programme détermine si l'utilisateur dont le nom est donné comme argument est connecté.
#!/bin/sh

w=`who | grep $1` //who= obtenir la liste des utilisateurs connécté // w= socké dans variable w

if [ -z "$w" ]; then // vérifier la variable w si vide (-z : vérifier si une chaine de caractére est vide )
echo "$1 n'est pas connecté"; //afficher message

fi //fin programme

Exercice 6 – Les conditionnelles imbriquées Solution :

#!/bin/sh

if [ $# -eq 2 ]; then // # si le nombre d'arguments est égal à 2 :

rep="." //# variable rep vaut le repertoire courant = "."

droit=$1 //# variable droit vaut le premier argument

$1 ext=$2 // variable ext vaut le deuxieme argument $2

elif [ $# -eq 3 ]; then //# si le nombre d'arguments est égal à 3 :

rep=$1 // variable rep vaut le premier argument

$1 droit=$2 // variable droit vaut le deuxieme argument $2

ext=$3 // variable ext vaut le troisieme argument $3

else

echo "erreur : donnez 2 ou 3 arguments" 1>&2

exit 1

fi

for fich in "${rep}"/*"${ext}"; do //pour chaque fichier "fich" dans rep/*ext:

chmod g$droit "$fich" // changer le droit du groupe "g" sur "fich"

echo $fich

done

Exercice 7 – L'instruction case


Écrire un programme shell qui efface un fichier après avoir demandé confirmation à

l'utilisateur. Le programme doit recevoir en paramètre le ou les noms du/des fichier(s) à effacer.

Pour chaque fichier, il demande alors à l'utilisateur : « Voulez-vous réellement effacer le fichier xxx

? ». Si la réponse est oui, le programme affiche « suppression confirmée », et efface le fichier. Si la

réponse est non le programme affiche « suppression abandonnée ». Dans les autres cas, le

programme affiche « réponse invalide » et repose la question à l'utilisateur.


#!/bin/sh

while [ $# -ne 0 ]; do // tant que le nombre d’arguments non égale 0

fich=$1; shift // donné le paramétre 1 à la variable fich

repeat=1 //variable repeat initialiser 1 « compteur »

while [ $repeat -eq 1 ]; do // tant que la valeur egale à 1

echo "Voulez-vous reellement effacer le fichier \"$fich\" ?" //Message demande

read reponse //scanf « ecrire »

case "$reponse" //vérifier la réponse

in [Oo][Uu][Ii]) // accepter tte caractères soit majuscule /miniscule

rm "$fich"// remove fichier

echo "suppression confirmée" //Message confirmation

repeat=0 ;; //compteur=0

[Nn][Oo][Nn]) // tte caractères soit majuscule /miniscule

echo "suppression abondonnée" // afficher message d’abandonnement

repeat=0 ;; *) // compteur=0

echo "reponse invalide" ;; //afficher message

esac // fermer case

done // fermer 1er while

done //fermer 2 eme while

Exercice 8 – La commande basename


On voudrait écrire un script permettant de facilement changer de façon
systématique l'extension d'une série de fichiers. On souhaite par exemple
renommer tous les fichiers .htm du répertoire courant en .html La syntaxe de
notre script rename serait alors la suivante : rename .htm .html On vérifiera
que le nombre d'arguments reçu est correct, que toutes les opérations sont
licites et correctement effectuées.

#!/bin/sh

if [ $# -ne 2 ]; then // si nbr argument non égale 2

echo "erreur : donnez 2 arguments." 1>&2 // afficher message


exit 1 //false

fi

vieux=$1 // stocker vieux dans parametre 1

nouveau=$2 // stocker nouveau dans parametre 2

for fich in *"${vieux}"; do // (fich : nom fichier / vieux : variable stocké dans chaine)

base=`basename "$fich" "$vieux"` //extrcation du nom de fichier et le stocker dans base

mv "$fich" "$base$nouveau" // renommer le fichier

if [ $? -ne 0 ]; then // vérifier code sortie si non égale à zéro  échouer

echo "je ne peux pas renommer \"$fich\" en \"$base$nouveau\"" 1>&2 //message échouer

fi

done

Exercice 9 – Guillemets, quotes ou back quotes ?


Écrire un programme shell qui commence par afficher « Entrer le nom d'un répertoire : »
puis lit le nom (relatif ou absolu) d'un répertoire (commande read). Le programme affichera
ensuite le texte « Le répertoire xxx contient les fichiers suivants : » suivi de la liste des
fichiers contenus dans le répertoire.
1) Ecrire une première version dans laquelle xxx est le nom du répertoire reçu en argument.
2) Ecrire une seconde version dans laquelle xxx correspond au chemin absolu du répertoire
entré par l'utilisateur, même si celui-ci est donné en relatif. On suppose toutefois que le
répertoire donné en paramètre se trouve dans le répertoire courant (inutile d'effectuer une
recherche dans toute l'arborescence).
Le script devra en plus afficher un message d'erreur adéquat dans les cas suivants :
• si le script n'est pas appelé avec le bon nombre d'arguments,
• si le nom entré par l'utilisateur n'est pas un répertoire,
• si c'est un répertoire non lisible.

1) #!/bin/sh
echo "Entrer le nom d'un répertoire : "
read dir
echo "Le répertoire $dir contient les fichiers suivants :"
ls "$dir"

Vous aimerez peut-être aussi