bashrc
Session non interactive
Certains programmes peuvent avoir leur fonctionnement altéré/empêché par un bashrc personnalisé, par exemple avec des echo.
Pour éviter ça, on peut détecter le i dans la sortie de $- qui représente une session interactive, et quitter (cas dans le bashrc par défaut depuis au moins Debian 13)
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
On peut aussi juste exclure un set d’instruction via
if [[ $- == *i* ]]; then
...
fi
Vecteurs/tableaux
http://www.ixany.org/docs/Shell_Les_tableaux_en_bash.html
Les tableaux en bash peuvent être indicés ou associatifs. Pour l’instant je ne parle que des indicés.
Déclaration
Espaces indispensables près des parenthèses.
Déclaration implicite avec initialisation :
arraytest=( a b c )
Déclaration explicite :
declare -a tableau_indi
(ou pour un tableau associatif :)
declare -A tableau_asso
Remplacer “declare” par readonly pour un tableau en lecture seule.
Usage
Accolades indispensables.
${arraytest} équivaut à ${arraytest[0]}
Obtenir la première valeur :
echo ${arraytest[0]}
la 2e :
echo ${arraytest[1]}
etc…
Obtenir la liste de toutes les valeurs :
echo ${arraytest[@]}
Obtenir le nombre de valeurs :
echo ${#arraytest[@]}
Ajouter une valeur :
arraytest+=( d )
read
Permet de lire un fichier ligne par ligne, et de récupérer chaque champ.
IFS choisit le séparateur de champs (par défaut espace)
while IFS=\; read -r name domain port options; do
echo "nom : $name"
echo "port : $port"
echo "domain : $domain"
echo "options : $options "
done < "/my/data/file"
/my/data/file contient :
# name;domain;port;options
imap;mail.example.com;993;;
smtp;mail.example.com;465;;
commentaires dans le fichier
Pour que read ignore les lignes avec les commentaires, on peut utiliser ça en ligne finale :
done <(sed -e 's/[[:space:]]*#.*// ; /^[[:space:]]*$/d' "/my/data/file")