$ variable=5 $ echo $variable 5
Exemples :
$ nom="Pierre" # Affectation de "Pierre" dans la variable "nom" $ objet="voiture" # Affectation de "voiture" dans la variable "objet" $ coul=bleue # Affectation de "bleu" dans la variable "coul" $ echo 'Il se nomme $nom' # Affichage d'un texte / la variable n'est pas substituée Il se nomme $nom $ echo "Il se nomme $nom" # Affichage d'un texte et d'une variable Il se nomme Pierre $ txt="$nom a une $objet $coul" # Mélange de variables et texte dans une variable $ echo txt texte $ echo $txt # Affichage de la variable "texte" Pierre a une voiture bleue
unset var1 [var2 ?]
typeset [-a] [-i] [-r] [-x] var1 [var2 ?] typeset
Les shells évolués (Korn Shell, Bourne Again Shell et autres descendants) permettent de restreindre les propriétés des variables et correspondent à une certaine forme de typage « simpliste ».
Un utilisateur possède lors de sa connexion plusieurs variables automatiquement définies par le système. Certaines sont modifiables, certaines ne le sont pas, mais toutes sont utiles.
Variable | Signification |
---|---|
$HOME | Répertoire personnel de l'utilisateur |
$PWD | Répertoire courant (Ksh / Bash) |
$OLDPWD | Répertoire dans lequel on était avant notre dernier changement de répertoire (Ksh / Bash) |
$LOGNAME | Nom de login |
$PATH | Chemins de recherche des commandes |
$CDPATH | Chemins de recherche du répertoire demandé par la commande cd |
$PS1 | Prompt principal |
$PS2 | Prompt secondaire (indique que la commande n'est pas terminée) |
$PS3 | Prompt utilisé par la commande select (Ksh / Bash) |
$PS4 | Prompt affiché lors de l'utilisation du mode débogueur set -x |
$TERM | Type de terminal utilisé |
$REPLY | Chaîne saisie par l'utilisateur si la commande read a été employée sans argument (Ksh / Bash).Numéro choisi par l'utilisateur dans la commande select (Ksh / Bash) |
$IFS | Séparateur de champs internes |
$SHELL | Nom du Shell qui sera lancé chaque fois qu'on demandera l'ouverture d'un Shell dans une application interactive (vi , ftp …) |
$RANDOM | Nombre aléatoire entre 0 et 32 767 (Ksh / Bash) |
$$ | Numéro du processus courant |
$! | Numéro du dernier processus lancé en arrière-plan |
$? | Statut (état final) de la dernière commande |
Certaines variables ont une signification spéciale réservée par le système. Elles sont utilisées lors de la création de scripts :
$0 | nom du script. Plus précisément, il s'agit du paramètre 0 de la ligne de commande, équivalent de argv[0] |
---|---|
$1, $2, …, $9 | respectivement premier, deuxième, …, neuvième paramètre de la ligne de commande |
$* | tous les paramètres vus comme un seul mot |
$@ | tous les paramètres vus comme des mots séparés : “$@” équivaut à “$1” “$2” … |
$# | nombre de paramètres sur la ligne de commande |
$- | options du shell |
$? | code de retour de la dernière commande. Vaut généralement 0 si cette commande s'est bien déroulée, et un autre nombre correspondant à un type d'erreur, décrit par la commandeerrno[2]. |
$$ | PID du shell |
$! | PID du dernier processus lancé en arrière-plan |
$_ | dernier argument de la commande précédente |
Une variable d'environnement est une variable accessible par tous les processus fils du shell courant.
$ export variable
Pour illustrer la différence entre une variable locale et une variable d'environnement, il suffit de créer une variable d'environnement, de lancer un shell fils et d'afficher la variable.
$ ma_variable=toto $ export ma_variable $ bash $ echo $ma_variable toto $ exit
Dans ce cas, la valeur de la variable est accessible depuis le shell fils. Si on essaye de faire la même chose sans exporter la variable, la valeur ne sera pas accessible.
$ ma_variable=toto $ bash $ echo $ma_variable $ exit
La commande env
permet de récupérer la liste des variables d'environnement du système d'exploitation.
$ env REMOTEHOST=ubuntu01 HOST=machine.univ-autonome.fr TERM=xterm-color SHELL=/bin/bash SSH_CLIENT=::ffff:197.123.57.3 55747 22 SSH_TTY=/dev/pts/0 GROUP=shadogroup USER=shadouser temp=2.6.20.1 HOSTTYPE=i386-linux MAIL=/var/mail/shadouser PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/game PWD=/home/shadouser ...
variable[n]=chaîne variable=(chaîne1 chaîne2 ?)
Exemples :
$ nom[1]="Pierre" # Affectation de "Pierre" dans la variable "nom[1]" $ nom[5]="Paul" # Affectation de "Paul" dans la variable "nom[5]" $ nom="Jacques" # Affectation de "Jacques" dans la variable "nom[0]" $ i=5 # Affectation de "5" à la variable "i" (ou "i[0]") $ prenom=(Pim Pam Poum) # Affectation de 3 prénoms dans un tableau $ echo "Voici mes 3 noms: ${nom[0]}, ${nom[1]} et ${nom[$i]}" Voici mes 3 noms: Jacques, Pierre et Paul $ echo "Mon tableau de noms contient ${nom[*]}" Mon tableau de noms contient Jacques Pierre Paul $ echo "Mon tableau de prénoms contient ${prenom[@]}" Mon tableau de prénoms contient Pim Pam Poum
Parcourir un tableau avec une boucle for
for dir in ${dirs2keep[@]} do printf "$dir" done
$ a=1 $ a=$(($a + 1)) $ echo $a 2
$ a=1 $ let "a=$a + 1" $ echo $a 2
$ a=1 $ a=$(echo "$a+1" |bc ) $ echo $a 2