random-string()
{
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${1:-8} | head -n 1
}
使用此脚本生成几千个随机 8 位字母数字密码的列表。
有什么方法可以添加到此脚本以将生成的密码保存到 .txt 文件中?
我对 Linux 还比较陌生,在网上找到了很多资源,但这个却让我困惑。
答案1
使用I/O 重定向
your_script 1>> pwd_list
重定向和附加标准输出到文件pwd_list
。
例如
#!/bin/bash
random-string()
{
tr -dc 'a-zA-Z0-9' < /dev/urandom | fold -w "${1:-8}" | head -n 1
}
if [ -f out_pwd ]; then
rm out_pwd
fi
COUNTER=0
while [ "$COUNTER" -le 10 ]; do
random-string "$@" 1>> pwd_list
done
exit 0
并启动脚本,输出到文件中的pwd_list
是脚本的一部分
pwd_list
或者使用此脚本,在启动脚本时重定向文件中的输出
#!/bin/bash
random-string()
{
tr -dc 'a-zA-Z0-9' < /dev/urandom | fold -w "${1:-8}" | head -n 1
}
COUNTER=0
while [ "$COUNTER" -le 10 ]; do
random-string "$@"
done
exit 0
并使用以下命令启动脚本
script_name 1>> pwd_list
答案2
您已经定义了一个函数来生成包含并仅输出最顶层密码的random-string()
随机密码( ),从您的问题中不清楚您是否要将每次运行后生成的密码保存到文件中,或者您想以递归方式执行此操作。A-Za-z0-9
head -1
让我先简化你的命令:
tr -dc '[:alnum:]' </dev/urandom | fold -w 8 | head -n 1
tr
[:alnum]
采用表示字符的字符类A-Za-z0-9
没有必要
cat
,通过 STDIN 将文件名传递给tr
fold -w ${1:-8}
不需要参数扩展,只需使用fold -w 8
现在,在函数运行一次后保存输出(仅一个密码),这将每次覆盖文件,请使用 shell>
重定向运算符:
$ random_string () { tr -dc '[:alnum:]' </dev/urandom | fold -w 8 | head -n 1 ;} >foobar
$ random_string
$ cat foobar
MqJdehaO
我们将函数的 STDOUT 保存到当前目录中的random_string
文件中。foobar
在下次运行中,该文件将被新内容覆盖:
$ random_string
$ cat foobar
NP85OmWw
例如要覆盖文件,spamegg
使用>>
重定向,这意味着每次运行函数时,该函数的 STDOUT 都会附加到文件中:
$ random_string () { tr -dc '[:alnum:]' </dev/urandom | fold -w 8 | head -n 1 ;} >>spamegg
$ random_string
$ cat spamegg
vjwOe6TB
$ random_string
$ cat spamegg
vjwOe6TB
TBkv6qPh
为了使其更加灵活,我们可以通过将数字作为函数的第一个参数来定义一次运行中要保存多少个密码:
$ random_string () { tr -dc '[:alnum:]' </dev/urandom | fold -w 8 | head -n "$1" ;} >foobar
$ random_string 5
$ cat foobar
AV79dZeC
byitWYfX
eDBAldiI
6OxNU78H
gRs7SwEO
如您所见,已生成 5 个密码并保存在文件中foobar
,您可以将其更改5
为您想要的任意数量的密码。