Chapitre 06 - Scripting Bash
by
civ
@ 04/04/2008
6.7 Select
Exemple 1 :
#!/bin/bash
echo "Faites un choix"
select rep in "rep1" "rep2" "rep3" "rep4";
do
if [ -z "$rep" ];
then
echo "Erreur, veuillez saisir une autre valeur"
else
echo $rep
break
fi
done
6.9.2 Paramètres
Exemple 1 :
#! /bin/sh
#
# params
#
# Script shell de mise en application des paramètres d'un script.
# Affiche l'ensemble des paramètres passés au script.
echo "Vous avez lancé le script shell $0"
echo "Vous lui avez fourni $# paramètres qui sont : $*"
echo ""
echo "Liste des paramètres :"
echo "----------------------"
numParam=1
for parametre in "$@"; do
echo "Paramètre $numParam = $parametre"
let $[numParam += 1]
done
echo ""
echo -n "Après la commande 'shift $#', "
shift $#
echo "il reste $# paramètres"
6.12.2 Structure While
Exemple 1 :
#! /bin/sh
#
# factorielle
#
# Script shell de mise en application de
# Affiche la factorielle du nombre donné
if [ $# -ne 1 ] || [ $1 -lt 0 ]; then
echo "Usage : factorielle
else
resultat=1
n=$1
while [ $n -gt 1 ]; do
let $[ resultat *=
let $[ n -= 1]
done
echo "$resultat"
fi
Exemple avec until :
#! /bin/sh
#
# testfact
#
# Script shell de mise en application de l'instruction until.
# Teste le Script shell de calcul de factorielles.
n=0
until [ $n -eq 14 ]; do
resultat=$(factorielle $n)
echo "$n! = $resultat"
let $[ n += 1 ]
done
6.12.13 Structure For
Exemple 1 :
#! /bin/sh
#
# fichier_ou_repertoire
#
# Script shell de mise en application de l'instruction for.
# Affiche le type (fichier ou répertoire) de chaque paramètre.
for param in "$@"; do # Pour chaque paramètre...
if [ -f "$param" ]; then # C'est un fichier?
echo "$param est un fichier."
elif [ -d "$param" ]; then # C'est un répertoire?
echo "$param est un répertoire."
elif ! [ -e "$param" ]; then # N'existe pas
echo "$param n'existe pas."
else # C'est autre chose?
echo "$param n'est ni un fichier, ni un répertoire."
fi
done
6.12.4 Structure case
#! /bin/sh
#
# question
#
# Script shell de mise en application de l'instruction case.
# Pose une question et attend une réponse par oui ou non.
# La valeur retournée est 0 pour oui et 1 pour non.
retour=X
while [ "$retour" = "X" ]; do
echo -n "On continue (O/N) ? "
read reponse
case "$reponse" in
o* | O* )
retour=0
;;
[nN]* )
retour=1
;;
"?"* )
echo "Il n'y a pas d'aide disponible"
;;
*)
echo "Erreur : entrez [O]ui ou [N]on."
;;
esac
echo ""
done
exit $retour
6.12.5 Structure Trap
Exemple 1 :
#! /bin/sh
# exTrap
# Script shell de mise en application de l'instruction case.
trap "echo Le script s\'est terminé" EXIT
trap "echo Vous avez appuyé sur Ctrl-C" SIGINT
trap "echo Vous avez fait : kill $$" SIGTERM
trap "echo J\'ai été stoppé et je continue" SIGCONT
trap "echo J\'ai reçu SIGUSR1 ou SIGUSR2" SIGUSR1 SIGUSR2
echo "Processus $$ : J'attends un signal..."
#
# Compte à rebours
#
i=10
while [ $i -gt 0 ]; do
echo -n "$i "
sleep 1
let $[ i -= 1 ]
done
echo "0"
6.13 Fonctions
Exemple 1 :
#! /bin/sh
# signe2
# Script shell de mise en application des fonctions.
# Affiche le signe d'un nombre et de son carré.
# carré(nombre)
# Retourne le carré du nombre donné en paramètre.
#
# Paramètres : $1 -> Le nombre dont on veut le carré
#
function carré()
{
return $[ $1 * $1 ]
}
# affSigne(nombre)
#
# Affiche le signe du nombre donné
# en paramètre.
# Paramètres : $1 -> Le nombre dont on teste le signe.
#
function affSigne()
{
local signe
if [ $n -lt 0 ]; then # n < 0 ?
signe=négatif
elif [ $n -gt 0 ]; then # n > 0 ?
signe=positif
else # n = 0
signe=nul
fi
echo "Le nombre $1 est $signe"
}
#
# Programme principal
#
echo -n "Entrez un nombre : "
read n # Saisie de n
affSigne $n # Affichage du signe de n carré
$n # Calcul du carré de n
n=$? # Récupération du résultat
echo "Le carré du nombre choisi est $n"
affSigne $n # Affichage du signe de n