Introduction ksh
- Rappels des fondamentaux : fork/wait et exec/exit.
- Le shell, les scripts et les chaînes de caractères.
Spécificité du Korn shell
- Initialisation de ksh, la ligne de commande et les modes vi et emacs.
- La gestion des fonctions dans ksh.
- La gestion des signaux dans ksh.
- Les builtins de ksh.
- Les "traps", exit et debug, le debug d'un script ksh.
- KSH un langage Objet : Setter et Getters pour les variables du shell.
Travaux pratiques
Adapter son environnement pour ksh, .profile, mode d'édition de commande. Utilisation de la trap DEBUG et des setter/getter pour analyser un script.
Variables, expressions arithmétiques et logiques
- Différences par rapport au Bourne Shell et au Bourne again shell.
- Types de variables.
- Tableaux associatifs.
- Variable composée, agrégée (Compound, aggregate).
- Variables binaires.
Travaux pratiques
Utilisation d'un tableau associatif (Key/Value) et des aggregate variables pour la gestion d'une base de données en ksh.
Entrées/sorties étendues
- Les coprocess.
- Le builtin exec.
- La substitution de process.
- Lire et écrire du binaire en shell.
Travaux pratiques
Ecriture d'un daemon en shell (exec), utilisation de coprocess pour créer un serveur de nombres aléatoires, écriture d'un programme d'analyse de binaire.
Les chaînes de caractères
- Substitution et expansion de paramètres.
- Ksh getopts pour la gestion des paramètres d'une commande.
- Extensions ksh pour printf et read, utilisation de select pour la gestion d'une interface Homme-Machine.
Travaux pratiques
Renforcer un shell script à l'aide de getopts, de la substitution de paramètres pour gérer les extensions et les répertoires. Utiliser select, read et printf dans un shell interactif.
Augmenter les capacités du korn shell
- Les fonctions, spécificité des fonctions varname.
- Les bibliothèques de fonctions.
- Les builtins, écrire un builtin pour KSH, intégrer un builtin, les bibliothèques de builtin.
Travaux pratiques
Créer une bibliothèque de fonctions simples, basename, dirname... Ajouter à ksh un builtin permettant de lire une estampille timer précise à la nanoseconde.