Shell脚本:如何从文件中提取随机字母序列?
我正在写一个脚本,应该可以自动更改测试用户的密码。 我有一个字典文件,其中包括我必须使用的所有相关密码,我试图了解如何从文件中提取一些随机密码,以便设置新密码,并记录测试用户获得的密码。。。我很难找到我应该使用的正确模式,你能帮我吗Shell脚本:如何从文件中提取随机字母序列?,shell,grep,passwords,Shell,Grep,Passwords,我正在写一个脚本,应该可以自动更改测试用户的密码。 我有一个字典文件,其中包括我必须使用的所有相关密码,我试图了解如何从文件中提取一些随机密码,以便设置新密码,并记录测试用户获得的密码。。。我很难找到我应该使用的正确模式,你能帮我吗 提前感谢以下方法适用于中等大小的密码字典 将密码读入bash数组 开始一个while循环 提示输入用户的登录id 读身份证 使用$RANDOM在数组中生成索引 在那个位置拔出密码(你必须使用一些mod算法) 使用passwd命令更改密码(检查手册页) 根据需要记录
提前感谢以下方法适用于中等大小的密码字典
- 将密码读入bash数组
- 开始一个while循环
- 提示输入用户的登录id
- 读身份证
- 使用$RANDOM在数组中生成索引
- 在那个位置拔出密码(你必须使用一些mod算法)
- 使用
命令更改密码(检查手册页)passwd
- 根据需要记录用户和号码或密码
- 回到循环的开始
- 在bash中,必须使用
declare-a yourray
- 您还应该指定一个专用的索引变量:
arrIdx=0
- Bash数组是动态的,因此不需要声明其大小
#!/bin/bash
PRG=`basename $0`
if [ $# -lt 2 ]; then
echo "usage $PRG password_file change_log"
exit -1
fi
INFILE=$1
LOGFILE=$2
declare -a passwdArr
arrIdx=0
newPasswd=
for inputPasswd in `cat $INFILE`; do
passwdArr[$arrIdx]=$inputPasswd
echo "inputPasswd = $inputPasswd, arrIdx = $arrIdx, passwdArr[arrIdx] = ${passwdArr[$arrIdx]}"
((arrIdx += 1)) # double parentheses ensure arithmetic evaluation
done
arrSize=$arrIdx # one more than the mximum index
USER="xxx"
while [ "$USER" != "" ]; do
echo "enter user ID:"
read USER
if [ "$USER" != "" ]; then # Do nothing in this case
arrIdx=`expr $RANDOM % $arrSize`
echo "arrIdx = $arrIdx"
newPasswd=${passwdArr[$arrIdx]}
echo "$arrIdx $USER $newPasswd" >> $LOGFILE
echo -e "$newPasswd\n$newPasswd" | passwd $USER
fi
done
重要…如果循环中需要[“$USER”!=”]测试,以避免无意中更改运行脚本的管理员的密码 如果您的shell支持
$RANDOM
(bash支持),并且允许的密码包含在名为paswd
的文件中,则每行一个密码,您可以尝试
new_pass=$(awk NR==$RANDOM'%'`wc -l paswd| cut -d\ -f1`'+1' paswd)
使用不同文件的示例
使用grep有特殊的原因吗?我可以想象使用bash和cat命令做类似的事情。欢迎任何方式。。。我以为这已经和grep结束了…我已经编辑了我的答案,给你一些提示。我现在得走了,不过我看看今晚晚些时候能不能给你回电话。如果你有关于bash的具体问题,我相信会有很多人给出答案。这是一个很好的详细答案,但我不知道如何执行it@Itai我想知道您是否愿意将问题的标题改为类似的“shell脚本:从文件中随机选择一行”,因为在我看来,这对更多人来说更有意义。。。发送以供批准。
for x in {1..5} ; do
> a=$(mawk NR==$RANDOM'%'`wc -l .bashrc| cut -d\ -f1`'+1' .bashrc)
> echo $x "$a"
> done
1 muvi ${1}"$num" && break
2 $1/* ; }
3 alias acse='apt-cache search'
4 xc () { export cnt=`expr $cnt + 1` ; u=$1; shift ; x $lett`printf "%4.4d" $cnt` $u -1 $* ; }
5 alias logout='xfce4-session-logout --logout'
%