 |
Un shell est un environnement d'execution de programme. Dans le cadre d'Unix, il existe plusieurs types
de shell : Bourne Shell, C Shell, Korn Shell... et bien d'autres.
Chacun de ces environnement dispose de commandes spécifiques, et l'execution des programmes, ainsi que leur
écriture en est donc impactée.
Le principe est par contre toujours le même : c'est un langage itératif. Donc, les commandes sont executées
une à une. Par conséquent, si le programme a une erreur de syntaxe, il est quand même executé, jusqu'à
l'erreur.
Ainsi, on peut facilement déceler les problèmes... Les résoudre c'est bien sûr autre chose !
De plus, les commandes peuvent aussi bien être enregistrées dans un fichier que taper en directe. Ce qui
veut simplement dire que vous pouvez directement faire les commandes Unix dont vous avez besoin. Donc,
pour effacer un fichier, c'est "rm"...
Nous verrons, peut-être, plus tard les différences entre ces shells, mais pour l'instant, nous allons surtout
voir le Korn Shell, ou "ksh", l'un des plus utilisés.
Attention, le Shell est TRES sensible à la syntaxe : il suffit d'un espace mal mit, et ca ne marche pas...
#!/bin/ksh
echo "Hello World!"
La première ligne est une ligne générique. Elle permet de définir le shell utilisé. En l'occurrence, nous
allons utilisé le Korn Shell.
Si vous souhaitez plutot utiliser du C Shell, vous devez mettre "csh"...
Ensuite, la commande "echo" permet d'afficher quelque chose à l'écran. En l'occurance, on affiche
la phrase "Hello World!", qui est utilisée très très très fréquemment pour faire son premier programme.
| | | | | | | | | 3. 1. Variables Standards
|  |  |  |
|
| Nom | Description |
| $0 | Nom du script |
| $# | Nombre de paramètre envoyés au script |
| $? | Code de la dernière commande |
| $@ | Liste de tous les paramètres |
| $1...$n | Valeur correspondant au 1..nième paramètre |
| | | | | | | | | 3. 2. Variables d'Environnement
|  |  |  |
|
On peut facilement accéde aux variables d'environnement, l'un des intérêts majeurs des batchs.
Par exemple, pour afficher le PATH, il suffit de faire ceci :
echo $PATH
| | | | | | | | | 3. 3. Variables Utilisateur
|  |  |  |
|
Evidemment, l'utilisateur peut également fixer ses propres variables !
Voici un exemple de code qui vous montre comment fonctionne l'utilisation de variables que l'utilisateur
a déclarée :
VARIABLE_UTILISATEUR="C'est juste un test"
echo $VARIABLE_UTILISATEUR
| | | | | | | | | 3. 4. Opérations sur les variables
|  |  |  |
|
VAR1=2
VAR2=5
(( VAR1 = VAR + 1 ))
(( VAR3 = VAR1 + VAR2 ))
(( VAR4 = VAR1 - VAR2 ))
(( VAR5 = VAR1 * VAR2 ))
(( VAR6 = VAR1 / VAR2 ))
(( VAR7 = VAR1 / VAR2 ))
(( VAR8 = VAR1 % VAR2 )) # (modulo)
echo $VAR1
VAR3 = VAR1 + VAR2
| | | | | | | | | 4. 1. Verifier s'il y a des paramètres
|  |  |  |
|
On peut avoir besoin de vérifier si l'utilisateur a passé des paramètres à la ligne de commande.
Pour ce faire, voici un bout de code qui marche :
if [ $# = 0 ]; then
echo "Aucun paramètre"
else
echo "Des paramètres"
fi
| | | | | | | | | 4. 2. Utiliser le premier paramètre avec un case
|  |  |  |
|
Le "case" est très utile, il permet en autre d'éviter les "if" imbriqués. Voici donc un exemple d'utilisation
du "case" :
case "$1" in
a) echo "Bonjour";;
b) echo "Bonsoir";;
*) echo "Salut";;
esac
| | | | | | | | | 4.3.1. Comparer 2 nombres
|  |  |  |
|
Voici la liste des opérateurs numériques :
- -eq : égalité
- -ne : different
- -gt : supérieur à
- -lt : inférieur à
- -ge : supérieur ou égal à
- -le : inférieur ou égal à
VAR1 = 2
VAR2 = 5
if [ $VAR1 -ne $VAR2 ]; then
echo "Nombre different"
else
echo "Nombre identique"
fi
| | | | | | | | | 4.3.2. Comparer 2 chaines de caractères
|  |  |  |
|
Voici un exemple de code complet pour comparer 2 chaines de caractères :
- = : égalité
- != : different
#!/bin/ksh
VAR1="premier"
VAR2="second"
if [ "$VAR1" != "$VAR2" ]; then
echo "chaine differente"
else
echo "chaine identique"
fi
| | | | | | | | | 4. 4. Tester l'existence des fichiers
|  |  |  |
|
monFichier="/tmp/fichTemp"
if [ -f $monFichier ]; then
echo $monFichier" existe"
else
echo $monFichier" n'existe pas"
fi
| | | | | | | | | 4. 5. Faire une opération sur une liste de fichier
|  |  |  |
|
REPERTOIRE="/usr"
for file in "*.sh"
do
wc -l $file
done
| | | | | | | | | 4. 6. Faire une opération sur une arborescence de fichier
|  |  |  |
|
REPERTOIRE="/usr"
find $REPERTOIRE -type f -name "*" |
{
while read FICHIER
do
ls -Fla $FICHIER
done
}
| | | | | | | | | 4. 7. Opérations sur le contenu d'un fichier
|  |  |  |
|
| | | | | | | | | 4.7.1. Additionner les lignes d'un fichier
|  |  |  |
|
Le fichier est constitué d'une valeur numérique par ligne :
#!/bin/ksh
SOM=0;
exec 3</monrep/fich.src
while read -u3 LIGNE
do
(( SOM = SOM + LIGNE ))
done
print "La somme des lignes est : $SOM\n";
- la ligne "exec 3..." signifie que le fichier /monrep/fich.src est lu et renvoyé vers le descripteur
"3" (en choisir un supérieur à 2)
- la ligne "while read -u3" lit chaque ligne renvoyé dans le 3ème descripteur et l'envoi dans la variable
LIGNE jusqu'a la fin du fichier
| | | | | | | | | 4.7.2. Afficher les informations sur des lignes tirées d'un fichier
|  |  |  |
|
Par exemple, vous avez un fichier qui contient les noms (et chemins d'accès) vers plusieurs fichiers, et vous
voulez récupérer la date, les droits... en gros, l'équivalent du "ls -l" pour chacun de ces fichiers.
#!/bin/ksh
for f in `cat /tmp/monfich`
do
ls -l $f
done
|