Shell脚本:如何从文件中提取随机字母序列?

Shell脚本:如何从文件中提取随机字母序列?,shell,grep,passwords,Shell,Grep,Passwords,我正在写一个脚本,应该可以自动更改测试用户的密码。 我有一个字典文件,其中包括我必须使用的所有相关密码,我试图了解如何从文件中提取一些随机密码,以便设置新密码,并记录测试用户获得的密码。。。我很难找到我应该使用的正确模式,你能帮我吗 提前感谢以下方法适用于中等大小的密码字典 将密码读入bash数组 开始一个while循环 提示输入用户的登录id 读身份证 使用$RANDOM在数组中生成索引 在那个位置拔出密码(你必须使用一些mod算法) 使用passwd命令更改密码(检查手册页) 根据需要记录

我正在写一个脚本,应该可以自动更改测试用户的密码。 我有一个字典文件,其中包括我必须使用的所有相关密码,我试图了解如何从文件中提取一些随机密码,以便设置新密码,并记录测试用户获得的密码。。。我很难找到我应该使用的正确模式,你能帮我吗


提前感谢

以下方法适用于中等大小的密码字典

  • 将密码读入bash数组
  • 开始一个while循环
  • 提示输入用户的登录id
  • 读身份证
  • 使用$RANDOM在数组中生成索引
  • 在那个位置拔出密码(你必须使用一些mod算法)
  • 使用
    passwd
    命令更改密码(检查手册页)
  • 根据需要记录用户和号码或密码
  • 回到循环的开始
您可以根据输入的空名称之类的内容退出循环

我希望这能有所帮助

2014年11月6日 我已经用一个完整的,如果有点不引人注目的解决方案编辑了这个答案。这适用于像我一样难以理解首选解决方案的简洁性的任何人。注意事项:

  • 在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'
%