Beruflich Dokumente
Kultur Dokumente
net
Korn Shell
Cours ksh
Table des matières
1. Concepts de base .......................................................................................................... 3
1.1. Qu'est-ce qu'un script Shell ? .................................................................................. 3
1.2. Lancer un script....................................................................................................... 4
1.3. L'environnement...................................................................................................... 4
1.4. Caractères spéciaux 1/2.......................................................................................... 4
1.5. Caractères spéciaux 2/2.......................................................................................... 4
1.6. Expressions génériques multiples ........................................................................... 4
1.7. Quotes .................................................................................................................... 4
1.8. Entrée/Sortie ........................................................................................................... 5
1.9. Redirection en entrée .............................................................................................. 5
1.10. Redirection en sortie............................................................................................ 5
1.11. Entrée locale........................................................................................................ 5
1.12. Association .......................................................................................................... 5
1.13. Définir les descriptions de fichier ......................................................................... 5
1.14. Pipes ................................................................................................................... 5
1.15. Tee ...................................................................................................................... 6
1.16. Groupement de commandes................................................................................ 6
1.17. Tâches de fond.................................................................................................... 6
1.18. Contrôle des jobs................................................................................................. 6
1.19. Edition de la ligne de commande ......................................................................... 6
2. Les variables .................................................................................................................. 6
2.1. Affectation de variables ........................................................................................... 6
2.2. Utiliser une variable................................................................................................. 7
2.3. Paramètres positionnels.......................................................................................... 7
2.4. Shift......................................................................................................................... 7
2.5. Set .......................................................................................................................... 7
2.6. Les paramètres variables ........................................................................................ 7
2.7. Les paramètres d'un Shell ....................................................................................... 8
2.8. Héritage .................................................................................................................. 8
2.9. Variables de ksh...................................................................................................... 8
2.10. Tableaux.............................................................................................................. 8
2.11. Affectation de valeurs dans un tableau ................................................................ 8
2.12. Référencer l'élément d'un tableau........................................................................ 9
3. Codes de retour et traps................................................................................................. 9
3.1. Valeur de retour ...................................................................................................... 9
1
3.2. Exécution conditionnelle.......................................................................................... 9
3.3. Commande test....................................................................................................... 9
3.4. Expressions composées ......................................................................................... 9
3.5. Opérateurs de test sur un fichier ............................................................................10
3.6. Opérateurs numériques..........................................................................................10
3.7. Opérateurs sur les chaines.....................................................................................10
3.7.1. Les tests spécifiques à ksh..............................................................................10
3.8. Opérateurs sur les fichiers......................................................................................10
3.9. Les signaux............................................................................................................10
3.9.1. Les principaux signaux....................................................................................10
3.10. Trap ....................................................................................................................11
4. Instructions de contrôle .................................................................................................11
4.1. If, Then, Else ..........................................................................................................11
4.2. Until........................................................................................................................11
4.3. While......................................................................................................................11
4.4. For .........................................................................................................................11
4.5. Case ......................................................................................................................11
4.6. Select .....................................................................................................................12
4.7. Break......................................................................................................................12
4.8. Continue.................................................................................................................12
4.9. La commande null ..................................................................................................12
5. Les commandes............................................................................................................12
5.1. PRINT ....................................................................................................................12
5.2. Caractères spéciaux...............................................................................................12
5.3. Read ......................................................................................................................13
5.3.1. Les options de la commande read...................................................................13
5.4. Eval ........................................................................................................................13
5.5. Set .........................................................................................................................13
5.5.1. Les options de set ...........................................................................................13
6. Arithmétique ..................................................................................................................14
6.1. Let..........................................................................................................................14
6.2. Les opérateurs .......................................................................................................14
6.3. Bases .....................................................................................................................14
6.4. Les opérateurs logiques .........................................................................................14
6.5. Les opérateurs sur bits...........................................................................................14
6.6. Integer....................................................................................................................15
2
7. Fonctions et commandes ..............................................................................................15
7.1. Substitutions de commandes .................................................................................15
7.2. Définir une fonction ................................................................................................15
7.3. Fonctions et variables ............................................................................................15
7.4. Terminer une fonction ............................................................................................15
7.5. Typeset ..................................................................................................................16
7.6. Autoload.................................................................................................................16
7.7. Alias .......................................................................................................................16
8. Les chaines de caractères.............................................................................................16
8.1. Le remplacement de variable .................................................................................16
8.2. Les sous-chaines ...................................................................................................17
8.3. Expr .......................................................................................................................17
8.4. Longueur de variables............................................................................................17
8.5. Extension du tilde...................................................................................................17
8.6. Cut .........................................................................................................................17
8.7. Tr ...........................................................................................................................17
9. Mieux programmer ........................................................................................................18
9.1. Introduction ............................................................................................................18
9.2. Organisation d'un shell ...........................................................................................18
9.3. Optimiser un shell ..................................................................................................18
9.4. Création d'une bibliothèque de fonction..................................................................18
9.5. Time.......................................................................................................................18
9.6. Débogage ..............................................................................................................18
9.7. Règles de codage d’une fonction ...........................................................................19
9.8. Le contrôle de l’environnement ..............................................................................19
1. Concepts de base
1.1. Qu'est-ce qu'un script Shell ?
3
o des instructions de contrôle
o des commentaires !!
o #!/bin/ksh
$. shell_script
$ksh shell_script
$shell_script
$exec shell script
1.3. L'environnement
Les caractères spéciaux forment des expressions génériques qui, une fois
étendues, correspondent à plusieurs fichiers du répertoire de travail
Le shell interprète les caractères spéciaux avant d'exécuter la commande
Il y a plusieurs caractères spéciaux
Ils peuvent être utilisés simultanément
Ils peuvent être inhibés par l'option noglob
1.7. Quotes
4
1.8. Entrée/Sortie
0 Standard In clavier
Default 1 Standard Out ecran
2 Standard Err ecran
3
.
Libre
.
9
1.12. Association
1.14. Pipes
5
1.15. Tee
2. Les variables
2.1. Affectation de variables
nom=valeur
6
Attention : il n'y a pas d'espace autour de '='
Pour protéger contre un changement :
readonly nom=valeur ou typeset -r nom=valeur
2.4. Shift
2.5. Set
7
"$*" : "$1 $2 $3"
$0 : nom du shell
$$ : process id
$! : process id du dernier process lancer en tâche de fond
$? : code de retour de la dernière commande
2.8. Héritage
Lors du lancement d'un sous-shell, les variables ne pourront être utilisées que
si elles ont été préalablement exportées.
$set : liste des variables
$export var : exporte la variable var
$export : liste des variables exportées
2.10. Tableaux
8
2.12. Référencer l'élément d'un tableau
$print ${tab[n]}
$print ${tab[*]}
$print ${tab[@]}
$print tab
test expression
[ expression ]
[[ expression ]]
On utilisera toujours cette commande qui offre plus de possibilités (elle est spécifique
à ksh)
Renvoie 0 si l'expression est vraie
9
3.5. Opérateurs de test sur un fichier
Opérateur : vraie, si
e1 -eq e2 : e1=e2
-ne : diffèrent
-lt : inferieur a
-gt : supérieur à
-le : inferieur ou égale à
-ge : supérieur ou égale
Les signaux sont envoyés par le système au processus pendant son exécution
La commande kill permet d'envoyer un signal à un processus
10
9 KILL tue le process (ne peut pas être intercepté)
17 STOP Stoppe le process
19 CONT continue s'il a été stoppé
3.10. Trap
La commande trap spécifie les différentes actions que vous souhaitez faire à la
réception d'un signal
exemple : trap 'rm /tmp/$$;exit2' INT QUIT
4. Instructions de contrôle
4.1. If, Then, Else
if Expression
then
commandes exécutées si expression vraie
elif
e2
fi
4.2. Until
until expression
do
commande exécutée tant que exp est fausse
done
4.3. While
while expression
do
cmd tant que exp est vraie
done [<file]
4.4. For
for i in [ list ] ; do
...
done
4.5. Case
case mot in
MOT) action ;;
regexp) action ;;
*) default ;;
esac
11
4.6. Select
4.7. Break
4.8. Continue
5. Les commandes
5.1. Print
a alarme
12
backspace
f form feed
nouvelle ligne
retour chariot
tabulation
v tabulation verticale
\
5.3. Read
read -r variable ... raw mode, n’est pas considéré comma la caractère de
continuation de ligne.
read -uN variable lit à partir du descripteur N.
Pour la première variable, vous pouvez spécifier le prompt qui sera affiché.
read var1?prompt var2...
5.4. Eval
5.5. Set
13
nounset affiche une erreur si une variable non définie est utilisée.
verbose affiche l’entrée sur l’erreur standard.
xtrace option de débug - le shell affiche P54 avec chaque ligne exécutée.
6. Arithmétique
6.1. Let
let argument
(( argument ))
let travaille sur des entiers long
les variables n’ont pas besoin de $ , et les tableaux n’ont pas besoin de ${}.
le code de retour est zéro (vrai) si le résultat est non nul.
( ) les parenthèses
* multiplication
/ division
% module
+ plus
- moins
= affectation
6.3. Bases
! négation logique
> supérieur
>= supérieur ou égale
< inférieur
<= inférieur ou égale
== égale
!= différent
&& "ET" logique
|| "OU" logique
~ inversion de bits
<<N décalage de N bits vers la gauche
14
>>N décalage de N bits vers la droite
& et bit à bit
| ou bit à bit
^ ou exclusif
6.6. Integer
7. Fonctions et commandes
7.1. Substitutions de commandes
return peut être utilisé pour renvoyer un code de retour ou juste terminer la
fonction :
return N
exit termine la fonction et le shell
15
exit N
7.5. Typeset
7.6. Autoload
Une fonction définie seulement la première fois qu’elle est utilisée, est une
fonction de type autoload.
autolad function ...
ou
typeset -fu function...
utiliser autoload augmente les performances.
le shell recherche dans les répertoires fournis dans FPATH, un fichier avec le
nom de la fonction.
le contenu de ce fichier défini la fonction.
7.7. Alias
16
8.2. Les sous-chaines
${var#*pattern}
${var##*pattern}
${var%pattern*}
${var%%pattern*}
(le crochet encadre la parti qui sera supprimée : ${Variable%%pattern*} == str)
8.3. Expr
~ $HOME
~+ $PWD
~- $OLDPWD
~ utilisateur $HOME de l’utilisateur
~ autre non modifié
8.6. Cut
8.7. Tr
17
9. Mieux programmer
9.1. Introduction
Entête - commentaire
Validation des options
Test des arguments
Initialisation des variables
Définition des fonctions
Code principal
réduire $HISTFILE
réduire $ENV
utiliser autoload
utiliser un alias plutôt qu'un fonction
utiliser les fonctions du shell en priorité sur les commandes UNIX
$(<fichier) plutôt que $(cat fichier)
utiliser plusieurs arguments dans une seule commande
autoload function
En mettant plusieurs définitions de fonction dans un même fichier, et en
utilisant la commande ln pour donner plusieurs noms à ce fichier, vous pouvez
faire l’autoload une librairie de fonctions.
9.5. Time
9.6. Débogage
18
set -o verbose affiche les entrées à leur lecture
set -o xtrace affiche la commande avant de l’exécuter
Le signal DEBUG, après chaque commande peut être intercepté à l’aide de la
commande trap.
$. shell_script
sh shell_script
$shell_script
$(commande) est un sous-shell
${commande} s'exécute dans le shell courant
19