Exercices Bash

Remplacements

Objectifs : Manipuler les chaines de caractères, comprendre la notion d'entrée et de sortie standard
Durée : 5min
Difficulté : Facile

Consigne
Ecrire une commande qui permet d'écrire le résultat d'une commande echo dans un fichier texte en remplacant tous les espaces qu'il contient par des _

Minimum et maximum

Objectifs : Manipuler les principales structures, effectuer des comparaisons
Durée : 30min
Difficulté : Moyen

Consigne
Créer deux fonctions : la première cherche et affiche le minimum d'une liste de nombre passée en paramètre. La deuxième affiche le maximum.

Créer une corbeille

Objectifs : Créer des fonctions, Manipuler les fichiers
Durée : 30min
Difficulté : Difficile

Consigne
Le but de cet exercice est de réaliser un mécanisme de corbeille qui permet de supprimer un fichier et de le restaurer. Pour cela :

  • Créer une fonction del qui permet d'archiver le fichier passé en paramètre dans un dossier que l'on appelera la corbeille et qui surppime le fichier.
  • Créer une fonction undel qui restaure le fichier archivé et qui supprime l'archive de la corbeille.
  • Créer une fonction listdel qui liste les fichiers de la corbeille.
  • Créer une fonction purgedel qui vide la corbeille.
Deviner un nombre

Objectifs : Manipuler les principales structures, effectuer des comparaisons, lire l'entrée standard
Durée : 30min
Difficulté : Moyen

Consigne
Créer un jeu qui permet à l'utilisateur de deviner un nombre compris entre 0 et 100 en effectuant moins de 10 propositions. Pour chaque proposition, le système indique à l'utilisateur si le nombre qu'il a proposé est trop petit ou trop grand.

Nombre de fichiers et de dossiers d'un répertoire

Objectifs : Manipuler le FileSystem, itérer sur des fichiers
Durée : 10min
Difficulté : Facile

Consigne
Réaliser un script qui permet de compter le nombre de fichiers et de répertoires dans un répertoire donné. Le résultat est affiché dans la sortie standard

Nombres aléatoires pairs

Objectifs : Manipuler les principales structures, faire des calculs
Durée : 15min
Difficulté : Facile

Consigne
Réaliser un script qui permet de générer dans la sortie standard 20 nombres aléatoires pairs. Indication : la variable $RANDOM contient un nombre aléatoire

Numéroter les lignes d'un fichier

Objectifs : Lire l'enstrée standard
Durée : 15min
Difficulté : Moyen

Consigne
Le but de cet exercice est de numéroter les lignes d'un fichier qui est lu dans l'entrée standard. Il y a deux facons d'appeler le script : soit le nom du fichier est pris en argument soit l'entrée standard est utilisée.

Expressions régulières

Objectifs : Comprendre la syntaxe des expressions régulières
Durée : 10min
Difficulté : Facile

Consigne
Donner le motif qui correspond à une adresse IP. Une adresse IP est de la forme suivante : 255.255.0.1 ou bien 127.0.0.1, son format est donc le suivant : Un à trois chiffres, point, un à trois chiffres, point, un à trois chiffres, point, un à trois chiffres.

Consigne
Donner l'expression régulière qui correspon à une date sous la forme « 29 février 2012 ». Une date au format 29 février 2012 suit le motif suivant : un ou deux chiffres, un espace, un nombre indéfini de lettres, un espace puis quatre chiffres.

Outil de terminal serveur

Objectifs : Utiliser le système de fichier, manipuler les principales structures, gérer les droits
Durée : 1h
Difficulté : Difficile

Partie 1 : le client
Nous allons créer un outil permettant à une utilisateur connecté sur un poste de travail A d'exécuter des commandes sur un poste de travail B. Pour cela, on commence par créer un dossier partagé dans lequel les informations seront échangées.

  • Le client attend les instructions de l'utilisateur
  • Une fois une instruction entrée, il créé un fichier contenant la commande a éxécuter dans le répertoire d'échange (fichier nommé actions_<idep>.ksh)
  • Le client se met en attente du fichier reponse_<idep>.txt
  • Une fois ce fichier arrivé, le client affiche son contenu et le supprime
  • Enfin, il se remet en attente des insctructions de l'utilisateur

Partie 2 : le serveur

  • Le serveur attent qu'un fichier actions_<idep>.ksh soit créé dans le répertoire d'échange
  • Une fois que ce fichier est créé, il exécute la commande contenue dans ce fichier, et enregistre le résultat de la commande dans le répertoire échange sous la forme : reponse_<idep>.txt
  • Il supprime le fichier actions_<idep>.ksh et se remet en attente de ce fichier
awk : taille moyenne, nombre de fichiers

Objectifs : Utiliser awk, rediriger l'entrée standard
Durée : 30min
Difficulté : Difficile

Consigne
Déterminier avec awk la taille moyenne et le nombre de fichiers d'un répertoire donné. Le script awk à écrire sera placé derrière la commande ls -l.

Jeu type Motus

Objectifs : Utiliser les structures, lire l'entrée standard, manipuler les chaines de caractèrs
Durée : 1h30
Difficulté : Difficile

Consigne
Réalisez un jeu qui permet à l'utilisateur de découvrir un mot comme dans motus:

  • Le système affiche uniquement la première lettre du mot et remplace les autres lettres par des «_». Exemple avec le mot MAISON : M _ _ _ _ _
  • Le système propose alors à l'utilisateur d'entrer une propostion.
  • Le système compare la proposition de l'utilisateur avec le mot mystère, toutes les lettres de la proposition qui sont bien placées sont alors affichées : par exemple M _ I S _ _ et le système propose alors à l'utilisateur d'entrer un nouveau mot.
Messagerie instantanée

Objectifs : Utiliser les structures, réaliser des sémaphores, accéder au système de fichiers
Durée : 1h
Difficulté : Difficile

Consigne
Réaliser une application de messagerie instantanée. Deux programmes tourneront en parallèle :

  • le permier permettra d'ajouter une ligne saisie par l'utilisateur dans un fichier texte (en s'assurant qu'aucun autre utilisateur n'écrit dans le fichier texte)
  • le second permettra d'afficher le fichier texte en le mettant à jour automatiquement lorsque celui-ci aura été modifié.
Tracer une courbe

Objectifs : Utiliser les principales structures awk
Durée : 1h
Difficulté : Difficile

Consigne
Le but de cet exercice est de tracer la courbe du cosinus dans une fenêtre shell comme dans l'exemple ci dessous avec l'axe des abscisses vertical : Pour cela, nous allons utiliser awk.

Courbe cosinus sous awk
Affichage de fichier

Objectifs : Créer une commande, manipuler le système de fichier, créer des options
Durée : 45min
Difficulté : Moyen

Consigne
Créer un script qui permet d'afficher un fichier passé en paramètre. Ce script reconnaitra les options suivantes :

  • -n : les lignes seront numérotées
  • -h nb : seules les nb premières lignes seront affichées
Erreurs à corriger

Objectifs : Identifier les erreurs de développement
Durée : 20min
Difficulté : Facile

Maladresse 1

cat fichier.txt | grep '7:'

Maladresse 2

for f in $(cat file)
do
	commande "$f"
done

Maladresse 3

if [ $S_ESPEXE = I ]
then
	partage_ihm=Recette
else
	if [ $S_ESPEXE = A ]
	then 
		partage_ihm=Developpement
	else
		if [ $S_ESPEXE = S ]
		then
			partage_ihm=Integration
		else
			partage_ihm=Production
		fi
	fi
fi

Maladresse 4

ps -l | grep -v 'STATE' | awk '{print $2}'

Maladresse 5

admsnap activate -s $sess | grep hdiskpower | awk '{print $6}' | sed 's/\/dev\/r//' | sed 's/\.//' 

la commande admsnap activate -s $sess est à remplacer par echo 1 2 3 4 5 /dev/r/hdiskpower12.1

Maladresse 6

cd $repertoire
while true
do
echo entrer le nom du fichier à afficher
read fichier
	cat $repertoire/$fichier
done

Maladresse 7

for f in $(ls *.txt)
do
	cat $f
done

Maladresse 8

function f {
	...
	cd /dev/fs/D/dossier
}

Maladresse 9

ls $dossier | head –1 | read var

Maladresse 10

fichier="/dev/fs/C/fichier 1.txt"
ls $fichier

Maladresse 11

commmande | grep '..*' | wc -l
Quizz sur les étapes d'interprétation

Objectifs : Étapes d'interprétation de la ligne de commande
Durée : 20min
Difficulté : Difficile

Que se passe-t-il 1 ?

alias f="echo alias"
function f {
	echo fonction
}
f

Que se passe-t-il 2 ?

alias ls=ps
alias ll="ls -l"
ll

Que se passe-t-il 3 ?

alias a=ls
function ls {
	echo fonction
}
a

Que se passe-t-il 4 ?

function f {
	echo a
}
alias a=ls
$(f)

Que se passe-t-il 5 ?

alias a=ls
var=a
$var

Que se passe-t-il 6 ?

alias a='$var'
var=ls
a

Que se passe-t-il 7 ?

script1.ksh
echo script1
exit 0
Dans un autre script :
./script1.ksh

Que se passe-t-il 8 ?

var1=ok
var2='$var1'
echo $var2

Que se passe-t-il 9 ?

script1.ksh

cd /
Dans l'invite de commande :
cd /etc
script1.ksh
pwd

Que se passe-t-il 10 ?

var="> fichier.txt"
echo texte $var

Que se passe-t-il 11 ?

alias var='ok'
echo var 
Analyse d'un fichier avec awk

Objectifs : Utiliser awk, traiter un fichier, utiliser les expressions régulières
Durée : 1h
Difficulté : Difficile

Consigne
A l'aide du fichier annuaire.txt suivant :

Prénom NOM Date-de-naissance Sexe Numéro-de-telephone
Georges TARTEMPION 12 02 1967 M 038898422524
Adrien DUBOUCHON 27 11 1938 M 0154896372
Ludwig SCHMILLBLEERCK 28 12 1957 M 0258459887
Antonio VAVILDA 16 05 1937 M
Hughes CARPETTE 08 11 1958 M 0123568629
J'en ai assez de ce travail fastidieux!
Dagobert ELOY 14 07 1947 M 0225415487

Anatole SUISSE 01 02 1965 n 4
Antonino SZWPRESWKY 16 05 8937 M 0298358745

Créer un script awk qui créé un annuaire au format html :

<h1>Annuaire</h1>
<p>
<b>Mr Georges TARTEMPION</b>
<br />
né le : 12/02/1967
<br />
tel : 038898422524
<br />
mail : georges.tartempion@insee.fr
</p>

Les lignes vides ou mal formés ne seront pas affichées.

Analyse d'un fichier avec sed

Objectifs : Utiliser sed, taiter un fichier, utiliser les expressions régulières
Durée : 1h
Difficulté : Très difficile

Consigne
Même exercice que Analyse d'un fichier avec awk mais avec sed sauf la gestion des minuscules/majuscules (trop long pour être traité)

Jeu de nim

Objectifs : Manipuler les chaines de caractère, manipuler les principales structures, lire l'entrée standard
Durée : 1h
Difficulté : Difficile

Consigne
Créer un script qui permet de jouer au jeu de nim : Quinze alumettes sont posées, chaque joueur à tour de rôle choisit de une à trois alumettes et les retire. Le joueur qui tire la dernière alumette a perdu.

  • Créer une fonction qui permet d'afficher autant de « | » que d'alumettes restantes
  • Au démarrage d'une partie le nombre d'alumettes est initialisé à 15 dans une variable alumettes_resantes.
  • Créer une fonction qui permet de retirer de une a trois alumettes de ce nombre, le nombre à retiré est passé en paramètre
  • Créer une fonction qui permet a l'ordinateur de retirer un certain nombre d'alumettes selon la règle suivante : une fois que l'ordinateur a joué, le reste de la division euclidienne du nombre d'alumettes restantes par 4 devra être 1. Si cela n'est pas possible, l'ordinateur prend 3 alumettes
Procesus

Objectifs : Gerer les processus, utiliser les signaux
Durée : 1h
Difficulté : Difficile

Partie 1. Création du script
Créer un script qui incrémente une valeur toute les 5 secondes et affiche la valeur dans un fichier texte de sortie. Ce script peut être interrompu a l'aide d'un Ctrl+C, mais dans ce cas là, le fichier de sortie doit être supprimé. Lorsqu'une réinitialisation est demandée, le compteur repart à 0.

Partie 2. Lancement du processus
Lancez le processus en arrière plan et tester la réinitialisation et l'arrêt avec Ctrl+C (sans utiliser de kill).

Chat avec interface Graphique

Objectifs : Gestion des processus, appel de java, notion de sémaphores
Durée : 45min
Difficulté : Difficile

Consigne
Le fichier chat.jar contient une interface graphique qui permet de lancer une application de chat. Deux exécutables sont dans ce jar :

  • AffichageFichier permet d'afficher la conversation ; le path vers le fichier contenant la conversation est donné en argument au programme.
  • ChampTexte permet de demander à l'utilisateur d'entrer un texte. Lorsque le texte est entré par l'utilisateur, celui-ci est affiché dans la sortie standard. Je nom d'utilisateur est passé à l'aide d'un -DnomUtilisateur.

Ecrire un script shell qui permet de piloter ces deux applications pour réaliser une application de chat. Il faudra veiller à détruire tous les processus créés par ce script.