T.P. groupe SLAM initiation aux scripts Bash.
Nous avons déjà travaillé sur des scripts Bash.
Il s'agit de fichiers texte qui débutent par
#!/bin/bash
et qui doivent être rendus exécutables.
Respectez les noms et la numération proposée.
On peut définir des variables dans le script de la manière suivante :
variable = "toto"
pour les manipuler il faut les préfixer par un
$
On peut utiliser la commande
echo pour afficher les variables.
Exemple :
#!/bin/bash
variable="Bonjour"
echo $variable
Travail à faire : créer ce premier script avec nano, enregistrez le, modifiez les droits pour le rendre exécutable, testez.
Pour insérer des commentaires, utilisez le symbole
#.
Nom du script :
prog1
Il est possible en bash de récupérer le résultat d'une commande.
Exemple liste=$(ls -al)
Travail à faire :
Testez.
Modifier le script réalisé ci-dessus (prog1), en utilisant la commande
whoami pour afficher Bonjour suivi du nom de l'utilisateur.
Nom du script à produire :
prog2
Un script bash peut recevoir des paramètres, exemple avec la commande
ls
ls Nomdunrépertoire
Testez le script suivant :
#!/bin/bash
fichier=$1
nbl=$(wc $fichier –l)
echo “Le fichier contient $nbl lignes”
exit 0
Nous rencontrons un problème d'affichage, il ne faut récupérer que le premier champ.
Il faut par exemple utiliser la commande
cut.
c.f. la commande cut.
Travail à faire :
Modifiez le script pour obtenir un affichage correct.
Nom du script à produire :
prog3
Instructions « if »
Mode d'emploi
if [ condition ] ;
then
else
fi
Expression des conditions :
Pour les variables numériques :
if (( $x == $y))
then …
Pour les chaines de caractères : if [[ "$nom" == ’Dupond’ ]]
then …
(attention : espace après [[ et avant ]] )
Travail à faire :
Modifier le script avec l'instruction whoami pour vérifier en début de script que l'utilisateur se trouve dans son répertoire (/home/nomdelutilisateur), sinon lui afficher un message d'erreur.
Nom du script à produire :
prog4
Script de sauvegarde.
En vous aidant de ce qui a été fait précédemment, écrire un script qui traite le cas d’utilisation suivant :
1. L’utilisateur lance le script avec un nom de fichier en paramètre
2. Le système vérifie que l’utilisateur est dans son répertoire personnel
3. Le système crée une sauvegarde de l’objet sous le nom « nom.save »
4. Le système affiche un message de confirmation.
Scénarios alternatifs :
2.a Si l’utilisateur n’est pas dans son répertoire, le système affiche un message d’erreur et s’interrompt.
3.a Si le fichier est inexistant, le système affiche un message d’erreur.
Pour déterminer si un fichier est présent, on utilisera la commande (attention à la syntaxe exacte)
if [ -f "$nomfichier" ];
then
…
else
…
fi # finsi
Nom du script à produire :
prog5
Que va-t-il se passer si l'utilisateur donne un répertoire au lieu d'un fichier ?
Pour déterminer si un nom correspond à un dossier, on utilisera la commande (attention à la syntaxe exacte)
if [ -d "$nom" ];
Travail à faire : Modifier le script précédent pour qu'il puisse traiter les fichiers et/ou dossier.
Nom du script à produire :
prog6
Pour terminer vous pouvez réaliser la sauvegarde en compressant le fichier en utilisant la commande
zip.
Modifier le script pour qu'il propose la compression en option.
Nom du script à produire :
prog7
L'ensemble du travail devra être rendu via Internet sur le site
http://btsio.net
Des informations complémentaires seront écrites au tableau.
Le travail doit être rendu avant la fin des deux heures pour les présents.
Pour les absents il doit être réalisé avant vendredi soir.
A vous de demander à vos camarades ou à moi les informations nécessaires.
La date et l'heure de rendu du travail est celle donnée par le serveur.
Liens à consulter :
Manipuler les chaines de caractères.
La commande cut.
Commandes complexes (pour information).