130

我正在尝试创建一个脚本来简化在 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

如您所见,某些字段需要输入。如何在脚本中请求输入变量?

4

5 回答 5

251

使用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"
于 2013-08-31T09:05:18.013 回答
11

是的,你会想做这样的事情:

echo -n "Enter Fullname: " 
read fullname

另一种选择是让他们在命令行上提供此信息。Getopts 是您最好的选择。

在 bash shell 脚本中使用 getopts 获取长短命令行选项

于 2013-08-31T04:13:17.287 回答
6

尝试这个

#/bin/bash

read -p "Enter a word: " word
echo "You entered $word"
于 2020-04-22T16:35:10.763 回答
4

你也可以试试zenity

user=$(zenity --entry --text 'Please enter the username:') || exit 1
于 2013-08-31T13:13:20.677 回答
1

https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html

一行从标准输入中读取,或者从作为参数提供给 -u 选项的文件描述符 fd 中读取,按照上述分词中所述拆分为单词,第一个单词分配给第一个名称,第二个单词分配给第二个名字,以此类推。如果单词多于名称,则将剩余的单词及其中间分隔符分配给姓氏。

echo "bash is awesome." | (read var1 var2; echo -e "Var1: $var1 \nVar2: $var2")

bash将是 var1
is awesome将是 var2启用从ubuntu手册中
echo -e 解释反斜杠转义。


所以完整的代码可以是:

echo -n "Enter Fullname: "
read fullname
echo "your full name is $fullname."
echo -n "test type more than 2 word: "
read var1 var2; echo -e
read var1 var2; echo -e "Var1: $var1 \nVar2: $var2")
于 2021-12-16T11:35:44.453 回答