222 votes

Comment lire l'entrée de l'utilisateur dans une variable en Bash ?

J'essaie de créer un script qui simplifie le processus de création d'un nouvel utilisateur sur un appareil iOS. Voici les étapes décomposées.

fullname="USER INPUT"
user="USER INPUT"
group=$user
uid=1000
gid=1000
home=/var/$user
echo "$group:*:$gid:$user" >> /private/etc/group
echo "$user::$uid:$gid::0:0:$fullname:$home:/bin/sh" >> /private/etc/master.passwd
passwd $user
mkdir $home
chown $user:$group $home

Comme vous pouvez le constater, certains champs doivent être renseignés. Comment puis-je demander la saisie d'une variable dans un script ?

398voto

konsolebox Points 21338

Utilice read -p :

# fullname="USER INPUT"
read -p "Enter fullname: " fullname
# user="USER INPUT"
read -p "Enter user: " user

Si vous voulez confirmer :

read -p "Continue? (Y/N): " confirm && [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] || exit 1

Vous devez également citer vos variables afin d'éviter l'expansion des noms de chemin et la division des mots par des espaces :

# passwd "$user"
# mkdir "$home"
# chown "$user:$group" "$home"

23voto

jjulien Points 249

Oui, tu vas vouloir faire quelque chose comme ça :

echo -n "Enter Fullname: " 
read fullname

Une autre option serait de leur demander de fournir ces informations sur la ligne de commande. Getopts est votre meilleure option.

Utilisation de getopts dans le shell bash script pour obtenir des options de ligne de commande longues et courtes.

18voto

Nishant Ingle Points 405

Essayez ceci

#/bin/bash

read -p "Enter a word: " word
echo "You entered $word"

5voto

Vous pouvez également essayer zenity !

user=$(zenity --entry --text 'Please enter the username:') || exit 1

4voto

Jian He Points 69

https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html

Une ligne est lue à partir de l'entrée standard ou du descripteur de fichier. fd fourni en tant qu'argument de l'option -u, divisée en mots comme comme décrit ci-dessus dans la section Séparation de mots, et le premier mot est attribué au au premier nom, le second mot au second nom, et ainsi de suite. Si s'il y a plus de mots que de noms, les mots restants et leurs mots restants et les délimiteurs qui les séparent sont affectés au dernier nom.

echo "bash is awesome." | (read var1 var2; echo -e "Var1: $var1 \nVar2: $var2")

bash sera var1
is awesome sera var2
echo -e permet d'interpréter les échappements de barres obliques inversées de ubuntu manuel.


donc le code complet peut être :

echo -n "Enter Fullname: "
read fullname
echo "your full name is $fullname."
echo -n "test type more than 2 word: "
read var1 var2; echo -e
read var1 var2; echo -e "Var1: $var1 \nVar2: $var2")

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