![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Bien que largement diffusé (par IBM) et utilisé dans de nombreux environnements, le korn shell est souvent sous employé, car confondu avec le borne shell.
Le kornshell ou ksh est le shell d'AIX. Il s'inscrit dans la ligné des shell UNIX.Les principaux sont:
/bin/csh | C shell (syntaxe proche de C) |
/bin/sh | Bourne shell (e plus vieux) |
/bin/ksh | Korn shell (variante du Bourne shell) |
/usr/bin/bash | public domain |
/usr/bin/tcsh | public domain |
Sous AIX bash existe. Il est livré sous forme de rpm avec l'AIX toolbox ert installable.
Sous linux, la version de ksh est pdksh.
Sous AIX on peut changer de shell à l'aide de la commande chsh. On obtient la liste des shells disponibles.
# chsh Current available shells: /bin/sh /bin/bsh /bin/csh /bin/ksh /bin/tsh /bin/ksh93 /usr/bin/sh /usr/bin/bsh /usr/bin/csh /usr/bin/ksh /usr/bin/tsh /usr/bin/ksh93 /usr/sbin/sliplogin /usr/local/sbin/noshell /usr/sbin/snappd pilote's current login shell: /usr/bin/ksh Change (yes) or (no)? >
Il suffit de donner le nom du shell en réponse. Celui-ci devriendra le shell par défaut du compte.
On peut a priori donner le nom d'un interpréteur de commande quelconque (perl, tcl par exemple).
Si on désire appeler un shell simplement, taper le nom de celui-ci. Exemple pour une session csh:
#csh % helpIf available, you can refer to the Base Document Library for general assistance
Some basic commands are:
man -k keyword - lists commands relevant to a keyword man command - prints out the manual pages for a command cat - concatenates files (and just prints them out) vi - text editor ls - lists contents of directory mail - sends and receives mail passwd - changes login password sccshelp - views information on the Source Code Control System smit - system management interface tool tset - sets terminal modes who - who is on the system write - writes to another user
To find programs about mail, use the command: man -k mail and print out the man command documentation via: man mail You can log out of the system by typing: exit %exit
Il est possible uniquement un shell. On a deux possibilité:
#!/bin/kshet on rend le fichier exécutable (chmod u+x nom_fichier). Dans ce cas, il suffit de taper le nom du fichier.
ksh peut être lancé avec des paramètres:
ksh -n nom_fichier | interprète les commandes sans les exécuter |
ksh -v nom_fichier | imprime les lignes comme elles sont lues |
ksh -x nom_fichier | imprime les lignes comme elles sont interprétées |
Chaque shell possède des fichiers spécfiques qui sont lancés soit au démérrage de la session de l'utilisateur, soit au lancement du shell, soit quand celui-ci se termine. Le nom des fichiers dépend du type de shell (sh,csh,ksh,bash ...).
Dans le cadre du kornshell, les fichiers sont les suivants:
.login | initialisalisation de l'environnement lors de la conenxion utilisateur |
.profile | initialisalisation de l'environnement lors du lancement du shell |
Si on positionne la variable ENV, alors le fichier spécifié (en général $HOME/.kshrc) est exécuté à chaque ouverture de session shell (pour les alias)
HOME | le home directory ( répertoire de login ) |
PATH | chemin de recherche pour l'exécution des commandes |
CDPATH | chemin de recherche pour la commande cd |
chemin indiquant le répertoire du courrier | |
PS1 | prompt système principal |
PS2 | prompt système secondaire |
IFS | internal field separator |
SHELL | indique le shell de login |
Le shell est interprété. Lorsqu'une séquence se trouve entre deux caractères spéciaux '' "" ``. Le contenu se trouvant entre ces deux caractères est modifié et remplacé soit par substitution de variables, soir par substitution de commandes.
\ | ne change pas le caractère qui suit |
" ... " | interprète l'expression sauf \ , $ subtitue une variable et ` une commande |
' ... ' | n'intrepète aucun des caractères |
` ... ` | substitution la chaine par le résultat de la commande |
$1 - $9 | paramètres dépendant de la position séparés par des blancs |
$0 | nom de la commande exécutée |
$argv[20] | 20eme élément de la ligne de commande |
$# | nombre de paramètres de la ligne de commande |
$? | status de sortie de la dernière commande exécutée. 0 indique pas d'erreur |
$$ | numéro de process de la commande |
$! | numéro de process de la dernière commande exécutée en arrière plan |
$- | options courrantes fournies lors de l'appel du shell |
$* | chaine conteant tous les arguments du shell (commençant à $1) |
$@ | même chose que $ mais quoté. |
shift | décale d'un argument: $2 devient $1 etc... |
*:
"$*" étendu en 1 element : "$1 $2 $3" "$@" étendu en 3 elements : "$1" "$2" "$3"
$var désigne le contenu de la variable ou rien du tout si la la variable n'est pas définie.${var} désigne la même chose mais les parenthèses évitent les ambiguités.
Cette variable en ksh peut être interprétée. Les règles sont les suivantes:
Operation | si str non défini ou nul | sinon |
var=${str:-expr} | var= expr | var= ${string} |
var=${str:=expr} | str= expr ; var= expr | var= ${string} |
var=${str:+expr} | var becomes null | var= expr |
var=${str:?expr} | expr is printed on stderr | var= ${string} |
La syntaxe des tests sous ksh est de type test expr ou [ expr ] ou [[ exp ]].
Il ne faut pas oublier un espace apres [ et avant ], sinon la syntaxe est incorrecte.
Les test possibles sont:
-r fichier | vrai si le fichier existe et est accessible en lecture (R) |
-w fichier | vrai si le fichier existe et est accessible en écriture (W) |
-x fichier | vrai si le fichier existe et est exécutable (X) |
-f fichier | vrai si le fichier existe et est un fichier régulier |
-d fichier | vrai si le fichier existe et est un répertoire |
-s fichier | vrai si le fichier existe et a une taille non nulle |
-L fichier | vrai si le fichier existe et est un lien symbolique |
s1 = s2 | vrai si les deux expressions sont égales |
s1 != s2 | vrai si les deux expressions sont différentes |
s1 | vrai si s1 n'est pas la chaîne nulle |
e1 -eq e2 | vrai si les deux entiers e1 et e2 sont algébriquement égaux |
e1 -ne e2 | vrai si différent |
e1 -lt e2 | vrai si plus petit |
e1 -le e2 | vrai si plus petit ou égal |
e1 -ge e2 | vrai si plus grand ou égal |
e1 -gt e2 | vrai si plus grand |
! | négation unaire |
-a | opération binaire ET |
-o | opération binaire OU |
(Expression) | Vrai si Expression est vraie. Permet de regrouper des expressions. |
Expression1 && Expression2 | Vrai si Expression1 et Expression2 sont vraies. |
Expression1 || Expression2 | Vrai si Expression1 ou Expression2 est vraie. |
exemple:
i=3 if [ $i -lt 4 ] then echo "plus petit qur 4" fi
Les structures de contrôle en ksh sont nombreuses.
boucle while avec test |
while(test) do .... done | |
boucle while pour lire un fichier |
cat fichier | while read line do echo $line done | |
liste d'éléments |
for i in 1 2 3 4 do echo $i done |