• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    详解Linux  Shell 实现一个获取任意位数的随机密码的脚本
    POST TIME:2021-10-18 16:07

    Shell 命令行,实现一个获取任意位数的随机密码的脚本

    每次我们想要获得一个密码的时候都很头疼,于是我之前自己用nodejs写了一个 Shell 脚本。这两天在学习 bash Shell 所以,想用同样的逻辑实现一个获取任意位数随机密码的脚本。

    我成功了 :)

    分析问题

    我们假设我们需要的密码是大小写字母以及数字的组合,并且剔除掉 1,l,0,O,o 这些不便于认知的字符。

    然后随机的读取其中的字符,组合成一个我们需要的密码,最后输出。

    理顺了逻辑之后,我想到有下面的知识点是我之前不是很熟悉的。不过没关系,善用搜索引擎,这些问题都能解决

    1. 任意位数,所以需要接受传参
    2. 如果没有传参,则要给一个默认值
    3. 需要实现随机数效果
    4. 字符串追加,这个倒是蛮简单的
    5. 获取字符串中指定位数的字符
    6. 数字向上取整

    实现代码

    最终代码如下:

    #!/bin/bash
    # 如果得到参数 则将得到的参数作为密码的位数,否则指定密码位数为8
    if [ -n "$1" ]; then length=$1;
    else length=8; fi
    
    # 设定可以作为密码的字符串
    chars='abcdefghijkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789'
    
    # 获取上面的字符串的长度,其实可以直接数一下,这不是练一下 shell 嘛
    charsLength=`echo $chars | wc -m | sed 's/^[ \t]*//g'`
    
    # 初始的为空
    pw=''
    
    # 根据所需密码长度进行循环
    for ((i=0;i$length;i++));do
    
     # 取得一个随机数
     # $RANDOM 是获取一个小于 32767 的随机数
     # 所以除以 32767 就可以得到一个 0 - 1 之间的随机小数 
     r=`echo $RANDOM/32767 | bc -l`
    
     # 根据随机数*字符长度取得一个数字
     num=`echo $r*$charsLength | bc`
    
     # 将取得数字向上取整,并在字符串中截取对应位置的字符
     w=`echo $chars | cut -c$((${num//.*/+1}))`
    
     # 字符追加到 pw 这个变量
     pw=$pw$w
    done
    
    # 输出我们想要的密码
    echo $pw
    
    

    运行一下,果然得到了我们想要的结果。

    将这个命令作为一个系统命令,可以随时执行

    1. 我们在 ~目录下面新建一个 .bin 的文件夹
    2. 将 ~/.bin 设置为环境变量
    3. 然后将此脚本放到改文件夹下面,并命名为 getpass
    4. chmod +x getpass 添加可执行权限

    然后我们就可以随时输出这个命令,来得到我们想要的密码了。

    将 ~/.bin 设置为环境变量

    cd ~
    mkdir .bin
    vim .bash_profile
    

    在 .bash_profile 文件中添加

    export PATH="$PATH:~/.bin"

    其他不说了,学习 shell 的话,一些基本的命令应该是没有问题的。

    以上脚本均在 mac 下测试通过,在 Linux 下可能会有稍许不同。

    如有疑问请留言,或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    您可能感兴趣的文章:
    • Shell创建用户并生成随机密码脚本分享
    • PowerShell生成随机密码的方法
    • Shell脚本生成随机密码的若干种可能
    上一篇:详解Shell 命令行批量处理图片文件名的实例
    下一篇:Linux Shell循环中实现展示进度百分比的实现方法
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信