Jak odczytać dane wejściowe użytkownika w zmiennej w Bash?

89

Próbuję stworzyć skrypt, który upraszcza proces tworzenia nowego użytkownika na urządzeniu iOS. Oto podzielone kroki.

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

Jak widać, niektóre pola wymagają wprowadzenia. Jak mogę zażądać wprowadzenia zmiennej w skrypcie?

Geofferey
źródło

Odpowiedzi:

180

Zastosowanie read -p:

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

Jeśli chcesz potwierdzić:

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

Powinieneś także cytować swoje zmienne, aby zapobiec rozwijaniu nazw plików i dzieleniu na słowa spacjami:

# passwd "$user"
# mkdir "$home"
# chown "$user:$group" "$home"
konsolebox
źródło
7
Możesz użyć ${confirm^^} == 'YES'.
Aleks-Daniel Jakimenko-A.
1
@ Aleks-DanielJakimenko To zwykła metoda, której używają inni ludzie, ale jest kompatybilna tylko z 4.0+.
konsolebox
3

Możesz także spróbować zenity !

user=$(zenity --entry --text 'Please enter the username:') || exit 1
Aleks-Daniel Jakimenko-A.
źródło
2

Spróbuj tego

#/bin/bash

read -p "Enter a word: " word
echo "You entered $word"
Nishant Ingle
źródło