1
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 le texte est mis dans un fichier
o que l'on rend exécutable: chmod +x ...
o dont la première ligne référence le bon interpréteur:
o #!/bin/sh
o #!/usr/local/bin/bash
o et on appelle alors le fichier par son nom.:
2
.
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:
echo a.?ex
for i in a.???
* : toute suite de caracres ne commençant pas par un . (lire : un point). Exemple:
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
3
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:
4
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 # bon
commande 2>&1 >file # mauvais
Constantes, types de données
Il n'y a pas de constante, tout en shell est chaîne de caracres.
5
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
1 / 10 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !