Comment demander des informations à l'utilisateur
pendant l'exécution d'un script, il peut arriver qu'on ait besoin de demander des informations à un utilisateur;
qu'il s'agisse d'une simple confirmation (continuer [Yn] :), ou d'une donnée plus large (quel est le chemin du fichier à traiter :),
il est question de lire des données depuis l'entrée standard avec la commande read.
Code:
read -p 'continuer [Yn] : '
le script semble figé, mais, en fait, il attend que l'utilisateur valide le texte qu'il a entré en appuyant sur la touche Enter.
/!\ l'invite affichée par l'option -p est envoyée sur la sortie d'erreur.
cela signifie que lorsque cette derniière [est redirigée] vers un fichier journal, l'invite ne sera plus visible. :(
il peut alors être préférable d'omettre cette option, et de faire un echo de l'invite sur la sortie standard, bien sûr. ;)
comme pour lire d'un fichier ligne par ligne, il est possible de demander à l'utilisateur d'entrer des données sous forme d'un tableau.
il faut que l'utilisateur respecte un certain format :
Code:
1 2 3 4 5 6
| $ read -a tableau
'mlk mlk' poi
$ printf '-> %s\n' "${tableau[@]}"
-> 'mlk
-> mlk'
-> poi |
il faut donc protéger le séparateur par défaut :
Code:
1 2 3 4 5
| $ read -a tableau
mlk\ mlk poi
$ printf '-> %s\n' "${tableau[@]}"
-> mlk mlk
-> poi |
on peut définir un séparateur avec l'IFS (Internal Field Separator) :
Code:
1 2 3 4 5
| $ IFS=';' read -a tableau
mlk mlk;poi
$ printf '-> %s\n' "${tableau[@]}"
-> mlk mlk
-> poi |