next up previous contents index
Next: Utilisation de fonctions Up: Passons aux choses sérieuses Previous: Utilisation de for

   
Utilisation de set

# Fichier set.sh.
# Exemple d'utilisation de set.


# S'il n'y a pas de parametres fournis par l'utilisateur...

if [ $# = 0 ]
then
    echo Aucun argument recu !
    echo "Tant mieux, mais essayez a nouveau le script avec comme"
    echo "argument un nom d'utilisateur (si possible logue, comme"
    echo "le votre)..."
    echo
fi


# Si un argument est fournit (un nom d'utilisateur logue), la variable
# "nom" se voit affecter cet argument.

nom=$1


# Cree la liste des parametres si aucun argument n'a ete recu.

echo "Tant pis, \"set\" va en fabriquer..."
echo "Tous les fichiers se terminant par \".sh\" (des scripts shell"
echo "en general) seront les arguments..."

if [ $# = 0 ]
then
    set *.sh
fi


echo "Nombre d'arguments passes a $0 : $#"


# On peut utiliser set pour recuperer le resultat d'une commande.
# Les arguments $1, $2, $3... devient alors les champs de la commande,
# et non les arguments passes par l'utilisateur au script.

# Cherche si le premier argument passe par l'utilisateur au script (et
# sauvegarde dans la variable "nom" plus haut) correspond a un
# utilisateur logue.

set `who | grep "^$nom"`

if [ "$1" = "$nom" ]
then
    echo "L'utilisateur \"$nom\" est connecte sur $2 depuis le $4 $3 a $5"
else
    echo "L'utilisateur \"$nom\" n'est pas connecte"
fi


# D'autres exemples d'utilisation de "set".

set `date` && [ $2 = "Nov" ] && [ $3 = "19" ] \
&& echo "Bon anniverssaire, $USER "

set `grep "^$nom" /etc/passwd | cut -d: -f1,3,4,6 | tr ":" " "`

if [ "$1" = "$nom" ]
then
    echo "L'utilisateur \"$nom\" a un UID = $2 et un GID = $3"
    echo "son repertoire personnel est $4"
else
    echo "L'utilisateur \"$nom\" est inconnu"
fi


#-----#
# set #
#-----#


bizard=xzorglub
echo "bizard=xzorglub"

grep "^$bizard" /etc/passwd
echo "on ne voit rien a l'ecran quand il ne se passe rien..."

# 'set -x' peut servir au debogage d'un script.
# Les commandes sont alors affichees telles qu'elles seront executees.
# Taper 'sh -x simple.sh' dans le shell = 'set -x' pour tout le programme.

# Une option activee sera desactivee en remplacent - par + :
# ex. : set +x --> desactive set -x

set -x

grep "^$bizard" /etc/passwd
echo "maintenant si..."

# apres 'set +x', plus d'affichage de commandes !

set +x

# 'set -u' affiche un message d'erreur en cas de variable non definie
# et quitte le script. Enlever le "#" pour tester. Le script se terminera
# aussitot.

echo $contenu
# set -u
echo $contenu
contenu="-salut"
echo $contenu


# La variable "contenu" sera affectee du premier parametre de position...

set - $contenu
echo "Option \$1 : $1"

Les principales options de la commande set sont données dans le tableau 5.1.


 
Tableau 5.1: Principales options de la commande set.
Option Signification
-o emacs/vi Affiche l'historique des commandes éditées par emacs/vi.
ignoreeof <Ctrl-d> sans effet.
noclobber Lors d'une redirection avec ``>'', il n'y aura pas d'écrasement. Utiliser ``>/'' pour écraser quand même.
allexport Exporte toutes les variables définies. Affiche la liste de tous les paramètres et leurs état (on/off).

 



MATHIEU DECORE
1999-11-03
Merci de me dire ce que pensez de ce document.