Les variables:
var="text" :contient le mot text :chaine de caracteres
var=`cmd` :contien la sortie standart de la commande cmd
var=$(cmd) :idem: pour afficher le resultat : echo $var
var=$? :variable d'environement speciale: exit code de la commande precedente
Affichage du contenu d'une variable:
echo $var
echo ${var}
exemples:
[fred@linuxfred fred]$ var="ma premiere variable"
[fred@linuxfred fred]$ echo $var
ma premiere variable
[fred@linuxfred fic]$ var=`ls`
[fred@linuxfred fic]$ echo $var
fic.aaa fic.ccc fic.ddd
[fred@linuxfred fic]$ var=$(ls)
[fred@linuxfred fic]$ echo $var
fic.aaa fic.ccc fic.ddd
[fred@linuxfred fic]$ var=$?
[fred@linuxfred fic]$ echo $var
0
Un exit code de 0 indique une excecution sans erreur.
Les tableaux:
Une seule colonne: tab[x] avec o<=x<=N
Affichage du contenu d'un tableau:
echo ${tab[x]} : affiche a l'indice x
echo ${tab[@]} : affiche tous le tab
echo ${#tab[x]} : renvoie la longueur du contenu de x
Plusieurs contenu dans une variable:
tab=( "entree0" "entree 1" ) : bien mettre un espace avant la premiere chaine de caracteres
et entre la chaine de caracteres et avant la derniere ).
chaque entrée du tableau doit être separée par un espace.
exemples:
remplissage et affichage du tableau "tablo":
[fred@linuxfred fic]$ for i in $(seq 0 5); do tablo[$i]=$i; done
[fred@linuxfred fic]$ for i in $(seq 0 5); do echo ${tablo[$i]}; done
0
1
2
3
4
5
La commande seq permet de d'incrementer i de 1 à chaque passage
de
la boucle (increment de 1 si rien n'est precisé)
Affichage du tableau en une fois :
[fred@linuxfred fic]$ echo ${tablo[@]}
0 1 2 3 4 5
Affichage de la longueur de chaque element du tableau "tablo":
[fred@linuxfred fic]$ for i in $(seq 0 5); do
echo ${#tablo[$i]}; done
1
1
1
1
1
1
[fred@linuxfred fic]$ tab[0]=15
[fred@linuxfred fic]$ echo ${#tab[0]}
2
Arguments:
$0 : la commande
$1 : argument 1
$n : argument n
$# : nombre d'argument(s) passé(s)
$* : liste tous les arguments
exemples:
[fred@linuxfred exos_shell]$ sh essai.sh lol
pop rock
Affichage des argument passé(s)
essai.sh
lol
pop
3
lol pop rock
code d'essai.sh:
#!bin/sh
echo "Affichage des argument passé(s)"
echo $0
echo $1
echo $2
echo $*
Les boucles:
*for:
for var in item0 item1
do
echo $var
done
[fred@linuxfred fic]$ for var in
item0 item1
> do
> echo $var
> done
item0
item1
*while:
avec une condition:
i=0
toto=/bin/true
while $toto
do
echo $i
i=((i++))
if [ $i -gt 2 ];
then
toto=/bin/false
fi
done
[fred@linuxfred exos_shell]$ sh essai.sh
0
1
2
(essai.sh est reecrit a chaque nouvelle exemple)
pour lire un fichier:
while read col1 col2
do
echo $col1
echo $col2
echo
done < fic.aaa
contenu de
fic.aaa :
aaa 111
bbb 222
ccc 333
ddd 444
resulats:
[fred@linuxfred fic]$ sh essai.sh
aaa
111
bbb
222
ccc
333
ddd
444
si on retire col2 du script:
[fred@linuxfred fic]$ sh
essai.sh
aaa 111
bbb 222
ccc 333
ddd 444
Quelques commandes:
seq:
seq [[debut] [pas]] fin
[fred@linuxfred fic]$ seq 5
1
2
3
4
5
[fred@linuxfred fic]$ seq 1 2 5
1
3
5
bc: pour faire des calculs (man bc pour beaucoup plus d'info)
[fred@linuxfred fic]$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
4+5
9
4*(3+2)
20
4*3+2
14
quit
[fred@linuxfred fic]$ i=5
[fred@linuxfred fic]$ j=8
[fred@linuxfred fic]$ echo "$i+$j" | bc
13
wc: comptage de lignes et de mots
lignes avec -l
mots avec -w
avec
fic.aaa:
[fred@linuxfred fic]$ cat fic.aaa | wc -l
4
[fred@linuxfred fic]$ cat fic.aaa | wc -w
8
les lignes peuvent aussi etre comptées avec grep -c
avec
fic.ccc:
aaa
aaa
aaa
aaa
[fred@linuxfred fic]$ cat fic.ccc | grep -i
"aaa" -c
4
equivalent à:
[fred@linuxfred fic]$ cat fic.ccc | grep -i
"aaa" | wc -l
4