我怎样才能创建一个包含一些需要用户输入的命令的 shell 脚本,例如
#!/bin/sh
useradd test
passwd test
passwd 命令需要一些输入(密码)。我可以通过 shell 脚本提供此输入吗?谢谢!
答案1
该passwd
命令专门针对此问题进行了保护(我相信这是为了减少它在暴力密码猜测攻击中的实用性)。它只从连接的终端读取输入,而不是从通常的 STDIN 读取输入 - 这使得使用它来编写密码更改脚本变得困难。
但请参阅手册页usermod
答案2
通常不会,因为大多数需要密码的程序不会读取标准输入就像常规 UNIX 进程一样。相反,它们将尝试从控制 tty 读取密码。
如果你想要编写这样的应用程序脚本,你必须使用类似预计。
答案3
例子:
$ ./input.sh foo bar baz
来源:
#!/bin/bash
# input.sh
echo $0 # input.sh
echo $1 # foo
echo $3 # baz
答案4
使用 expect。一个例子这里
#!/usr/bin/expect
set username [lindex $argv 0]
set newpass [lindex $argv 1]
spawn passwd $username
expect {*password:}
send "$newpass\r"
expect {*password:}
send "$newpass\r"