自定义shell工具函数之random_str()

function random_str() {
  len=$1
  if [[ -z ${len} ]]; then
    len=16
  fi
  uuid=None
  if command -v dmidecode &>/dev/null; then
    uuid=$(dmidecode -t 1 | grep UUID | awk '{print $2}' | base64 | head -c ${len})
  fi
  if [[ "${#uuid}" == "${len}" ]]; then
    echo "${uuid}"
  else
    head -c100 < /dev/urandom | base64 | tr -dc A-Za-z0-9 | head -c ${len}; echo
  fi
}

这个 Bash 函数 random_str 的目的是生成一个随机字符串。它接受一个参数,即随机字符串的长度。下面是对这个函数的逐行解释:

  1. function random_str() {:这一行定义了一个名为 random_str 的函数。

  2. len=$1:这一行将函数的第一个参数赋值给变量 len。这个参数应该是想要生成的随机字符串的长度。

  3. if [[ -z ${len} ]]; then:这一行检查变量 len 是否为空(即没有提供长度参数)。

  4. len=16:如果 len 为空,那么将其默认设置为 16。

  5. fi:这一行结束了 if 语句。

  6. uuid=None:这一行初始化了一个名为 uuid 的变量,并将其设置为字符串 “None”。

  7. if command -v dmidecode &>/dev/null; then:这一行检查系统中是否存在 dmidecode 命令。command -v dmidecode 会返回 dmidecode 命令的路径,如果存在的话。&>/dev/null 将标准输出和标准错误都重定向到 /dev/null,这意味着不会在终端上显示任何输出。

  8. uuid=$(dmidecode -t 1 | grep UUID | awk '{print $2}' | base64 | head -c ${len}):如果存在 dmidecode 命令,这一行会尝试使用它来生成一个基于硬件UUID的随机字符串。

    • dmidecode -t 1:使用 dmidecode 命令获取系统信息,-t 1 表示只获取类型为 1 的信息,即系统信息。
    • grep UUID:从 dmidecode 的输出中查找包含 “UUID” 的行。
    • awk '{print $2}':使用 awk 命令打印每行的第二个字段,即 UUID 的值。
    • base64:将 UUID 的值转换为 base64 编码。
    • head -c ${len}:只获取前 len 个字符。
  9. fi:这一行结束了 if 语句。

  10. if [[ "${#uuid}" == "${len}" ]]; then:这一行检查 uuid 变量的长度是否等于 len

  11. echo "${uuid}":如果 uuid 的长度等于 len,则输出 uuid

  12. else:如果 uuid 的长度不等于 len,则执行 else 语句块。

  13. head -c100 < /dev/urandom | base64 | tr -dc A-Za-z0-9 | head -c ${len}; echo:这一行是生成随机字符串的另一种方法,它在 dmidecode 不可用或者生成的字符串长度不正确时使用。

    • head -c100 < /dev/urandom:从 /dev/urandom 设备读取前 100 个字符,这是一个生成随机数据的特殊设备。
    • base64:将随机数据转换为 base64 编码。
    • tr -dc A-Za-z0-9:使用 tr 命令删除所有不是字母和数字的字符。
    • head -c ${len}:只获取前 len 个字符。
    • echo:在最后输出字符串时,添加一个换行符。
  14. fi:这一行结束了 if-else 语句。

  15. }:这一行结束了函数定义。

总结来说,这个函数 random_str 会尝试使用系统的 dmidecode 命令生成一个基于硬件UUID的随机字符串,如果这个方法不可用或者生成的字符串长度不正确,它会使用 /dev/urandom 生成一个纯随机的字符串。函数最终会输出一个指定长度的随机字符串。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值