Cours Unix programmation Shell sous Unix (Bourne Shell)

Cours Unix programmation Shell sous Unix (Bourne Shell), tutoriel & guide de travaux pratiques en pdf.

Les instructions conditionnelles if et case

a ) La structure générale d’un bloc if
Le bloc else est facultatif.
if condition
then action 1; action 2
else action 3; action 4
fi
b ) La structure générale d’un bloc case
case $variable in
v1 ) action 1 ; ;
v2 | v3 ) action 2 ; ;
esac * ) action_autres_cas ; ;
c ) Expressions conditionnelles
Une expression conditionnelle est de la forme test expression ou [ expression ] dans laquelle expression est
 soit une comparaison entre valeurs numériques ou de type chaînes de caractères (voir ci-dessus opérations sur les variables)
 soit une condition relative aux fichiers et répertoires
Dans ce dernier cas, on trouvera par exemple if test -d $1 qui va permettre de savoir si le premier paramètre passé à la procédure est bien le nom d’un répertoire.
Il sera possible d’utiliser les tests suivants sur les répertoires et les fichiers :
-f $x
-d $x
-s $x
-r $x
-w $x
-x $x
pour savoir si $x est un fichier ordinaire
pour savoir si $x est un répertoire
pour savoir si $x existe et est non vide
pour savoir si $x existe et est accessible en lecture pour savoir si $x existe et est accessible en écriture pour savoir si $x existe et est accessible en exécution
 soit le nom d’une commande UNIX qui sera exécutée
La condition sera vraie si la commande renvoie un code retour à 0, elle sera fausse dans tous les autres cas.
exemple
if cc prog.c
then echo exécution correcte de la compilation
else echo Dommage, il y avait des erreurs
 Une condition peut toujours être niée par !
 Plusieurs conditions peuvent être combinées en utilisant -o (or) ou -a (and).

Les boucles de répétition

a ) Boucles For
 La première boucle de répétition est celle qui permet d’exécuter le même traitement pour tous les paramètres passés à la procédure. Elle a la forme suivante
for variable
do commande 1
commande 2
done
 Une autre forme de la boucle for est plus traditionnelle, elle ressemble à une boucle for avec incrémentation d’une variable de contrôle, mais comme ici toutes les valeurs sont de type chaîne de caractères, il n’y aura pas de valeur début et de valeur fin, il faudra tout simplement énumérer l’ensemble des valeurs possibles.
for i in jean alex paul
do
write $i <message.txt;
echo message.txt envoyé à $i
done
b ) Boucles While et until
 Les boucles while et until permettent de réaliser des boucles conditionnelles, contrôlées
– soit par le résultat d’une expression test
– soit par le compte-rendu d’exécution d’une commande UNIX (vrai si $? = 0)
… exactement comme nous l’avons vu pour l’instruction if.
Boucle while : cette boucle sera exécutée tant que le résultat de commande-condition sera 0 (vrai)
while commande-condition
do commandel
commande2
done
Boucle until : cette boucle sera exécutée tant que le résultat de commande-condition sera 1 (faux)
until commande-condition
do commandel
commande2
done
c ) Commandes true, false et test
– la commande true rend une valeur vraie; la commande false rend une valeur fausse
– test rend une valeur vraie si la condition est vraie
Exemple : attente du spool (répertoire /usr/spool/lp vide)
until test -f /usr/spool/lp/*
do sleep 10
done

Les mécanismes de substitution de chaînes de caractères

Le shell fournit plusieurs mécanismes permettant de substituer une expression par le résultat de son évaluation. Le plus simple est celui qui permet de remplacer une variable par son contenu ($LOGNAME remplacé par la valeur du de la variable LOGNAME par exemple), mais il en existe d’autres, en voici la liste :
Substitutions de variables
 expression textuelle remplacée par …
$variable valeur de la variable (ou chaîne vide)
${variable-xx} valeur de la variable
${var?} ou “xx” si variable non définie
valeur de la variable
${var?mes} message d’erreur si variable non définie
valeur de la variable
message “mes” si variable non définie
:${varl?} ${var2?} ${var3?} teste si var l … var3 sont définies
exemples :
demo@forum:~> echo ${varl-xx}
xx
demo@forum:~> :${PATH?} ${HOME?} ${var3?}
-bash: var3: parameter null or not set
demo@forum:~> :${PATH?Path non défini} ${HOME?Home non défini} ${var3? var3 non défini}
-bash: var3: var3 non défini
Noms de fichiers et expressions case multivaluées
 Dans les noms de Fichiers et les expressions “case”, il est possible de définir des noms ambigus en utilisant un ou plusieurs des caractères * et ?
Ainsi, dans un nom de fichier, ou une constante case, en lieu et place de…
* : toute suite de caractères convient
? : tout caractère (un seul) convient
[abcd] : l’un quelconque des caractères a,b,c,d convient
[A-K] : l’un quelconque des caractères entre A et K convient..
Récupération du résultat affiché par une commande
 Pour obtenir comme valeur de substitution le résultat (normalement envoyé sur la console) de l’exécution d’une commande, on placera cette commande entre 2 caractères’ (Alt Gr + 7). Entre ces 2 caractères, $ et * sont interprétés par le shell.
exemple : A = ` date +%Y ` affecte à A l’année de la date du jour
 Une autre écriture permet d’obtenir le même résultat avec bash : A= $( date +%Y )
Annulation des mécanismes de substitution
Il est quelque fois nécessaire de retirer à un caractère comme $ son effet de substitution, ne serait-ce que pour afficher ce caractère sur l’écran. Plusieurs mécanismes sont ici encore disponibles
\annule l’effet spécial du caractère qui le suit exemples: \$ \\ \? \{ \ » \’ \[ ou donne un sens particulier à un caractère (voir printf en C)
exemples : \t est un caractère de tabulation, \n saut de ligne  » entre guillemets, certains caractères sont interprétés :
$ $xx est interprété comme la valeur de la variable xx ` (AltGr + 7) ‘pwd’ est remplacé par le nom du répertoire courant
\\t est interprété comme le caractère de tabulation
‘ entre apostrophes (différent de altgr+7) tous les caractères sont considérés comme de simples caractères (aucune interprétation n’est réalisée par le shell)

A Programmation Shell sous Unix (Bourne Shell)
1 . Commentaires
2 . Les variables et expressions du shell
a ) Opérations sur les variables
L’affectation : opérateur =
La concaténation : par juxtaposition des expressions
Les expressions arithmétiques : utiliser expr
Les expressions logiques : utiliser test ou [ ]
b ) Variables prédéfinies
c ) Application
3 . Le dialogue opérateur
4 . les instructions conditionnelles if et case
a ) La structure générale d’un bloc if
b ) La structure générale d’un bloc case
c ) Expressions conditionnelles
5 . Les boucles de répétition
a ) Boucles For
b ) Boucles While et until
c ) Commandes true, false et test
6 . Les mécanismes de substitution de chaînes de caractères
Substitutions de variables
Noms de fichiers et expressions case multivaluées
Récupération du résultat affiché par une commande
Annulation des mécanismes de substitution
7 . Mécanismes complémentaires interprétés par le shell (voir man sh)
8 . Créer et exécuter une procédure shell
a ) Le shell et les processus UNIX
b ) Applications
Application 1 : créer une procédure de compilation
Application 2 : créer un fichier ~/.profile (ou ~/ .bash_profile)
B Le traitement automatique des fichiers textes
9 . Redirection des entrées sorties
10 . Quelques commandes de traitement des textes
11 . Expressions régulières
12 . Commande cut : un exemple
13 . Commande sort : trier un fichier
14 . Commande grep : recherche d’expressions régulières
15 . Commande awk : traitement des tableaux
a ) Syntaxe :
b ) Forme générale d’un programme awk
c ) Quelques variables awk
d ) Fonctions prédéfinies :
e ) Opérateurs reconnus par awk
f ) Variables de awk
g ) Instructions de contrôle
h ) Exemples de programmes réalisés avec awk
16 . Commande sed : éditeur séquentiel
a ) Syntaxe de sed
b ) Syntaxe des commandes d’édition
c ) exemples

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *