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
proc1
proc2
proc3
proc1 ; proc2 ; proc3
proc1 & proc2 & proc3 &
<
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
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
proc1 | proc2
駲uivaut ? :
proc1 > fich
proc2 < fich
*
n'importe quelle cha?ne de caract鑽es
?
n'importe quel caract鑽e
[ ... ]
n'importe quel caract鑽e d馗rit entre les crochets
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)
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
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
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)
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
$$
le num駻o de processus de la derni鑽e commande
$?
Status de la derni鑽e commande
\
banalise le caract鑽e suivant
" ... "
banalise les caract鑽es sauf \ , $ et `
' ... '
banalise tous les caract鑽es
` ... `
substitution de commande
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.
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
Syntaxe
while commande
do
liste_commandes
done
Exemple
while [ -r " 1ドル " ]
do
cat 1ドル >> concat
shift
done
Syntaxe
until commande
do
liste_commandes
done
Exemple
until [ ! -r " 1ドル " ]
do
cat 1ドル >> concat
shift
done
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
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
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.
#
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
let exp ou
(( exp
))
let x=x+2
(( x > 10 ))
Attention le test de l'馮alit? est
==
function Identificateur
{Liste
;}
La liste est compos馥 de deux partie : la d馗laration de variables et les commandes
On peut faire des fonctions recursives
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
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
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)
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'
Cette commande permet de r馗uperer facilement les options pass馥s en param鑼re
du script.
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
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
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
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
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