Escolar Documentos
Profissional Documentos
Cultura Documentos
ED-DBALI
Universit d'Orlans
Programmation Shell
Lexemple du ksh
A. Ed-Dbali Ed-
AbdelAli.Ed-Dbali@lifo.univ-orleans.fr
Scripts Shell
Dfinition : suite de commandes UNIX runies dans un fichier
Exemple: script qui-est-la :
echo Liste des connections par ordre alphabtique who | sort
$ qui-est-la
Liste des connections par ordre alphabtique dupont /dev/pts/23 09:01 durand /dev/pts/36 15:32 leger /dev/pts/24 10:14
A. Ed-Dbali Ed-
$ script
Excution par un sous shell (script est un fichier excutable : droits x positionns). L'environnement du shell courant non affect.
$ . script
La commande '.' (point) est une commande interne la famille Bourne-shell (quivalent dans la famille C-shell : source) Excution par le shell courant (environnement du shell courant affect)
UNIX : La programmation Korn Shell 3 A. Ed-Dbali Ed-
Variables prdfinies
Variable HOME PATH CDPATH FPATH IFS PWD RANDOM REPLAY SECONDS LINENO PPID EDITOR
UNIX : La programmation Korn Shell
Valeur rpertoire de connexion liste des rpertoires de recherche des commandes liste des rpertoires pour la commande cd liste des rpertoires de recherche des fonctions chane des sparateurs de champs (espace, tab, fin de ligne) rpertoire courant (OLDPWD : ancien rpertoire) nombre alatoire paramtre par dfaut de read et select temps coul depuis l'invocation du shell ou depuis le dernier appel numro de ligne dans le script numro du processus pre diteur par dfaut
5 A. Ed-Dbali Ed-
Valeur nom du fichier excut l'invocation du shell (ex: $HOME/.kshrc) nom du fichier historique des commandes ($HOME/.sh_history) nombre de commandes stockes dans $HISTFILE (128) nom de connexion invite primaire du shell ($) invite secondaire du shell pour les commandes incompltes (>) invite de l'instruction select (#?) invite de la trace d'un script (+) type du terminal nombre de secondes avant le compte rebours de dconnexion nom du fichier de messagerie (ex: /var/mail/$LOGNAME) frquence de consultation du courrier (600 secondes) message d'alerte l'arrive d'un courrier
6 A. Ed-Dbali Ed-
Variables de position
Permettent l'accs aux paramtres de la ligne de commande :
0 : non du script (valeur $0) 1 : 1er paramtre, 2 : 2me paramtre, etc. (valeur $1, $2, ) * ou @ : liste des tous les paramtres (valeur $* ou $@) # : nombre des paramtres (valeur $#)
Exemples
$ cmd a 1 fich -2 t3 (cmd un script Shell quelconque) $# = 5 $0 = cmd $1 = a, $2 = 1, $3 = fich, $4 = -2, $5 = t3 $* = a 1 fich -2 t3 script Shell : bout head -$3 $1 | tail +$2 $ bout fich 5 9 extrait de fich toutes les lignes entre la 5me et la 9me
UNIX : La programmation Korn Shell 7 A. Ed-Dbali Ed-
Autres variables
?
Code de retour de la dernire commande ou du groupe de commande
Permet de tester la valeur de vrit d'une commande : $? = 0 commande vraie, $? 0 commande fausse
$
Numro du processus du script
Permet de manipuler le processus Utilis souvent pour crer des noms de fichiers temporaires : FICH_TEMP=/tmp/$0-$$
!
Numro du processus de la dernire tche lance en arrire plan
UNIX : La programmation Korn Shell 8 A. Ed-Dbali Ed-
Variables de l'utilisateur
Tout identificateur
Suite de lettres, de chiffres et du caractre '_' qui ne commence pas par un chiffre Dfinition par
l'affectation : NomVar=ValeurVar la commande interne read ou readonly (pour ne plus la modifier) la commande interne set (pour, entre autres, positionner dynamiquement les variables de position)
Type par dfaut : chane de caractres Typer une variable : typeset -[option] [variable[=valeur]]
option : iN (entier base N), u (chane majuscule), l (chane minuscule), LN (justifi gauche), RN (justifi droite), ZN (justifi droite compltion ventuelle avec des zros), r (variable en lecture seule), x (variable exporte : export)
10
A. Ed-Dbali Ed-
Signification
longueur de la valeur de var valeur si var nulle ou non initialise affecte valeur var si var nulle ou non initialise affiche message et termine le script si var non initialise valeur (resp. chane vide) si var initialise (resp. non initialise) valeur de var sans la plus petite partie de son dbut si elle correspond motif valeur de var sans la plus grande partie de son dbut si elle correspond motif valeur de var sans la plus petite partie de sa fin si elle correspond motif valeur de var sans la plus grande partie de sa fin si elle correspond motif
11 A. Ed-Dbali Ed-
Expressions arithmtiques
Expressions arithmtiques habituelles values l'aide de expr (rvolue), let (moderne et fait pour plusieurs expressions) ou (()) pour une seule expression
$ expr $a + 1
Affiche la valeur de a incrment de 1
$ ((y = 2 * x +3))
Affecte y la valeur de l'expression 2x+3 Texte de l'expression libre
Expressions arithmtiques
Oprateurs identiques ceux du langage C :
Arithmtiques :
() pour fixer l'ordre d'valuation, - unaire, ! Ngation, ~ complment bit bit, * multiplication, / quotient, % modulo, + addition, - soustraction, < < dcalage bits gauche, > > dcalage bits droite
Boolens :
<=, >=, <, >, == (galit), != (diffrent), & (et bit bit), ^(ou exclusif bit bit), (ou bit bit), && (et logique), (ou logique)
Affectation :
= (affectation simple), op= (v Op= exp v = v Op (exp))
UNIX : La programmation Korn Shell 13 A. Ed-Dbali Ed-
Expressions boolennes
Expressions valeur boolenne value l'aide de test ou [] (anciens) ou [[]] (nouveau)
$ test f fich [ -f fich ] [[ -f fich ]] Diffrence entre [] et [[]] :
dans [], les caractres spciaux dans les noms gnriques sont interprts dans [[]] ils ne le sont pas : permet des comparaisons riches
Oprateurs boolens :
! && ou -a || ou o
UNIX : La programmation Korn Shell
Signification
existe fichier spcial bloc fichier spcial caractre rpertoire existe fichier ordinaire appartient au groupe du processus set-gid positionn sticky-bit positionn
Test
-L fich -O fich -p fich -r fich -S fich -s fich -u fich -w fich -x fich
Signification
lien symbolique appartient au propritaire du processus tube nomm lisible fichier socket de taille non nulle set-uid positionn modifiable excutable
Test
fich1 nt fich2 fich1 ot fich2 fich1 et fich2
UNIX : La programmation Korn Shell
Signification
fich1 plus rcent que fich2 fich1 plus vieux que fich2 fich1 est un lien vers fich2
15 A. Ed-Dbali Ed-
Comparaisons de chanes
Test -z chane -n chane chane = motif chane != motif chane1 < chane2 chane1 > chane2 Signification chane de longueur nulle chane de longueur non nulle chane est de la forme motif chane n'est pas de la forme motif chane1 infrieur (ordre lexical) chane2 chane1 suprieure (ordre lexical) chane2
16
A. Ed-Dbali Ed-
17
A. Ed-Dbali Ed-
Expressions conditionnelles
Expression de conjonction : cmd1 && cmd2
cmd2 excute uniquement si cmd1 est vraie quivalent : if cmd1 then; cmd2; fi Exemple : $ [[ -f fich ]] && mail durand < fich
19
A. Ed-Dbali Ed-
20
A. Ed-Dbali Ed-
21
A. Ed-Dbali Ed-
Itrations
Exemple creer_rep : Cre une liste de rpertoires. Si un rpertoire existe, il est propos de le dtruire. for Rep in $* do if [[ -d "$Rep" ]] then echo "Dtruire $Rep (O/N) : \c" read D if [[ "$D" = [Oo]* ]] then rm -r $Rep; mkdir $Rep fi else mkdir $Rep fi done
UNIX : La programmation Korn Shell 23 A. Ed-Dbali Ed-
Itrations
while liste_commandes1 do liste_commandes2 done
Tant que liste_commandes1 est vraie (code de retour de la dernire commande est 0) excuter liste_commandes2
Slection (menu)
select variable in liste_valeurs do liste_commandes done
Affiche est aligne en colonnes la liste_valeurs Utilise PS3 comme invite pour demander un choix parmi liste_valeurs (RETURN raffiche le menu) Excuter liste_commandes avec la valeur choisie mise dans variable (son rang tant dans REPLY) Fin de select par ctrl-d PS3 peut tre modifi pour la circonstance
UNIX : La programmation Korn Shell 25 A. Ed-Dbali Ed-
26
A. Ed-Dbali Ed-
28
A. Ed-Dbali Ed-
signification
0 ou une occurrence de l'un des motifs 0 ou plusieurs occurrence de l'un des motifs 1 ou plusieurs occurrence de l'un des motifs 1 occurrence exactement de l'un des motif Tout motif sauf ceux donns
30
A. Ed-Dbali Ed-
Fonctions
Objectifs
Structurent les scripts Rsident en mmoire (accs plus rapide qu'un script sur disque) Dfinition :
nom_fonction () groupement_de_commandes ou function nom_fonction groupement _de_commandes Groupement_de_commandes :
{ liste_commandes; } ou ( liste_commandes )
return [n] : arrt de la fonction et retour au script appelant. n code de retour (si absent : code de la dernire commande excute dans la fonction)
UNIX : La programmation Korn Shell 31 A. Ed-Dbali Ed-
Fonctions
Appel
fct [param1 paramn] parami rfrencs par $1, , $n dans la dfinition de fct ($0 = nom de la fonction)
Autres manipulations
$ typeset f (ou $ functions) Fonctions disponibles $ typeset xf fct1 fctn Exporter des fonctions $ typeset fu fct (dans $ENV par exemple) fct n'est charge qu' l'utilisation (fct mise dans un fichier de mme nom qui appartient un des rpertoires de FPATH) $ unset -f fct1 fctn Retrait de fonctions
UNIX : La programmation Korn Shell 32 A. Ed-Dbali Ed-
Fonctions
Exemples :
psgrep () { ps -ef | grep $1 | grep -v grep; }
$ psgrep ksh (ou psgrep `whoami`) affiche toutes les lignes de processus contenant le mot ksh (ou mon nom de connexion)
33
A. Ed-Dbali Ed-
Tableaux
Dclaration (optionnelle)
$ typeset nom_tab[taille] (taille limite 1024)
Dfinition ou rinitialisation
$ set A nom_tab champ0 champn ou $ nom_tab[0]=champ0; ; nom_tab[n]=champn
Manipulations
$ echo $T ${T[0]} ${#T[*]} ${T[*]} Affiche deux fois le premier champ ($T et ${T[0]}), le nombre d'lments (${#T[*]}) et tous les lments (${T[*]}) du tableau T $ set A Fichier $(ls) Cre le tableau Fichier avec comme contenu tous les noms des fichiers du rpertoire courant (rsultat de ls)
UNIX : La programmation Korn Shell 34 A. Ed-Dbali Ed-
: (deux points)
Commande qui ne fait rien (utilise comme la valeur vraie)
break [nbr]
Sortir de la structure de contrle englobante (while, for, until et select) Si nbr est donn, sortir de nbr niveaux
continue [nbr]
Passer la prochaine itration (while, for, until et select) Si nbr est donn, passer nbr itrations plus haut
cd
Changement de rpertoire
UNIX : La programmation Korn Shell 35 A. Ed-Dbali Ed-
export variable[=valeur]
Permet de mettre des variables dans la liste des variables d'environnement du shell (liste des variables exportes). Cette liste est transmise aux scripts et sous shells Mme effet avec : typeset x variable[=valeur] export p : indique les variables exportes
UNIX : La programmation Korn Shell 37 A. Ed-Dbali Ed-
$ exec redirection
Rend effectif la redirection pour le reste des commandes Exemples :
$ exec d<fich (avec d = 0 ou d 3) Ouvre fich en entre sous le numro descripteur d Si d absent, 0 (entre standard) est prise par dfaut $ exec d>fich (avec d 1) Ouvre fich en sortie sous le numro descripteur d Si d absent, 1 (sortie standard) est prise par dfaut $ exec d<&(avec d 0) Ferme le fichier associ au numro descripteur d
38
A. Ed-Dbali Ed-
39
A. Ed-Dbali Ed-
return [n]
arrt de la fonction et retour au script appelant. n code de retour (si absent : code de la dernire commande excute dans la fonction) Si non invoque l'intrieur d'une fonction, comportement quivalent exit
UNIX : La programmation Korn Shell 42 A. Ed-Dbali Ed-
Exemple d'options :
set a : dornavant, toutes les variables affectes sont exportes set n : vrifier simplement la syntaxe des commandes set s : trie les variables de position $0, $1, etc. set u : la lecture d'une variable non initialise provoque une erreur (avec +u, la valeur d'une telle variable est la chane vide) set v : afficher, avant transformation, la commande qui va s'excuter (+v revient au mode normal) set x : (excution avec trace) afficher, aprs transformation, la commande qui va s'excuter (+x revient au mode normal). La commande affiche est prcde de l'invite PS4 set - : permet d'affecter les variables de position mme si $1 commence par un
UNIX : La programmation Korn Shell 43 A. Ed-Dbali Ed-
times
Affiche le temps systme et utilisateur couls
45
A. Ed-Dbali Ed-
Permet aussi d'intercepter des signaux de fin prcoce de shell (ex: ^c : rception de INT) pour fermer ou dtruire proprement des fichiers "cmd" value la lecture de trap ('cmd' l'excution)
UNIX : La programmation Korn Shell 46 A. Ed-Dbali Ed-
whence v nom
Indique comment le shell interprterait nom si c'tait le nom d'une commande : alias, fonction, commande interne ou fichier excutable
UNIX : La programmation Korn Shell 48 A. Ed-Dbali Ed-
49
A. Ed-Dbali Ed-
Partie traitement
UNIX : La programmation Korn Shell 50 A. Ed-Dbali Ed-
O installer le script
Dans un rpertoire ddi (ex : $HOME/bin) Mettre ce rpertoire dans PATH (au niveau du .profile) : export PATH=$PATH:$HOME/bin Remarque : viter de mettre le rpertoire courant '.' en dbut de PATH (problme de scurit)
53
A. Ed-Dbali Ed-
N'existait pas dans les premires versions Produit pdksh mais incomplet, pour le moment, par rapport la version de AT&T En dfinissant la variable ENV qui contient le nom du fichier excuter
56 A. Ed-Dbali Ed-
Entres/sorties standards
3 fichiers ouverts par le Shell:
entre standard : clavier, entre des commandes (stdin)
descripteur du fichier stdin : 0
sortie d'erreurs : cran, affichage des erreurs ventuelles (stderr) Possible d'en ouvrir d'autres en affectant des descripteurs > 2 (exec)
En temps normal :
cran
clavier stdin Commande lit ses donnes dans l'entre standard (clavier) et affiche ses rsultats et ses erreurs sur l'cran
UNIX : La programmation Korn Shell 57
Exemples : $ cat fich1 fich2 ... fichn > fich_res concatner les fichi dans un nouveau fichier fich_res $ mail Michel.Durand@univ-orleans.fr < lettre envoyer un courrier, Michel Durand, dont le texte est le contenu de lettre $ ls -l *.tex *cal*.c 1> ls_res 2>&1 rediriger la sorite standard et la sortie des erreurs vers ls_res
UNIX : La programmation Korn Shell 58 A. Ed-Dbali Ed-
60
A. Ed-Dbali Ed-
Informations gnrales sur le systme statistiques d'utilisation des ressources iostat [disque ...] [sec [nbr]]
Donne nbr fois tous les sec secondes des informations relatives aux E/S sur disque et l'utilisation de la cpu. Exemple :
# iostat 5 tty ds1 ds2 ds3 ds4 cpu tin tout kps tps kps tps kps tps kps tps us ni sy id 1 52 2 0 1 0 13 1 4 1 8 0 9 83 1 16 7 1 2 0 5 2 2 0 3 0 10 87 0 0 0 0 0 0 0 0 0 0 0 0 1 98 2 2 2 1 0 0 50 6 0 0 9 0 9 82 1 191 2 1 0 0 47 6 0 0 8 0 9 83 tin et tout resp. nombre de caractres lus et crits sur les terminaux par seconde kps et tps (pour les disques) resp. le nombre de Ko transfrs par seconde et le nombre de transferts par seconde us et ni pourcentage d'utilisation cpu par l'utilisateur (ni si chagement de priorit (ni par nice) nice) sy et id pourcentage en mode systme (sy) et inactivit (id) (sy) (id)
UNIX : La programmation Korn Shell 62 A. Ed-Dbali Ed-
Informations gnrales sur le systme statistiques d'utilisation des ressources vmstat [options] [sec [nbr]]
Donne nbr fois tous les sec secondes des informations sur l'utilisation de la mmoire virtuelle (mais aussi: processus, pagination, E/S disques, interruptions et cpu) -s affiche plus d'information sur la mmoire
$ vmstat 5 procs memory page disk faults cpu r b w swap free re mf pi po fr de sr s0 s1 s2 s3 in sy cs us sy id 0 0 0 11456 4120 1 41 19 1 3 0 2 0 4 0 0 48 112 130 4 14 82 0 0 1 10132 4280 0 4 44 0 0 0 0 0 23 0 0 211 230 144 3 35 62 0 0 1 10132 4616 0 0 20 0 0 0 0 0 19 0 0 150 172 146 3 33 64 0 0 1 10132 5292 0 0 9 0 0 0 0 0 21 0 0 165 105 130 1 21 78 1 1 1 10132 5496 0 0 5 0 0 0 0 0 23 0 0 183 92 134 1 20 79 1 0 1 10132 5564 0 0 25 0 0 0 0 0 18 0 0 131 231 116 4 34 62 1 0 1 10124 5412 0 0 37 0 0 0 0 0 22 0 0 166 179 118 1 33 67 1 0 1 10124 5236 0 0 24 0 0 0 0 0 14 0 0 109 243 113 4 56 39
^C
UNIX : La programmation Korn Shell 63 A. Ed-Dbali Ed-
L'diteur vi
$ vi fichier
insertion : i niveau curseur, a aprs, I dbut ligne, A fin ligne, o ligne aprs, O ligne avant Effacement : x : caractre dw : fin mot dd : ligne d0 : dbut ligne d$ : fin ligne p : rtablir aprs
curseur
Dplacement : caractres : h (gauche), l (droite), j (bas), k (haut) mots : b (gauche), w (droite) lignes : 0 (dbut), $ (fin) pages : ^d (bas), ^u (haut)
Exemple : $ vi -c ":r fich2" fich1 ( charge le fichier fich1 en incluant sa fin le contenu de fich2 )
UNIX : La programmation Korn Shell 64 A. Ed-Dbali Ed-
65
A. Ed-Dbali Ed-
Excution diffre : at
at [-m] temps [date] [+incrment] [fich]
Excute la procdure Shell fich au moment donn par temps et la date donne par date, ventuellement avec un dcalage dans le temps donn par incrment (nombre suivi par une unit) -m : un courrier (mail) est adress l'utilisateur la fin de l'excution diffre Formats :
temps : h, hh, hhmm, h:m, h:mm, hh:m, hh:mm ou : now, noon, midnight unit de l'incrment : minutes, hours, days, weeks, months
Exemples : $ at now + 5 minutes paye o paye est un programme qlq ou une procdure Shell $ at 16:45 lpr fichier; mail adam < message (puis ^d) o message est un fichier qui contient un message destination de l'utilisateur adam
UNIX : La programmation Korn Shell 66 A. Ed-Dbali Ed-
Excution diffre : at
at -l [N job]
La liste des commandes enregistres est affiche Exemple : $ at -l 714328506.a Fri Dec 1 14:31:00 1995 714328507.a Mon Dec 4 18:20:00 1995
at -r N job ...
Annuler les demandes enregistres donnes par leurs N job Exemple : $ at -r 714328507.a $ at -l 714328506.a Fri Dec 1 14:31:00 1995
67
A. Ed-Dbali Ed-
68
A. Ed-Dbali Ed-
at.deny
fichier /var/spool/cron/at.deny contient les noms des utilisateurs interdits excuter at et batch. Si at.deny vide tout le monde est autoris. Si at.allow et at.deny inexistants seul root est autoris
69
A. Ed-Dbali Ed-
crontab -e
diter (pour modification) le fichier des jobs.
crontab -l
Lister (sur l'cran) le contenu du fichier des jobs.
crontab -r
Retirer (du rpertoire des travaux priodiques) le fichier des jobs.
cron.allow et cron.deny
Fichiers d'autorisation et d'interdiction du service cron.
70
A. Ed-Dbali Ed-
Exemple
Soit le fichier des jobs suivant : 0 0 1 3 5 cmd1 30 0 15 2 1 cmd2 Excuter cmd1 minuit (0 0) tous les vendredis (5) et tous les premiers (1) du mois de mars (3) Excuter cmd2 minuit trente (30 0) tous les lundis (1) et tous les quinze (15) du mois de fvrier (2)
UNIX : La programmation Korn Shell 71 A. Ed-Dbali Ed-
Exemple 0 0 * * * find /home -name core -exec rm -f {} \; 30 0 * * 1-5 tar cvf /dev/rst0 /home 0 1 * * 0,6 tar cvf /dev/rst0 / 1 : dtruire tous les jours minuit les fichiers core sous l'arborescence /home ; 2 : faire une sauvegarde du rpertoire /home tous les jours de la semaine de travail (lundi-vendredi) et ce minuit trente ; 3 : faire une sauvegarde de tout le disque les 2 jours du week-end 1h du matin.
UNIX : La programmation Korn Shell 72 A. Ed-Dbali Ed-