Introduction aux systèmes d`exploitation TP 5 – script bash 1 Le

Transcription

Introduction aux systèmes d`exploitation TP 5 – script bash 1 Le
Introduction aux systèmes d’exploitation
TP 5 – script bash
1
Le premier Script
Un script bash est un fichier texte, qui commence toujours par
#!/bin/bash ou #!/bin/sh,
et qui doit être rendu exécutable pour pouvoir s'exécuter.
Exercice 1:
1. Ouvrez votre éditeur de texte préféré et copiez-y les lignes ci-dessous que vous
enregistrerez dans le fichier mon_script.sh :
#!/bin/bash
echo "Bonjour"
2. Exécutez ce fichier en tapant : ./mon_script.sh
Remarque : pour inclure des commentaires dans votre script, vous devez faire précéder la
ligne du symbole #.
2
Interprétation d’une ligne de commande
bash découpe normalement les lignes de commande aux caractères « espace ». Ainsi la ligne
cat fic1 fic2 fic3
est découpée en
cat
fic1
fic2
fic3
Un certain nombre de caractères sont spéciaux pour bash :
Caractères
Exemple
{ }
ba{ba,bu} → baba babu
\
\"\’\$\{\ \A B → "’${ A B
$
$HOME → /home/roger
${...}
${HOME} → /home/roger
${HOME#/home} → /roger
${HOME%ger} → /home/ro
$(...)
$(which true) → /bin/true
`...`
`which true` → /bin/true
$((...))
$((12 + 4 * 2)) → 20
3
"..."
" a $HOME $((1+1)) ' " →
a /home/roger 2 ’
'...'
' a $HOME $((1+1)) " ' →
a $HOME $((1+1)) "
Variables et paramètres
On peut définir des variables locales dans le script par MA_VARIABLE='truc', et pour les
manipuler il faut les préfixer du symbole $, par exemple :
#!/bin/bash
message='Bonjour'
echo $message
Pour initialiser et pour utiliser un tableau en bash, voici la syntaxe :
mon_tableau[index]=variable # instanciation
${mon_tableau[index]} # appel d'un élément
${mon_tableau[*]} # appel de l'ensemble du tableau
L'index du tableau doit être un nombre.
Exemple :
#!/bin/bash
nom[0]='Bonjour'
nom[1]='Monsieur'
echo ${nom[0]} #affiche 'Bonjour'
echo ${nom[*]} #affiche 'Bonjour Monsieur'
Exercice 2 :
Utiliser la commande echo pour écrire les lignes suivantes :
A B
L’ensemble {1, 2, 3} est inclus dans N Elle s’écria : "Ciel mon mari !"
$HOME = /home/roger
10 * 2 = 20
où /home/roger est la valeur de la variable HOME et 20 est le résultat de l'évaluation de la
multiplication de 10 par 2.
4
Tests
Le TP2 introduisait l’utilisation de && et || pour enchaîner des commandes de façon
conditionnelle. De façon plus générale, on peut écrire :
if cmd ; then cmd1 ; cmd2 ; ... ; else cmd3 ; cmd4 ; ... ; fi
qui exécute la commande cmd puis :
 exécute cmd1 ; cmd2 ; ... ; si la valeur de retour de cmd est 0 ;
 exécute cmd3 ; cmd4 ; ... ; dans les autres cas.
Il existe trois commandes très particulières que l’on peut utiliser comme cmd :
 true cette commande réussit toujours (donc renvoie la valeur 0) ;
 false cette commande échoue toujours (donc renvoie la valeur 1 ) ;
 test cette commande permet d’effectuer de nombreux tests ;
test fait partie des commandes qui sont directement interprétées par bash. La syntaxe des
opérations possibles est donc donnée dans la page de manuel de bash dans les explications de
test mais aussi dans l’explication sur les expressions de conditions.
Voici trois exemples pour expliciter l’utilisation de la commande test :
 if test ­f mon_fichier; then
echo "le fichier existe"
fi
 if [ ­f mon_fichier ]; then
echo "le fichier existe"
fi
 if [ ./ma_commande ]; then
echo "la commande s'est terminée avec succès"
fi
Remarque : il faut toujours ajouter un espace après le crochet ouvert « [ » et avant le crochet
fermé « ] », sinon erreur de syntaxe.
Quelques comparaisons utiles :
 -f teste l'existence d'un fichier
 -d teste l'existence d'un répertoire
 -x teste si le fichier existe et est exécutable
 -r teste si le fichier existe et est ouvert en lecture
 -w teste si le fichier existe et ouvert en écriture
 -s teste si le fichier existe et a une taille supérieur à 0 octet
5
Structures conditionnelles imbriquées
if cmd ; then cmd1 ; elif cmd2 ;then cmd3;else cmd4;fi
6
6.1
Structures itératives
La boucle for :
for variable in liste_de_cas ; do cmd ; done
for (( expr1 ; expr2 ; expr3 )) ; do cmd; done
On utilise fréquemment for pour énumérer des noms de fichiers, comme dans cet exemple :
for fichier in /etc/rc*
do
if [ ­d "$fichier" ]
then
echo "$fichier (repertoire)"
else
echo "$fichier"
fi
done
Lorsqu'on veut passer une liste on écrit la liste sans parenthèse, les noms les uns à la suite des
autres. En revanche une commande utile lorsqu'on désire faire une simple boucle sur une liste
de valeurs entières est la fonction ''seq'' qui prend en arguments 2 entiers et renvoie la liste de
tous les entiers compris entre ces 2 bornes.
6.2
La boucle while :
while comd1; do cmd2; done
Exemple:
i=0
while ((i <= 10))
do
echo $i
((i += 1))
done
Exercice 3 : if
1. Ecrire un script bash qui vérifie si le fichier « Fichier1 » existe, si oui il le renomme en
« Fichier2 » sinon il affiche, « Fichier1 n’existe pas ».
2. Ecrire un script bash qui vérifie si le répertoire « Test » existe, si oui il affiche
« répertoire existant » sinon « répertoire inexistant ».
3. Ecrire un script bash qui teste deux entiers nb1 et nb2 et affiche « nb1 est supérieur à
nb2 » si c’est le cas et « nb1 est inférieur ou égal à nb2 » sinon.
4. Ecrire un script bash qui permet de vérifier si deux chaînes sont identiques
(prenez par exemple S1="Bash" et S2= "Script"). Essayer ensuite avec S1=''Bash" et
S2= "Bash*".
5. Un script est une commande qui peut récupérer son nom dans la variable '$0', et les
paramètres passés ensuite sont stockés dans les variables '$1', '$2', … Grâce à ces
variables spécifiques, réécrivez les exercices précédents en passant en paramètres du
script le(s) nom(s) (ou les valeurs) sur le(s)quel(s) on fait les tests.
Exercice 4 : for et while
Dans les questions suivantes vous écrirez le script de 2 manières différentes, une avec la
commande 'for' et l'autre avec la commande 'while'.
1. Ecrire un script bash qui permet d’afficher à l’écran les nombres de 4 à 10
2. Même que 1, mais de 10 à 2
3. Ecrire un script bash qui multiplie par 2, les entiers de 1 à 5
4. Ecrire un script bash qui crée un tableau de 3 éléments, et afficher le contenu du
tableau avec une boucle for
5. Reprendre les questions 1 et 2 et écrire un seul script qui affiche la séquence de
nombre comprise entre les valeurs passées en arguments de votre commande.
Exercice 5
1. Ecrire un script bash qui permet d’afficher tous les fichiers d’extension '.txt' du
répertoire courant.
2. Ecrire un script bash qui permet d'afficher tous les fichiers qui vous appartiennent et
qui ont comme extension '.txt'. Vous donnerez en plus le nombre de fichiers. Vous
gérerez les fichiers dont le nom comporte un ou plusieurs espaces.
Exercice 6
1. Ecrire un script bash qui remplace tous les fichiers ayant l’extension .JPG dans votre
répertoire courant par l’extension .jpg. Les noms des fichiers ne comporteront pas
d'espace.
2. Réécrire un script bash qui permet de renommer aussi les fichiers ayant un espace
dans leur nom.

Documents pareils