Как прочитать ввод пользователя в переменную в 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.