我一直在运行useradd {user}
命令将用户添加到我的系统中,尽管我计划在自动化环境中运行它,并且它最终可能会再次运行,即使用户已经存在。
有没有一种方法可以让我仅在用户尚不存在时才运行它?用户没有主文件夹。
答案1
id -u somename
当用户不存在时返回非零退出代码。
您可以非常简单地测试它...(&>/dev/null
只是抑制正常输出/警告)
id -u somename &>/dev/null || useradd somename
答案2
尝试这个:
useradd {user} || echo "User already exists."
甚至这个:
useradd {user} || true
答案3
除非您只有一小部分系统,否则您就问错了问题。答案是根本不运行 useradd,而是将这项工作留给像 puppet 或 Chef 这样的配置管理解决方案。这将允许您的用户定义集中化,并防止您运行 for 循环以及使用 root 用户使用 ssh 来配置您的系统。您将始终让系统处于已知的配置状态。
puppet 的文档位于http://docs.puppetlabs.com
以木偶中的例子为例:
user { "bob" :
password => "$1$yv3n066X$Vpb05Ac/fHTicNdT9T5vz1", # generated with `openssl passwd -1`
ensure => present, # ensure => absent to remove
managehome => true,
}
答案4
useradd
如果用户已经存在,则不会再次添加该用户,其目的是确保 uid 号和 uid 登录名是唯一的。如果您计划运行一批,请确保所使用的 uid 是唯一的;useradd
会抱怨有问题的条目,并且您需要捕获错误/stderr 以查看哪些用户帐户在进入帐户系统时出现问题(/etc/passwd
、group
、shadow
)。