TP SHELL BASH sous Linux

publicité
TP SHELL BASH sous Linux
TP 2 CPI1 initiation OS
Rappels Les shells
Ce sont des programmes ayant plusieurs fonctions:


dialogue avec les utilisateurs : lancement des commandes, arrêt et redémarrage,
gestion d'un historique, d'éditions de commandes, de synonymes, de fonctions.
programmation de séquence de commandes. On dispose de variables, de structures de
contrôle, et de toutes les commandes standard Unix (expr, test, sort, grep, awk, sed, tr,
diff, comm, cmp, wc, head, tail, cut, paste, ...)
Il y a 2 familles:


les shells de type Bourne (sh, zsh, bash)
et les shells de type C-shell (csh, lcsh, tcsh). La syntaxe de ces derniers est inspirée de
la syntaxe du C.
Lancement
En interactif, le comportement est différent selon que c'est un shell de login (= de démarrage)
ou non.

sh
lit .profile quand il est shell de login, rien sinon
Appel
Ce peut être un appel:


à la main:
$ sh mon/fichier
o
o
o
o
o
o
le texte est mis dans un fichier
que l'on rend exécutable: chmod +x ...
dont la première ligne référence le bon interpréteur:
#!/bin/sh
#!/usr/local/bin/bash
et on appelle alors le fichier par son nom.:
1
.
Caractères spéciaux
Règle : chaque ligne subit des substitutions puis est interprété conformément à la syntaxe du
shell.
Classe 1
On se base ici sur la liste des noms de fichiers (résultat de la commande ls):



? : ce caractère peut remplacer un seul caractère. Exemples:






* : toute suite de caractères ne commençant pas par un . (lire : un point). Exemple:
echo a.?ex
for i in a.???




echo
echo
echo
echo
echo
*
.*
.??*
*.*
*.???
[a-z] ou [st] : un caractère de la liste. Exemple:
echo *.[st]*
grep mot *.[ch]
read var lit une variable sur l'entrée standard.
Exemple
Echo ‘entrez un nombre’
read x
echo $x
2
les protections : à tester

'
: ce qui est entre apostrophes n'est pas interprété. Exemple: echo '*'

"
: ce qui est entre guillemets est interprété mais reste un seul mot. Exemple:
a=toto
echo "D$a"
echo D$a
echo 'D$a'
echo D*
echo "D*"

`
: ce qui est entre apostrophes inverses est remplacé par le résultat de la commande:
echo date
echo `date`
echo `ls –l `
a=`wc -l fichier`
Test – Manipulation de chaines de caractères
Sélection de caractères dans une chaîne
Le shell bash propose un certain nombre d’outils simples pour manipuler une
chaîne de caractères.
Ainsi, si une variable var1 a pour valeur : abdefghijkl,
alors on peut récupérer certaines de ses sous-chaînes avec les commandes
suivantes :
–
–
–
–
echo ${#m}
echo ${m:4}
echo ${m:4:3}
echo ${m#ab}
echo ${m%ijkl
Les redirections
Pour un shell, tout process a



une entrée standard (stdin de numéro 0),
une sortie standard (stdout de numéro 1),
une sortie d'erreur (stderr de numéro 2).
Par défaut, l'entrée standard est le clavier, la sortie standard et la sortie d'erreur sont l'écran.
Mais on peut rediriger:
3





process < file: lance un process avec en entrée standard le contenu du fichier.
process > file : lance le process avec en sortie standard le fichier. Ce fichier est détruit
au lancement.
process >> file : lance le process avec en sortie standard le fichier mais on concatène
au fichier s'il existe déjà.
p1 | p2 : la sortie de p1 devient l'entrée de p2.
p1 <<MotADefinir : met sur l'entrée standard ce qui vient dans le shell jusqu'à la
ligne MotADefinir.

cat <<FinDuFinduTexte
Ceci est le FinduTexte.
La suite.
FinDuFinduTexte
date
# commande executee




process 2>file redirige la sortie d'erreur
process 2>&1 concatène la sortie d'erreur à la sortie standard. Exemple:
commande >file 2>&1
commande 2>&1 >file
# bon
# mauvais
Constantes, types de données
Il n'y a pas de constante, tout en shell est chaîne de caractères.
4
1. Introduction
Il faut déclarer l'emplacement de l'interpréteur dans l'entête du script :
#!/bin/bash
Quand on lance un script, on peut utiliser quelques variables :
Les variables utiles dans la programmation SHELL
Variable
Description
$1,$2,...,$n Les paramètres sont passés ./script variable_1 variable_2 variable_n
$@
Liste des paramètres
$#
Nombre de paramètres
$$
Donne le n° du script (PID)
$0
Le nom du script
$?
Valeur de retour du script (ou d'une fonction)
Testez le script suivants :
2. Structure de contrôle
Exemple :
#!/bin/bash
echo -n "Entrez un nombre :"
read nombre
case $nombre in
# Si $nombre = 1
1)echo "Vous avez tapé 1";;
# Si $nombre = 2
2)echo "Vous avez tapé 2";;
# Pour le reste des valeurs de $nombre
*)echo "Vous n'avez tapé ni 1 ni 2";;
esac
S1-case.txt
5
3. Boucle for
Exemple :
#!/bin/bash
for i in *
do
echo $i
# $i va prendre comme valeur le nom de chaque fichier
done
S2-for1
#!/bin/bash
for i in 'cat liste' ; do
ls $i
done
#!/bin/bash
# for ((initial;condition;action))
for ((i=0;i<10;i=i+1))
# $i = 0 au début
# A chaque boucle, il s'incrémente (i=i+1)
# Il sort de la boucle lorsque la valeur n'est plus bonne (i<10)
do
echo $i
done
S2-for2
4. if, then, elif, fi
Exemple :
#!/bin/bash
echo "Entrez un nombre :"
read nombre
if [$nombre == 1]
then
echo "Vous avez tapé 1"
elif [$nombre == 2]; then
echo "Vous avez tapé 2"
else
echo "Vous n'avez tapé ni 1 ni 2"
fi
S3-if
6
5. Let
Initialisation (ajouter 1 à i) :
#!/bin/bash
let i=i+1
let "i = i + 1"
6. Read
Lecture d'une valeur au clavier :
#!/bin/bash
echo -n "Entrez votre nom :"
read nom
echo $nom
7. Select
!/bin/bash
select CHOIX in "Choix A" "Choix B";
do
case $REPONSE in
1) echo "$CHOIX --> $REPONSE";;
2) echo "$CHOIX --> $REPONSE";;
*) echo "Vous avez tapé n'importe quoi !";;
esac
done
Le n° du choix est affecté à la variable $REPONSE. Le nom du choix à la variable $CHOIX.
8. Test
Test sur les fichier :



-d si c'est un répertoire
-e si le fichier existe
-f si le fichier existe et c'est un fichier standard
Exemple :
#!/bin/bash
if [ -d $1 ]; then
echo "$1 est un dossier"
fi
Test sur les chaînes :


s1 == s2 : si les chaînes s1 et s2 sont identiques
s1 != s2 : si les chaînes sont différentes
7
Test sur les entiers :






n1
n1
n1
n1
n1
n1
-eq n2 : si n1 est égal à n2
-ne n2 : si n1 n'est pas égal à n2
-gt n2 : si n1 est supérieur à n2
-ge n2 : si n1 est supérieur ou égal à n2
-lt n2 : si n1 est inférieur à n2
-le n2 : si n1 est inférieur ou égal à n2
9. Répéter jusqu'à ...
Exemple :
#!/bin/bash
a=0
until [ $a == 10 ]; do
let a=a+1
echo $a
# On sort de la boucle uniquement quand la condition sera vrai ($a == 10)
done
10. Tant que...
#!/bin/bash
while [ $a -lt 10 ]; do
let a=a+1
echo $a
# On sort de la boucle uniquement quand la condition n'est plus vrai ($a lt 10)
done
8
2.Exercices
2.1. Fonction test
Ecrivez un script qui dit si le paramètre passé est :



un fichier
un dossier
n'existe pas
Ecrivez un script qui n'affiche que les répertoires
Ecrivez un script qui n'affiche que les fichier
Ecrivez un script qui donne le nombre de fichiers et de répertoires :
2.2. case
En utilisant la structure case, écrire un script qui :



affiche le menu
demande à l'utilisateur de saisir une option du menu
affiche l'option qu'il a choisie
2.3. for
En utilisant la structure for, écrire un programme qui donne les valeurs de Y d'une
fonction pour les valeurs de X allant de -10 à 10 avec un incrément de 1


Réalisez le traitement pour la fonction y=x^2
Adapter le script afin que les bornes -x et +x soient passées en paramètres au
script
2.4. Fonction until
En utilisant la structure until...do...done, écrire un script (until.sh) qui :



demande à un utilisateur de saisir une commande
exécute la commande ou affiche un message d'erreur si la commande ne s'est pas
déroulée.
répète cette opération tant que l'utilisateur le désire
9
2.5. Fonction while
En utilisant la structure while, écrire un script qui :
Tant que l'utilisateur n'a pas tapé 9 :



affiche un menu
demande à l'utilisateur de saisir une option du menu
affiche à l'utilisateur le résultat de sa commande
2.6. Fonction select
Vous allez à l'aide de la fonction select réaliser un menu à quatre options pour un
utilisateur.
Le script doit boucler tant que l'utilisateur n'a pas choisi de quitter.




Option 1 : Afficher la liste des utilisateurs connectés
Option 2 : Afficher la liste des processus
Option 3 : Afficher à l'utilisateur son noom, son UID, son GID, son TTY
Option 4 : Quitter
10
Téléchargement