首页 > 解决方案 > 如何为需要 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 位随机数,但是我不知道随机数是什么,所以本质上它是一种蛮力,或者只是我手动猜测密码。

标签: bash

解决方案


如果您只需要一个随机的 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

推荐阅读