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

adduser $1
passwd $1
$2
$2

推荐答案

从"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

[Update] comments 中提出了几个问题:

passwd命令可能没有--stdin选项:使用chpasswd

如果使用bash以外的shell,"echo"可能不是内置命令,

在这种情况下,您应该使用另一种脚本语言.下面是一个Perl示例:

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

Linux相关问答推荐

GNC C:关于主要出发点混乱的 idea ?

抛出主,即未捕获到SIGSEGV中的异常结果

BASH-SCRIPT-在特定行合并两个文件

PERF显示不应该执行指令的内核的用户空间周期

一个关于Linux中的fork()和物理地址的奇怪问题

在查找命令中使用 printf

Linux BlueZ 5.65 hcitool 结合服务 UUID 和制造数据广告

为什么 liburing 写入性能低于预期?

inotifywait 可以说文件在另一个进程可以访问之前已关闭吗?

使用 bash 在包含模式的 java 文件中查找行,然后替换该行的另一部分

使用 AWS CLI 进行 Bash - 无法找到凭证

需要解释 Linux bash 内置 exec 命令行为

如何在 Linux 中为 C 或 C++ 的进程设置 CPU 亲和性?

禁用内存地址的随机化

Linux 的 TextMate 替代品

如何关闭被杀死的程序打开的套接字?

Linux:处理成服务

`cd //` 中的双斜杠 // 在 Linux 中是什么意思?

Linux(Ubuntu)终端-如何查看以前的页面不再可见

如何在我的终端中编辑文本文件