home www.shellunix.com commandes Unix Shell unix: sh Shell unix: csh Shell unix: ksh expressions r馮uli鑽es sed awk perl

Obtenir l'aide m駑oire Unix au format pdf


Les shells UNIX : Le Korn Shell


Processus s駲uentiels

proc1
proc2
proc3
proc1 ; proc2 ; proc3

Processus en parall鑞es

proc1 & proc2 & proc3 & 

Redirection des entr馥s-sorties

< l'entr馥 standard est lu ? partir d'un fichier
> La sortie standard est redirig馥 dans un fichier (RAZ du fichier)
>> La sortie standard est redirig馥 dans un fichier (concat駭ation du fichier)
2> les erreurs sont redirig馥s dans un fichier
2>&1 les erreurs sont redirig馥s dans le m麥e fichier que la sortie standard

Here Document

Cr饌tion de fichier dans un script
cmde<<[-] D駘imiteur
ligne1
ligne2
ligne3
...
D駘imiteur
Si - est ajout?, les tabulations de d饕ut de ligne sont supprim馥s du document.
exemple
cat > fichier << EOF
abc
def
EOF

Les pipes

proc1  |  proc2
駲uivaut ? :
proc1 > fich proc2 < fich

G駭駻ation des noms de fichiers

* n'importe quelle cha?ne de caract鑽es
? n'importe quel caract鑽e
[ ... ] n'importe quel caract鑽e d馗rit entre les crochets

Le login

ex馗ution du fichier .login pour initialiser l'environnement
ex馗ution du fichier .profile pour initialiser l'environnement
Si on positionne la variable ENV, alors le fichier sp馗ifi? (en g駭駻al $HOME/.kshrc) est ex馗ut? ? chaque ouverture de session shell (pour les alias)

Les param鑼res du shell

HOME le home directory ( r駱ertoire de login )
PATH chemin de recherche pou l'ex馗ution des commandes
CDPATH chemin de recherche pour la commande cd
MAIL chemin indiquant le r駱ertoire du courrier
PS1 primary system prompt
PS2 secondary system prompt
IFS internal field separator
SHELL indique le shell de login

L'ex馗ution d'un script en Korn Shell

ksh nom_fichier
ou rendre le fichier ex馗utable (chmod u+x nom_fichier) puis taper le nom du fichier
Pour forcer l'ex馗ution du fichier en Korn Shell, le fichier doit commencer par #!/bin/ksh
ksh -n nom_fichier interpr鑼e les commandes sans les ex馗uter
ksh -v nom_fichier imprime les lignes comme elles sont lues
ksh -x nom_fichier imprime les lignes comme elles sont interpr騁馥s

Les variables

variable = valeur affectation (Attention , ne pas mettre d'espace autour de =)
$variable valeur de la variable
${ variable } valeur de la variable (permet d'騅iter certaines ambiguit駸: si a="var",${a}b renvoie varb alors que $ab est invalide)

r馗up駻ation des param鑼res dans la ligne de commande

0ドル nom de la commande
$ n nieme param鑼re
$# nombre de param鑼res
$* $@ liste de tous les param鑼res La signification de $* et de $@ est identique. Cependant, lorsque "$*" est utilis? comme argument de commande, il est 駲uivalent ? "1ドル 2ドル " alors que "$@" est 駲uivalent ? "1ドル" "2ドル"
Pour d馗aler les param鑼res, on peut utiliser la commande shift

Quelques variables sp馗iales

$$ le num駻o de processus de la derni鑽e commande
$? Status de la derni鑽e commande

Les caract鑽es sp馗iaux

\ banalise le caract鑽e suivant
" ... " banalise les caract鑽es sauf \ , $ et `
' ... ' banalise tous les caract鑽es
` ... ` substitution de commande

Les instructions

Les commandes if , while , until teste le status de la commande. (voir le man pour determiner le status renvoy? par une commande particuliere, en g駭eral si la commande s'execute correctement, le status est vrai) Attention mettre une n馮ation devant la commande (if ! cmde) ne permet pas de tester l'馗hec de la commande car la n馮ation s'applique au r駸ultat de la commande et non pas ? son status.
Dans cette optique, le test est consid駻? comme une commande, on peut d'ailleurs l'utiliser sur une ligne de commande.

if

Syntaxe

if cmde
	then 
 liste_commandes
	[elif liste_commandes
		then
			liste_commandes] ...
	[else liste_commandes]
fi

Exemples

if test -f 1ドル
then
	file 1ドル
else
	echo " le fichier n'existe pas "
fi
if grep jean personnel
then
	echo jean >> disponible
elif grep pierre personnel
	then
		echo pierre >> disponible
	else
		echo vide >> disponible
fi

while

Syntaxe

while commande
do
	liste_commandes
done

Exemple

while [ -r " 1ドル " ]
do
	cat 1ドル >> concat
	shift
done

until

Syntaxe

until commande
do
	liste_commandes
done

Exemple

until [ ! -r " 1ドル " ]
do
	cat 1ドル >> concat
	shift
done

case

Syntaxe

case para in
	choix1[|choix2] ... ) liste_commandes ;;
esac

Exemple

case 1ドル in
	-d | -r ) rmdir $dir
	 echo "option -d ou -r ";;
	-o ) echo "option -o ";;
	* ) echo "r駱onse incorrecte ";;
esac

for

Syntaxe

for para [in liste]	
do
	liste_commandes
done

La variable para prend successivement les valeurs de la liste
si la liste est omise, para prend alors les valeurs pass馥s en param鑼res du script

Exemples

for i in `ls`
do
	cp $i /dir/$i
	echo "$i copie "
done
N'oublier pas les ` qui force l'ex馗ution du ls.
for dir in /dev /usr /users/bin /lib
do
	num=`ls $dir|wc -w`
	echo "$num fichiers dans $dir "
done
for i
do
	echo $i
done

les tests

N'oubliez pas que le test est une commande qui peut 黎re ex馗ut馥 directement sur la ligne de commande
test expr ou [ expr ] ou [[ exp ]] (Attention il faut un espace apres [ et avant ])
ou expr vaut :
-r fichier vrai si le fichier existe et est accessible en lecture (R)
-w fichier vrai si le fichier existe et est accessible en 馗riture (W)
-x fichier vrai si le fichier existe et est ex馗utable (X)
-f fichier vrai si le fichier existe et est un fichier r馮ulier
-d fichier vrai si le fichier existe et est un r駱ertoire
-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 馮ales
s1 != s2 vrai si les deux expressions sont diff駻entes
s1 vrai si s1 n'est pas la cha?ne nulle
e1 -eq e2 vrai si les deux entiers e1 et e2 sont alg饕riquement 馮aux
( autres comparaisons : -ne , -gt , -ge , -lt , -le)
! n馮ation unaire
-a op駻ation binaire ET
-o op駻ation 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.

divers

# commentaires , mais #!/bin/sh en d饕ut de fichier force l'ex馗ution en Bourne Shell
( cmde ) ex馗ute la commande dans un sous-shell
read a lecture d'une entr馥 pendant l'ex馗ution d'un script
exit num renvoie le status de la commande (en g駭駻al 0 la commande s'est bien ex馗ut馥)
return num code d'erreur
. script ex馗ution du script dans le shell courant
eval arg interpr鑼e arg avant de l'ex馗uter
cmd1 && cmd2 s駱arateur conditionnel (cmd2 sera ex馗ut? si cmd1 s'est ex馗ut? correctement)
cmd1 || cmd2 s駱arateur conditionnel (cmd2 sera ex馗ut? si cmd1 ne s'est pas ex馗ut? correctement)
nom_fonction ()
{ liste_commandes ;} d馭inition d'une fonction
exec arg ex馗ute la commande dans un nouveau shell
set var initialisation d'une variable
liste de tous les param鑼res du syst鑪e
positionne les param鑼res $i ( set a b c positionne 1ドル ? a, 2ドル ? b et 3ドル ? c)
unset var raz d'une variable
type cmde indique la localisation d'une commande
readonly var emp鹹he la modification d'une variable

Les expressions

let exp ou (( exp ))
let x=x+2
(( x > 10 ))
Attention le test de l'馮alit? est ==

Les fonctions

function Identificateur {Liste ;}
La liste est compos馥 de deux partie : la d馗laration de variables et les commandes
On peut faire des fonctions recursives

D馗laration des variables

typeset var d馗laration d'une cha?ne de caract鑽es
integer var
typeset -i var d馗laration d'un entier
typeset -r var=valeur
readonly var=valeur d馭inition d'une constante
On peut utiliser des tableaux qui ne sont d馗lar駸 que lors de leur assignation: tab[100]=toto

Les librairies

On cr鳬 un r駱ertoire dans lequel on stocke les fichiers contenant les fonctions (le nom du fichier doit 黎re le m麥e que le nom de la fonction)
Pour utiliser cette librairie, positionner la variable FPATH, puis importer les fonctions (par autoload ou typeset -fu)
FPATH=$HOME/lib/rep1:$HOME/lib/rep2
autoload init
tyteset -fu ecr
On peut d馭inir des fonctions dans le fichiers d馭inie par ENV mais elles ne seront visibles que du shell interactif, pour les rendre toujours visible il faut les exporter par typeset -fx fonc

Recuperation des r駸ultats de la fonction

On positionne le status de la fonction par return (r馗up駻? par $?)
On renvoie une valeur par l'interm馘iaire de la commande echo (r馗up駻? par : a=`fonction` ou a=$(fonction)

Les alias

alias donne la liste des alias
alias nom=valeur initialisation d'un alias
Les alias suivants sont d馭inies par d馭aut par le shell
 autoload='typeset -fu'
 false='let 0'
 functions='typeset -f'
 hash='alias -t'
 history='fc -l'
 integer='typeset -i'
 nohup='nohup '
 r='fc -e -'
 true=':'
 type='whence -v'

GETOPTS

Cette commande permet de r馗uperer facilement les options pass馥s en param鑼re du script.

Syntaxe g駭駻ale

getopts Cha?ne_options Nom [Argument ...]
Nom prend successivement comme valeur celles pass馥s en param鑼re du script.
Les seules valeurs valides sont donn馥s par chaine_option (voir ci dessous pour plus de d騁ails)
Par exemple
while getops vy argument
do
	case $argument in
		v) ...;;
		y) ... ;;
 	esac
done

traitement des erreurs

Pour rajouter un traitement d'erreur automatique, il suffit de rajouter : devant la liste des options valides
Lorsque l'utilisateur utilise une option non valide, getopts renvoie \?
while getops :vy argument
do
	case $argument in
		v) ...;;
		y) ... ;;
		\?) ... ; exit ;;
 	esac
done

Option avec arguments (et gestion des erreurs)

Pour permettre de saisir un param鑼re apres une option, il suffit de rajouter : apr鑚 l'option concern馥
La variable OPTARG contient le param鑼re Si l'utilisateur omet le param鑼re, getops renvoie : et OPTARG l'option concern馥.
while getops :y: argument
do
	case $argument in
		y) ... ; arg=$OPTARG;;
		:) echo " l'option -$OPTARG a besoin d'un argument " ; exit ;;
		\?) ... ; exit ;;
 	esac
done

La gestion des menus

select Identificateur [in liste_choix] 
do 
	commande
	...
done
La commande select 馗rit sur la sortie d'erreur standard la liste des choix, chacun 騁ant pr馗馘? d'un num駻o. Si in liste_choix n'est pas sp馗ifi?, les param鑼res positionnels sont utilis駸.
Le contenu de la variable PS3 s'affiche et l'entr馥 standard est lu. Si le num駻o d'un des mots list駸 est saisie, le param鑼re Identificateur prend la valeur de ce mot.
Si la ligne est vide, la liste s'affiche de nouveau. Sinon, la valeur du param鑼re Identificateur est "". Le contenu de la ligne lue ? partir de l'entr馥 standard est sauvegard? dans le Param鑼re REPLY. La liste est ex馗ut馥 pour chaque s駘ection jusqu'? un caract鑽e d'interruption ou de fin de fichier.

PS3=" votre choix "
select menu_list in "choix 1" "choix 2" "fin"
do
	case $menu_list in
		"choix 1").... ;;
 		"choix 2")... ;;
		"fin") exit 0 ;;
		"") echo "$REPLY est une option invalide "
	esac
done

Positionnement des options

set : Les options de cette commande sont :
-n Lit les commandes en recherchant les erreurs de syntaxe, sans les ex馗uter. Cette option est ignor馥 par les shells interactifs.
-t G駭鑽e une sortie apr鑚 la lecture et l'ex馗ution d'une commande.
-v Ecrit les lignes d'entr馥 du shell ? mesure qu'elles sont lues.
-x Ecrit les commandes et leurs arguments ? mesure qu'ils sont ex馗ut駸.
- D駸active les options -x et -v et interrompt la v駻ification des arguments.
Remplacer le signe - par + d駸active l'option. Celles-ci peuvent aussi 黎re utilis馥s sur appel du shell.
Les options en cours peuvent 黎re visualis馥s dans $-. Sauf si -A est sp馗ifi馥, les arguments restants sont des param鑼res positionnels et sont affect駸, dans l'ordre, ? 1,ドル 2,ドル etc.
Si aucun argument n'est sp馗ifi?, les noms et les valeurs de tous les param鑼res sont 馗rits sur la sortie standard. Si + est le seul argument sp馗ifi?, les noms de tous les param鑼res sont 馗rits.

Obtenir l'aide m駑oire Unix au format pdf

AltStyle によって変換されたページ (->オリジナル) /