Ceci est une ancienne révision du document !
Table des matières
Oracle Solaris 10 : Shell programmation sous Ksh
Présentation
Type d'Action (Article L. 6313-1) : Action d'acquisition, d'entretien ou de perfectionnement des connaissances.
Objectif : Maîtriser les bases du scripting ksh sous Oracle Solaris 10.
Public : Utilisateurs et Administrateurs Windows™, Mac, Linux.
Pré requis : Avoir suivi la formation Oracle Solaris - Les Fondamentaux ou posséder les compétences équivalentes.
Méthode d'apprentissage : Alternance entre un scénario pédagogique clair et précis et des travaux pratiques basés sur des cas et exemples concrets.
Type d'apprentissage : Apprentissage Accéléré.
Validation des acquis : Évaluations à l'aide de tests auto-correctifs.
Modalités : 21 heures.
Moyens pédagogiques en salle : Support de cours en ligne téléchargeable au format PDF.
Ressources : Machine virtuelle Oracle Solaris 10.
Programme
- La Ligne de Commande et les Outils de Manipulation des Fichiers Textes.
- Le Shell,
- Les Commandes Internes et Externes au shell,
- Les alias,
- Le Prompt,
- Rappeler des Commandes,
- Générer les fins de noms de fichiers,
- Le shell interactif,
- Affichage des variables du shell,
- Les variables principales,
- Régionalisation et Internationalisation,
- Options du shell ksh,
- Les Scripts Shell,
- Exécution,
- Les variables spéciales,
- La commande read,
- Code de retour,
- La variable IFS,
- La commande test,
- La commande [[ expression ]],
- Opérateurs du shell,
- L'arithmétique,
- La commande expr,
- La commande let,
- Structures de contrôle,
- Boucles,
- Scripts de Démarrage,
- Expressions Régulières,
- Expressions régulières basiques,
- Expressions régulières étendues,
- Outils de Manipulation de Fichiers Texte,
- La commande grep,
- La commande egrep,
- La commande fgrep,
- La commande sed,
- La commande awk,
- La commande tr,
- La commande paste,
- La commande cut,
- La commande uniq,
- La commande split,
- La commande diff,
- La commande cmp,
- La commande patch,
- La commande strings,
- La commande comm,
- La commande head,
- La commande tail,
- Validation des acquis,
- Commandes : type, alias, unalias, chsh, history, wc, tee, set, vi, script, read, test, expr, let, if, case, for, while, grep, egrep, fgrep, sed, awk, tr, paste, cut, split, diff, cmp, uniq, patch, strings, comm, od, head, tail.
- LAB #1.
- Automatiser la Gestion des Utilisateurs et Groupes,
- Fonction cree_user,
- Fonction modif_user,
- Fonction affiche_user,
- Fonction cree_liste_user,
- Fonction cree_group,
- Fonction modif_group,
- Fonction delete_group,
- Fonction affiche_group,
- Menu des choix.
- LAB #2.
- Automatiser la Gestion des Sauvegardes,
- Fonction archive_rep,
- Fonction restaure_rep,
- Fonction affiche_archive,
- Fonction compress_archive,
- Fonction decompress_archive,
- Gestion des erreurs.
Extrait de Cours
Solaris 10 - La Ligne de Commande
Le Shell
Un shell est un interpréteur de commandes ou en anglais un Command Line Interpreter (C.L.I). Il est utilisé comme interface pour donner des instructions ou commandes au système d'exploitation.
Le mot shell est générique. Il existe de nombreux shells dans le monde Unix, par exemple :
Shell | Nom | Date de Sortie | Inventeur | Commande | Commentaires |
---|---|---|---|---|---|
tsh | Thompson Shell | 1971 | Ken Thompson | sh | Le premier shell |
sh | Bourne Shell | 1977 | Stephen Bourne | sh | Le shell commun à tous les Unix. Sous Solaris : /usr/bin/sh |
csh | C-Shell | 1978 | Bill Joy | csh | Le shell BSD. Sous Solaris : /usr/bin/csh |
tcsh | Tenex C-Shell | 1979 | Ken Greer | tcsh | Un dérivé du shell csh. Sous Solaris : /usr/bin/tcsh |
ksh | Korn Shell | 1980 | David Korn | ksh | Uniquement libre depuis 2005. Sous Solaris : /usr/bin/ksh |
bash | Bourne Again Shell | 1987 | Brian Fox | bash | Le shell par défaut de Linux et de MacOS X. Sous Solaris : /usr/bin/bash |
zsh | Z Shell | 1990 | Paul Falstad | zsh | Zsh est plutôt orienté pour l'interactivité avec l'utilisateur. |
Cette unité concerne l'utilisation du shell ksh sous Unix. Cependant, il peut aussi être utile aux utilisateurs de bash sous UNIX car les commandes sont pratiquement identiques.
Le shell /bin/ksh permet de:
- Rappeler des commandes
- Générer la fin de noms de fichiers
- Utiliser des alias
- Utiliser les variables tableaux
- Utiliser les variables numériques et l'arithmétique du langage C
- Gérer des chaines de caractères
- Utiliser les fonctions
Une commande commence toujours par un mot clef. Ce mot clef est interpréter par le shell selon le type de commande et dans l'ordre qui suit :
- Les alias
- Les fonctions
- Les commandes internes au shell
- Les commandes externes au shell
Le shell par défaut de root sous Solaris est /bin/sh.
Le shell des utilisateurs est défini par root dans le fichier /etc/passwd :
# cat /etc/passwd root:x:0:0:Super-User:/:/sbin/sh daemon:x:1:1::/: bin:x:2:2::/usr/bin: sys:x:3:3::/: adm:x:4:4:Admin:/var/adm: lp:x:71:8:Line Printer Admin:/usr/spool/lp: uucp:x:5:5:uucp Admin:/usr/lib/uucp: nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico smmsp:x:25:25:SendMail Message Submission Program:/: listen:x:37:4:Network Admin:/usr/net/nls: gdm:x:50:50:GDM Reserved UID:/: webservd:x:80:80:WebServer Reserved UID:/: postgres:x:90:90:PostgreSQL Reserved UID:/:/usr/bin/pfksh svctag:x:95:12:Service Tag UID:/: nobody:x:60001:60001:NFS Anonymous Access User:/: noaccess:x:60002:60002:No Access User:/: nobody4:x:65534:65534:SunOS 4.x NFS Anonymous Access User:/: test:x:100:1:Test:/export/home/test:/bin/ksh
Ne modifiez jamais le shell de root dans le fichier /etc/passwd.
Devenez maintenant l'utilisateur test grâce à la commande su - :
# su - test Sun Microsystems Inc. SunOS 5.10 Generic January 2005 $
Vérifiez que le shell de l'utilisateur test soit bien ksh grâce à la consultation de la valeur de la variable système SHELL :
$ echo $SHELL /bin/ksh
Il convient maintenant de modifier le shell de test en bash :
$ which bash /usr/bin/bash
passez en tant que root grâce à la commande exit puis éditez le fichier /etc/passwd :
test:x:101:1:Test:/export/home/test:/usr/bin/bash
Ensuite connectez-vous de nouveau en tant que l'utilisateur test et utilisez la commande echo pour visualiser le contenu de la variable système SHELL :
# su - test Sun Microsystems Inc. SunOS 5.10 Generic January 2005 -bash-3.00$ echo $SHELL /usr/bin/bash
Définissez de nouveau le CLI de l'utilisateur test en /bin/ksh avant de poursuivre.
Une commande tapée dans un CLI commence toujours par un mot clef. Ce mot clef est interprétée par le shell selon le type de commande et dans l'ordre qui suit :
- Les alias
- Les fonctions
- Les commandes internes au shell
- Les commandes externes au shell
La suite de ce cours concerne l'utilisation du shell ksh sous Solaris. Le shell ksh permet de:
- Rappeler des commandes
- Générer la fin de noms de fichiers
- Utiliser des alias
- Utiliser les variables tableaux
- Utiliser les variables numériques et l'arithmétique du langage C
- Gérer des chaînes de caractères
- Utiliser les fonctions
Defenissez le shell courant de root en tant que /bin/ksh :
# /bin/ksh #
Les Commandes Internes et Externes au shell
Les commandes internes au shell sont des commandes telles cd. Pour vérifier le type de commande, il faut utiliser la commande type en tant que root :
# type cd cd est une commande prédéfinie du shell
Les commandes externes au shell sont des binaires exécutables ou des scripts, généralement situés dans /usr/sbin, /usr/bin, /usr/openwin/bin ou /usr/ucb :
# type ifconfig ifconfig est /usr/sbin/ifconfig
Les Aliases
Les alias sont des noms permettant de désigner une commande ou une suite de commandes et ne sont spécifiques qu'au shell qui les a créés ainsi qu'à l'environnement de l'utilisateur :
# type stop stop est un alias exporté pour kill -STOP
ou
# su - test Sun Microsystems Inc. SunOS 5.10 Generic January 2005 $ type ls ls est un alias suivi pour /usr/bin/ls
Notez que dans ce cas l'alias ls est en effet un alias qui utilise la commande ls elle-même.
La liste des alias définis peut être visualisée en utilisant la commande alias :
$ alias autoload='typeset -fu' command='command ' functions='typeset -f' history='fc -l' integer='typeset -i' local=typeset ls=/usr/bin/ls nohup='nohup ' r='fc -e -' stop='kill -STOP' suspend='kill -STOP $$'
Un alias se définit en utilisant de nouveau la commande alias :
$ alias dir='ls -l' $ alias autoload='typeset -fu' command='command ' dir='ls -l' functions='typeset -f' history='fc -l' integer='typeset -i' local=typeset ls=/usr/bin/ls nohup='nohup ' r='fc -e -' stop='kill -STOP' suspend='kill -STOP $$' $ dir total 6 -rw-r--r-- 1 test other 136 août 15 10:19 local.cshrc -rw-r--r-- 1 test other 157 août 15 10:19 local.login -rw-r--r-- 1 test other 174 août 15 10:19 local.profile
Notez que la liste des alias contient, sans distinction, les alias définis dans les fichiers de démarrage du système ainsi que l'alias dir créé par test qui n'est que disponible à test dans le terminal courant.
Pour supprimer un alias, il convient d'utiliser la commande unalias :
$ unalias dir $ alias autoload='typeset -fu' cat=/usr/bin/cat command='command ' functions='typeset -f' history='fc -l' integer='typeset -i' local=typeset ls=/usr/bin/ls nohup='nohup ' r='fc -e -' stop='kill -STOP' suspend='kill -STOP $$'
Pour forcer l'exécution d'une commande et non l'alias il faut faire précéder la commande par le caractère \ :
$ alias ls='ls -l' $ ls total 6 -rw-r--r-- 1 test other 136 août 15 10:19 local.cshrc -rw-r--r-- 1 test other 157 août 15 10:19 local.login -rw-r--r-- 1 test other 174 août 15 10:19 local.profile $ \ls local.cshrc local.login local.profile
Dans l'exemple ci-dessus, la première commande étant un alias, la sortie est celle de la commande ls -l tandis que la deuxième est celle de la commande ls simple.
Le Prompt
Le prompt d'un utilisateur dépend de son statut :
- $ pour un utilisateur normal
- # pour root
Rappeler des Commandes
Le shell ksh permet le rappel des dernières commandes saisies. Afin de connaître la liste des commandes mémorisées, utilisez la commande history en tant que l'utilisateur test :
$ history 5 exit 6 type ls 7 alias 8 alias dir='ls -l' 9 alias 10 cat /etc/shells 11 dir 12 \dir 13 unalias dir 14 alias 15 alias ls='ls -l' 16 ls 17 \ls 18 which chsh 19 ls -a 20 history
Rappelez-vous que la commande history est un alias :
$ alias ... history='fc -l' ...
En réalité donc c'est la commande fc qui est appelée.
L'historique des commandes est en mode emacs par défaut. Afin de pouvoir rappeler les dernières commandes saisies, il convient de passer en mode emacs :
$ set -o emacs
Le rappel de la dernière commande se fait en utilisant les touches [CTRL]-[P] et le rappel de la commande suivante se fait en utilisant les touches [CTRL]-[N] :
Caractère de Contrôle | Définition |
---|---|
[CTRL]-[P] | Rappelle la commande précédente |
[CTRL]-[N] | Rappelle la commande suivante |
Le paramétrage de la fonction du rappel des commandes est fait en définissant des variables système.
Afin de faciliter la définition de ces variables, créez le fichier /etc/kshrc en tant que root :
# # This file is the common Environment setup for Korn Shell # HISTSIZE=256 HISTFILE=$HOME/.sh_history export HISTFILE HISTSIZE set -o emacs
Vous noterez que dans ce fichier, la valeur de HISTSIZE est de 256. Ceci implique que les dernières 256 commandes sont mémorisées.
Devenez maintenant l'utilisateur standard test :
# su - test Sun Microsystems Inc. SunOS 5.10 Generic January 2005 $
Les commandes mémorisées sont stockées dans le fichier $HOME/.sh_history ou $HOME indique le répertoire personnel de l'utilisateur concerné :
$ cat $HOME/.sh_history echo $SHELL whereis bash which bash exit exit type ls alias alias dir='ls -l' alias cat /etc/shells dir \dir unalias dir alias alias ls='ls -l' ls \ls ls -a history alias set -o emacs exit cat $HOME/.sh_history
La comparaison du contenu de ce fichier avec la sortie de la commande history démontre que les deux sont identiques, à part bien évidemment, la dernière commande saisie, soit history.
Vous pouvez rappeler une commande spécifique de l'historique en utilisant la commande fc -e - suivi du numéro de la commande à rappeler :
$ history ... 52 ls 53 pwd 54 vmstat 55 df 56 history $ fc -e - 52 ls local.cshrc local.login local.profile
Afin de faire appel à au fichier /etc/kshrc, éditez maintenant le fichier /etc/profile :
$ exit # vi /etc/profile
en y ajoutant les lignes suivantes :
ENV=/etc/kshrc export ENV
Vous obtiendrez une fenêtre similaire à celle-ci :
#ident "@(#)profile 1.19 01/03/13 SMI" /* SVr4.0 1.3 */ # The profile that all logins get before using their own .profile. trap "" 2 3 export LOGNAME PATH ENV=/etc/kshrc export ENV if [ "$TERM" = "" ] then if /bin/i386 then TERM=sun-color else TERM=sun fi export TERM fi # Login and -su shells get /etc/profile services. # -rsh is given its environment in its .profile.
Connectez-vous de nouveau en tant que test :
# su - test Sun Microsystems Inc. SunOS 5.10 Generic January 2005
Vérifiez que vous pouvez rappeler les dernières commandes dans votre console.
…
<html> <center> Copyright © 2004-2017 Hugh Norris.<br><br> <a rel=“license” href=“http://creativecommons.org/licenses/by-nc-nd/3.0/fr/”><img alt=“Licence Creative Commons” style=“border-width:0” src=“http://i.creativecommons.org/l/by-nc-nd/3.0/fr/88x31.png” /></a><br />Ce(tte) oeuvre est mise à disposition selon les termes de la <a rel=“license” href=“http://creativecommons.org/licenses/by-nc-nd/3.0/fr/”>Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Pas de Modification 3.0 France</a>. </center> </html>