bash - 如何为需要 4 个数字输入的 C 程序编写 Bash 脚本?
问题描述
我正在为 ac 程序编写一个 bash 脚本,该程序要求输入 4 个数字引脚。但是,当我编写脚本时,输出似乎在循环中运行,但它不会中断它被识别为程序将接受的正确数字的地方。
#!/bin/bash
RANGE=9000
count=${RANDOM:0:4}
while [[ "$count" -le $RANGE ]]
do
number=$RANDOM
(( "number %= $RANGE" ))
echo $number
if [[ "$count" == "$RANGE" ]]; then
break
fi
done
当我运行它时,我可以在输出中看到一些数字返回为 2 或 3 位,而不是 4。所以理论上,我想要做的是找到程序将采用的 4 位随机数,但是我不知道随机数是什么,所以本质上它是一种蛮力,或者只是我手动猜测密码。
解决方案
如果您只需要一个随机的 4 位数字,您可以这样做:
printf -v number "%04d" $((RANDOM % 10000))
为$RANDOM
您提供一个随机数0..32767
,将其% 10000
转换为范围0..9999
(不是完美分布,但对于大多数用途来说应该足够好),并printf
确保将前导零附加到它(例如,您将看到0042
而不是42
)。
您可以使用以下脚本对其进行测试:
(( total = 0 ))
(( bad = 0 ))
for i in {1..10000} ; do
printf -v x "%04d" $((RANDOM % 10000))
(( total += 1 ))
[[ "${x}" =~ ^[0-9]{4}$ ]] || { echo Bad ${x}; (( bad += 1 )); }
done
(( good = total - bad ))
echo "Tested: ${total}, bad ${bad}, good ${good}"
这应该给你:
Tested: 10000, bad 0, good 10000
推荐阅读
- javascript - WebGL:使用单独的纹理渲染两个对象
- c - C - scanf 变量,但它不是整数
- java - Java Maven编译错误“无法读取类”,其中包含枚举
- python - 反转元组字典查找的最高效方法是什么?
- docker - docker-compose 退出 docker-compose
- vb.net - 如何删除双表单标题栏?
- oauth-2.0 - 从 GET 注册请求中以纯文本形式返回客户端密码
- regex - 如何使用 groovy/Gradle DSL 获取与模式匹配的目录列表?
- c++ - 找到两个球体之间的单个交点
- javascript - 创建与接收到的 json 具有相同结构的对象