sommaire
Scipts shell

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