一尘不染

在shell脚本中使用passwd命令

linux

我正在编写一个shell脚本,以自动添加新用户并更新其密码。我不知道如何获取passwd来从shell脚本中读取,而不是交互式地提示我输入新密码。我的代码如下。

adduser $ 1
密码$ 1
$2
$2

阅读 1302

收藏
2020-06-02

共1个答案

一尘不染

来自“ man 1 passwd”:

   --stdin
          This option is used to indicate that passwd should read the new
          password from standard input, which can be a pipe.

所以你的情况

adduser "$1"
echo "$2" | passwd "$1" --stdin

[ 更新 ]评论中提到了一些问题:

您的passwd命令可能没有--stdin选项:chpasswd按照ashawley的建议使用实用程序。

如果您使用的不是bash外壳,则“echo”可能不是内置命令,外壳将调用/bin/echo。这是不安全的,因为密码将显示在进程表中,并且可以通过诸如之类的工具查看ps

在这种情况下,您应该使用另一种脚本语言。这是Perl中的示例:

#!/usr/bin/perl -w
open my $pipe, '|chpasswd' or die "can't open pipe: $!";
print {$pipe} "$username:$password";
close $pipe
2020-06-02