Wie lese ich Benutzereingaben in eine Variable in Bash?

83

Ich versuche, ein Skript zu erstellen, das das Erstellen eines neuen Benutzers auf einem iOS-Gerät vereinfacht. Hier sind die Schritte aufgeschlüsselt.

# 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

Wie Sie sehen können, müssen einige Felder eingegeben werden. Wie kann ich eine Eingabe für eine Variable im Skript anfordern?

Geofferey
quelle

Antworten:

171

Verwendung read -p:

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

Wenn Sie bestätigen möchten:

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

Sie sollten auch Ihre Variablen in Anführungszeichen setzen, um die Erweiterung des Pfadnamens und die Wortteilung mit Leerzeichen zu verhindern:

# passwd "$user"
# mkdir "$home"
# chown "$user:$group" "$home"
konsolebox
quelle
7
Sie können verwenden ${confirm^^} == 'YES'.
Aleks-Daniel Jakimenko-A.
1
@ Aleks-DanielJakimenko Das ist eine übliche Methode, die andere Leute verwenden, aber sie ist nur mit 4.0+ kompatibel.
konsolebox
Als Randnotiz: exit 1bedeutet Beenden mit Fehler.
Timo
2

Sie können auch Zenity ausprobieren !

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

Versuche dies

#/bin/bash

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