01 Jan 0001, 00:00

Share

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

https://unix.stackexchange.com/questions/244465/how-to-make-bash-built-in-read-ignore-commented-or-empty-lines

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")