如何在Bash中将用户输入读入变量?

Geo*_*rey 58 bash shell

我正在尝试创建一个脚本,简化在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
Run Code Online (Sandbox Code Playgroud)

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

kon*_*box 111

用途read -p:

# fullname="USER INPUT"
read -p "Enter fullname: " fullname
# user="USER INPUT"
read -p "Enter user: " user
Run Code Online (Sandbox Code Playgroud)

如果您想确认:

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

您还应引用变量以防止路径名扩展和带空格的单词拆分:

# passwd "$user"
# mkdir "$home"
# chown "$user:$group" "$home"
Run Code Online (Sandbox Code Playgroud)

  • 你可以使用``$ {confirm ^^} =='YES'``. (5认同)
  • @Aleks-DanielJakimenko 这是其他人使用的常用方法,但它只与 4.0+ 兼容。 (2认同)

Nis*_*gle 18

尝试这个

#/bin/bash

read -p "Enter a word: " word
echo "You entered $word"
Run Code Online (Sandbox Code Playgroud)


Mat*_*haq 11

最大程度可移植(bash、zsh...):

printf "%s" "Enter fullname: "
read fullname
Run Code Online (Sandbox Code Playgroud)

这是最便携的提示阅读方式。诸如read -p和 之类的方法echo -n更有可能失败,具体取决于 shell。


jju*_*ien 6

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

echo -n "Enter Fullname: " 
read fullname
Run Code Online (Sandbox Code Playgroud)

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

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


Ale*_*-A. 5

您也可以尝试zenity

user=$(zenity --entry --text 'Please enter the username:') || exit 1
Run Code Online (Sandbox Code Playgroud)