Je passe la majeure partie de mon temps de travail dans un terminal. Dans ce terminal, j’utilise l’interpréteur de commande bash. Et, bien que je trouve cela généralement plus intuitif que les clicodromes, il reste quelque recoins sombres que je continue à oublier. Cette page est un pense-bête pour le moi du futur qui ne désire plus rechercher encore et encore les solutions aux mêmes problèmes.

Les exemples de cette page sont issues de tests effectués avec bash:5.1.1.

Valeurs par défaut

Déclarer et initialiser une variable est bête comme choux:

variable=valeur

Utiliser cette variable par la suite n’est pas bien plus compliqué:

variable=valeur
echo $variable

Seulement, parfois, j’ai besoin de savoir si une variable est définie (et non vide):

if [ -z $variable ]; then echo Nopitinop; else echo Yeah; fi
Nopitinop

variable=valeur
if [ -z $variable ]; then echo Nopitinop; else echo Yeah; fi
Yeah

Il est possible de donner une valeur par défaut:

echo ${variable-valeur}
valeur

variable=autre
echo ${variable-valeur}
autre

Il est aussi possible de remplacer une valeur, si et seulement si elle existe:

echo ${variable+valeur}


variable=autre
echo ${variable+valeur}
valeur

Nom de fichier

La commande basename permet, étant donné un path, d’en extaire le nom du fichier.

basename /foo/bar/baz.ext
baz.ext

Il n’est pas rare de devoir récupérer le nom d’un fichier sans son extension:

variable=$(basename /foo/bar/baz.ext)
echo ${variable%.*}
baz

Et, parfois, les fichiers on plusieurs extensions:

variable=$(basename /foo/bar.baz.ext)
echo ${variable%%.*}
bar

Et, pour finir, parfois l’extension est connue d’avance:

tree scripts
scripts/
├── bar.py
├── baz.py
└── foo.py

for file in scripts/*; do echo $(basename $file .py); done;
bar
baz
foo