首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在shell中打印6位OTP数字

如何在shell中打印6位OTP数字
EN

Unix & Linux用户
提问于 2020-11-09 13:20:25
回答 2查看 1.7K关注 0票数 0

我已经编写了一个生成6位随机OTP号的脚本,有什么简单的方法可以用较少的代码行获得6位OTP号吗?

My代码:

代码语言:javascript
复制
#!/bin/bash

dynamic_array=()

for (( i =1 ; i<=5 ; i++))
{
    store_digit=$(shuf -i0-9 -n1) ; dynamic_array+=("$store_digit")
}
str_array_value="${dynamic_array[*]}" ; echo "Output : ${str_array_value// /}" 
EN

回答 2

Unix & Linux用户

发布于 2020-11-09 13:56:33

如果您想要生成从共享秘密生成的实际OTP令牌,而不只是随机的六位字符串,您无法进行验证,则可以使用oathtool

否则,steeldriver的评论就足够了:printf '%06d\n' "$(shuf -i0-999999 -n1)"

票数 1
EN

Unix & Linux用户

发布于 2020-11-09 22:10:09

对于6位小数,我们需要一个大于15位的随机数。在这里,我将使用一个30位随机数:

代码语言:javascript
复制
((RND=RANDOM<<15|RANDOM)) ; echo ${RND: -6}

编辑:只是几个测试,为了透视.

代码语言:javascript
复制
~# time for i in {0..2000} ;do printf '%06d\n' "$(shuf -i0-999999 -n1)" >/dev/null ;done

real    0m13.814s
user    0m9.573s
sys     0m4.302s

~# time for i in {0..2000} ;do ((RND=RANDOM<<15|RANDOM)) ; echo ${RND: -6} >/dev/null ;done

real    0m0.120s
user    0m0.101s
sys     0m0.019s
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/618760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档