"读取-p"在linux shell脚本中做了什么?

Don*_*ame 9 linux shell

我有一个我复制和编辑过的脚本.如果可能的话,我需要解释几行.

这些是:

     read -p "please enter the username you wish to create: " username
     if id -u $username >/dev/null 2>&1; then
Run Code Online (Sandbox Code Playgroud)

怎么read -p办?怎么id -u办?怎么>/dev/null 2&1;办?然后在脚本中进一步说明这条线:

     sudo useradd -g $group -s $bash -d $homedir -m $username -p $password
Run Code Online (Sandbox Code Playgroud)

再次,请有人解释这一行中的所有减号吗?(-g,-s,-d,-m,-p)

gla*_*3dr 9

首先,结构<command> -<option>意味着您要<command>使用对应的选项执行<option>.-命令后面的A 表示以下字母是一个选项.大多数命令都有几个可以使用的选项.选项通常使用单个字母或几个单词来定义-.

旁注:对于两个单词而不是单个字母的选项,通常它会使用两个减号--而不是一个,表示它是一个"长命名"选项.

因此,使用该read -p示例,这意味着您要read使用p选项执行,该选项代表提示.

现在,有时一个选项需要一个参数.在您的示例中,useradd有参数的选项.参数通常定义为<command> -<option> [argument].因此,在useradd示例中,$group是该选项的参数g.


现在为命令本身:

read 是一个从标准输入读取的内置bash(不是POSIX shell命令).

  • -p选项使其作为提示读取,这意味着它在尝试读取输入之前不会添加尾随换行符.

if检查测试命令的返回状态(在这种情况下id -u $username >/dev/null 2>&1)

  • 如果返回状态为0,then则执行该部件

id 打印用户组和ID

  • -u选项"只打印有效用户ID".
  • >/dev/null 2>&1将标准输入和标准错误重定向到/dev/null,意味着它们不会打印到终端.

useradd 创建一个新用户

  • -g 为用户设置初始组
  • -s 设置用户登录shell的名称
  • -d 设置用户登录目录的名称
  • -m 如果不存在,则表示创建用户的主目录.
  • -p 定义用户的加密密码.

为了将来参考,您可以通过man <command>命令行在linux手册页中查找命令.这些手册页告诉您命令的作用,并解释其所有选项.

Bash内置read函数都在单个手册页上,这不是最容易使用的.对于那些我发现谷歌搜索他们更容易.通常http://ss64.com/会出现在结果中,其中包含来自bash内置手册页面的信息,但是通过命令分成不同的页面.我发现这更容易使用.

  • 注意`read -p`不是POSIX shell的一部分.它是一个bash /其他高级shell添加.你的答案对那些人来说是正确的,但值得指出的是,根据这个问题被标记的方式.值得指出的是,`-`表示下面的下一个字母对应于*选项*. (3认同)