Variables shell
On montre ici la création de variables avec les shell de type sh qui sont très utilisés comme bash (le shell par défaut sous des distribution Linux comme Ubuntu ou Debian), zsh (le shell par défaut sous mac) ou ksh (le shell par d´´faut d'OpenBSD).
Création de variables
Il faut commencer par créer une variable :
var=valeur
Puis on peut l'afficher en précédant sont nom d'un ${} :
echo ${var}
On ne fait que écrire le contenu de la variable, on peut en faire ensuite ce que l'on veut :
❯ liste=ls
❯ ${liste}
Il n'est pas nécessaire d'utiliser les {} (echo $var fonctionne) mais prenez l'habitude de le faire, cela permet :
- d'être plus clair
- décrire des choses comme
echo ${var}2
Il est possible d'utiliser les variables partout ! Ce sont des méta-caractères du shell et sont donc remplacés par leurs valeurs avant l'exécution de la commande. Il est donc envisageable (et c'est souvent fait) de faire ce genre de choses :
v=ls
${v}
Si toto=titi
Quelle est la différence entre les commandes suivantes :
echo totoecho $totoecho $toto2echo ${toto}2echo "${toto}"echo '${toto}'
solution
solution
Va afficher :
tototiti- ``
titi2titi${toto}
Les variables sont utilisables dans tout le shell, mais ne sont pas transmises au process enfant :
toto=titi
bash
echo ${toto}
Il faut promouvoir les variables en variables d'environnement pour qu'elles soient transmises :
toto=titi
export toto
bash
echo ${toto}
On peut créer et promouvoir une variable en une seule opération :
export toto=titi
On peut modifier/créer plusieurs variables en les séparant par des espaces (pas un ; qui est le métacaractère shell de séparation de commande):
V1=v1 V2=v2 commande
Supprimer une variable
Avec unset :
toto=titi
echo ${toto}
unset toto
echo ${toto}
Visualisation des variables
Avec la commande shell set.
Existence d'une variable
Il n'y a pas de réel moyen de savoir si une variable existe ou pas. Par exemple echo ${n_existe_pas} ne produira pas d'erreur, le métacaractère ${n_existe_pas} étant juste remplacé par la chaîne vide.
Affecter une variable
https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Quoting
Commande
var=$(ls)
TBD comme
. Mais je n'aime pas l'utiliser
C'est exécuté dans un sous shell et on récupère la sortie standard. Pas besoin du $, la sortie est juste affichée. Ce genre d'astuce permet de faire ce genre de choses :
(cd ..;ls)
Arithmétique
var=$((1 + 3))
Chaîne de caractères
echo "$((3+4))"
echo '$((3+4))'