详解Linux  Shell 实现一个获取任意位数的随机密码的脚本

发布时间 - 2026-01-11 02:37:24    点击率:

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 下可能会有稍许不同。

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


# Linux  # Shell  # 随机密码  # 随机密码的实现  # Shell创建用户并生成随机密码脚本分享  # PowerShell生成随机密码的方法  # Shell脚本生成随机密码的若干种可能  # 随机数  # 设置为  # 就可以  # 会有  # 如有  # 都能  # 并在  # 所需  # 希望能  # 这不是  # 都很  # 如果没有  # 可以直接  # 写了  # 作为一个  # 将此  # 谢谢大家  # 这两天  # 想用  # 命名为 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  七夕网站制作视频,七夕大促活动怎么报名?  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  详解CentOS6.5 安装 MySQL5.1.71的方法  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  Mybatis 中的insertOrUpdate操作  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  高防服务器租用如何选择配置与防御等级?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  Python文件异常处理策略_健壮性说明【指导】  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  移动端脚本框架Hammer.js  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  如何快速使用云服务器搭建个人网站?  Laravel观察者模式如何使用_Laravel Model Observer配置  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Android自定义控件实现温度旋转按钮效果  Laravel中的withCount方法怎么高效统计关联模型数量  如何在IIS管理器中快速创建并配置网站?  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  如何在香港服务器上快速搭建免备案网站?  如何为不同团队 ID 动态生成多个独立按钮  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  如何在新浪SAE免费搭建个人博客?  怎么用AI帮你设计一套个性化的手机App图标?  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  LinuxCD持续部署教程_自动发布与回滚机制  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  Laravel怎么在Controller之外的地方验证数据  实现点击下箭头变上箭头来回切换的两种方法【推荐】  JS碰撞运动实现方法详解  Laravel如何生成URL和重定向?(路由助手函数)  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  如何在景安云服务器上绑定域名并配置虚拟主机?  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  如何在云服务器上快速搭建个人网站?  详解jQuery停止动画——stop()方法的使用  深入理解Android中的xmlns:tools属性  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  手机网站制作与建设方案,手机网站如何建设?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?