228 votes

Lire une variable dans bash avec une valeur par défaut

Je dois lire une valeur du terminal dans un script bash. J'aimerais pouvoir fournir une valeur par défaut que l'utilisateur peut modifier.

 # Please enter your name: Ricardo^
 

Dans ce script, l'invite est "Veuillez entrer votre nom:" la valeur par défaut est "Ricardo" et le curseur se placerait après la valeur par défaut. Y at-il un moyen de faire cela dans un script bash?

345voto

ghostdog74 Points 86060

vous pouvez utiliser l' expansion des paramètres, par exemple

 read -p "Enter: " name
name=${name:-Richard}
echo $name
 

184voto

Jadav Points 536
read -e -p "Enter Your Name:" -i "Ricardo" NAME

echo $NAME

51voto

Dennis Williamson Points 105818

Dans Bash 4:

 name="Ricardo"
read -e -i "$name" -p "Please enter your name: " input
name="${input:-$name}"
 

Cela affiche le nom après l'invite comme ceci:

 Please enter your name: Ricardo
 

avec le curseur à la fin du nom et permet à l'utilisateur de le modifier. La dernière ligne est facultative et oblige le nom à être la valeur par défaut si l'utilisateur efface l'entrée ou la valeur par défaut (soumission d'une valeur null).

16voto

manish_s Points 1045

Code:

 IN_PATH_DEFAULT="/tmp/input.txt"
read -p "Please enter IN_PATH [$IN_PATH_DEFAULT]: " IN_PATH
IN_PATH="${IN_PATH:-$IN_PATH_DEFAULT}"

OUT_PATH_DEFAULT="/tmp/output.txt"
read -p "Please enter OUT_PATH [$OUT_PATH_DEFAULT]: " OUT_PATH
OUT_PATH="${OUT_PATH:-$OUT_PATH_DEFAULT}"

echo "Input: $IN_PATH Output: $OUT_PATH"
 

Échantillon échantillon:

 Please enter IN_PATH [/tmp/input.txt]: 
Please enter OUT_PATH [/tmp/output.txt]: ~/out.txt
Input: /tmp/input.txt Output: ~/out.txt
 

6voto

Jonathan Leffler Points 299946
name=Ricardo
echo "Please enter your name: $name \c"
read newname
[ -n "$newname" ] && name=$newname

Définir la valeur par défaut; imprimer; lire une nouvelle valeur; s'il y a une nouvelle valeur, l'utiliser à la place de la valeur par défaut. Il est (ou était) un peu de variations entre les coquilles et des systèmes sur la façon de supprimer un saut de ligne à la fin d'une invite de commandes. Le '\c' notation semble fonctionner sur mac os X 10.6.3 avec un 3.x bash, et fonctionne sur la plupart des variantes d'Unix, dérivé de System V, à l'aide de Korn shell Bourne ou des coquilles.

Notez également que l'utilisateur ne serait probablement pas réaliser ce qui se passe derrière les coulisses; leur de nouvelles données seraient entrés après le nom déjà sur l'écran. Il pourrait être préférable de le formater:

echo "Please enter your name ($name): \c"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X