01 Jan 0001, 00:00

Share

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