Outils pour utilisateurs

Outils du site


linux:shell:variables

Linux

Variables & opérateurs


Déclaration d'une variable

$ 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


Suppression de variables

unset var1 [var2 ?]


Typage de variables

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 ».

  • typeset -a var : la variable sera traitée comme un tableau.
  • typeset -i var : la variable sera traitée comme un entier et peut être incluse dans des opérations arithmétiques.
  • typeset -r var : la variable sera mise en « lecture seule » (équivalent de « readonly »).
  • typeset -x var : la variable sera exportée automatiquement dans les processus fils (équivalent de « export »).


Variables prédéfinies

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


Variables réservées

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


Variables d'environnement

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
...


Tableaux

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


Calculs

$ 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


linux/shell/variables.txt · Dernière modification : 2024/01/15 14:00 de zandor