guest@6admin.io:~$

Bash : Mémento

Un mémo, pas un tutoriel. Les lignes bash qu’on cherche à chaque fois parce qu’on ne les tape pas assez souvent pour les retenir, mais assez souvent pour savoir qu’elles existent.

Les substitutions

# Remplacer la première occurrence
${var/ancien/nouveau}
# Remplacer toutes les occurrences
${var//ancien/nouveau}
# Supprimer le plus court pattern depuis le début
${var#pattern}
# Supprimer le plus court pattern depuis la fin
${var%pattern}
# Longueur de la chaîne
${#var}
# Valeur par défaut si vide
${var:-defaut}
# Assigner si vide
${var:=defaut}
# Erreur si vide
${var:?message}

Les tableaux

declare -a tab
tab[0]="premier"
tab+=(deuxieme troisieme)
echo ${tab[@]}
echo ${#tab[@]}
echo ${tab[1]}
# Les index disponibles
echo ${!tab[@]}

Les redirections

cmd > fichier       # stdout vers fichier (écrase)
cmd >> fichier      # stdout vers fichier (ajoute)
cmd 2> fichier      # stderr vers fichier
cmd &> fichier      # stdout + stderr vers fichier
cmd 2>&1            # stderr vers stdout
cmd > /dev/null 2>&1  # silence complet
cmd < fichier       # stdin depuis fichier

Les boucles

for i in $(ls); do echo "$i"; done
for i in {1..10}; do echo "$i"; done
while read ligne; do echo "$ligne"; done < fichier

Les tests

[[ -f fichier ]]    # existe et est un fichier régulier
[[ -d rep ]]        # existe et est un répertoire
[[ -s fichier ]]    # existe et non vide
[[ -x fichier ]]    # exécutable
[[ "$a" == "$b" ]]  # égalité de chaînes
[[ $n -eq $m ]]     # égalité de nombres
[[ $n -lt $m ]]     # less than

C’est tout. Le reste s’apprend avec man bash (section EXPANSION), mais ces lignes-ci sont celles qu’on colle dans un fichier et qu’on source.