Як прочитати введення користувача у змінну в Bash?


89

Я намагаюся створити сценарій, який спрощує процес створення нового користувача на пристрої iOS. Ось етапи, розбиті.

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

Як бачите, деякі поля вимагають введення. Як я можу запитати введення змінної в сценарії?

Відповіді:


180

Використання read -p:

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

Якщо ви хочете підтвердити:

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

Вам також слід навести свої змінні, щоб запобігти розширенню назви шляху та розбиттю слів пробілами:

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

7
Можна використовувати ${confirm^^} == 'YES'.
Алекс-Даніель Якименко-А.

1
@ Aleks-DanielJakimenko Це звичайний метод, який використовують інші люди, але він сумісний лише з 4.0+.
konsolebox

6

Так, ви захочете зробити щось подібне:

echo -n "Enter Fullname: " 
read fullname

Іншим варіантом було б, щоб вони надавали цю інформацію в командному рядку. Getopts - це найкращий вибір.

Використання getopts у сценарії оболонки bash для отримання довгих та коротких параметрів командного рядка



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.