Une variable peut être supprimée par la commande unset, et peut être verouillée par la commande readonly :
moi=mathieu echo $moi
Le résultat s'affiche :
mathieu
Maintenant, si on vérrouille la variable moi, et qu'on essait de la supprimer :
readonly moi unset moi
on obtient un message d'erreur :
bash: unset: moi: cannot unset: readonly variable
Pour qu'un script shell puisse utiliser une variable définie dans le shell par l'utilisateur (dans une fenêtre xterm, par exemple), il faut l'exporter avec la commande export :
export moi
On peut rechercher une chaîne de caractères dans le contenu d'une variable, en fournissant un critère de recherche. Par exemple, pour rechercher la plus petite occurrence du critère de recherche en début de texte de la variable ``t'' définie par :
t="Tentation donnant satisfaction"
on utilisera le signe ``#'' et on entrera la commande :
echo ${t#T*i}
ou ``t'' désigne la variable, et ``T*i'' le critère de recherche. Le résultat est :
on donnant satisfaction
De même, pour rechercher la plus grande occurrence du critère de recherche en début de texte de la variable ``t'', on utilisera le signe ``##'' et on entrera la commande :
echo ${t##T*i}
Le résultat est on. Pour rechercher en fin de texte, on utilisera respectivement ``%'' et ``%%''.
# Fichier varia.sh.
# Exemple d'utilisation de variables.
# Affectation, calculs...
variable1=5
echo variable1 $variable1
echo -n "variable2 ? "
read variable2
echo variable2 $variable2
variable3=$[variable1+variable2]
# equivalent a la ligne :
# variable3=$((variable1+variable2))
echo variable3 $variable3
# "declare -i" permet de rendre les calculs plus rapides...
declare -i nombre
nombre=3*9
echo 3*9=$nombre
let entiere=nombre/5
echo partie entiere de $nombre/5 : $entiere
echo "fichier vide (2e argument, vide.txt par defaut) : ${2:-vide.txt}"
nom="mathieu"
if who | grep "^$nom" > /dev/null 2>&1
then
echo "L'utilisateur \"$nom\" est connecte"
else
echo "L'utilisateur \"$nom\" n'est pas connecte"
fi
somme=10
i=3
somme=`expr $somme + $i`
echo somme = $somme
espace=$(du -s)
echo $espace
#------#
# eval #
#------#
# eval sert a evaluer une expression. Ainsi, si :
# $b contient a
# alors :
# \$$b contient $a
# et
# eval echo \$$b
# contient le contenu de la variable a. En fait, eval permet d'outre
# passer les signes "$".
a=Mathieu
echo "a=Mathieu"
b=a
echo "b=a"
echo "\$b contient $b"
echo "\\\$\$b contient \$$b"
echo "Maintenant avec 'eval' : "
echo -n "eval echo \\\$\$b = "
eval echo \$$b
echo "Parfois il faut combiner plusieurs 'eval' :"
a='$b'
b='$c'
c=fin
echo "a='\$b'"
echo "b='\$c'"
echo "c=fin"
echo "eval echo \$a"
eval echo $a
echo "eval eval echo \$a"
eval eval echo $a
Les autres commandes souvent utilisées par les scripts shells sont détaillées dans les sections qui suivent. Chacune d'elles traite d'une instruction particulière.