¿Cómo leer la entrada del usuario en una variable en Bash?

83

Estoy intentando crear un script que simplifique el proceso de creación de un nuevo usuario en un dispositivo iOS. Aquí están los pasos desglosados.

# 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

Como puede ver, algunos campos requieren entrada. ¿Cómo puedo solicitar la entrada de una variable en un script?

Geofferey
fuente

Respuestas:

171

Utilizar read -p:

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

Si quieres confirmar:

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

También debe citar sus variables para evitar la expansión del nombre de ruta y la división de palabras con espacios:

# passwd "$user"
# mkdir "$home"
# chown "$user:$group" "$home"
konsolebox
fuente
7
Puede utilizar ${confirm^^} == 'YES'.
Aleks-Daniel Jakimenko-A.
1
@ Aleks-DanielJakimenko Ese es un método habitual que usan otras personas, pero solo es compatible con 4.0+.
konsolebox
Como nota al margen: exit 1significa salir con error.
Timo
2

¡También puedes probar zenity !

user=$(zenity --entry --text 'Please enter the username:') || exit 1
Aleks-Daniel Jakimenko-A.
fuente
1

Prueba esto

#/bin/bash

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