将随机生成的整数与字符串中的特定位置值进行匹配

将随机生成的整数与字符串中的特定位置值进行匹配

在 bash 中,我想提示用户在脚本中输入。假设输入是:

#!/bin/bash

echo "Please enter a number."
read NUM

# User enters "12345678"

如何使用下一个命令生成一个随机数,然后检查该数字是否与用户输入的某个数字相同?

tr -dc '0-9' </dev/urandom | head -c 1

我希望能够检查生成的数字是否与我选择的用户输入中的任何数字匹配。我希望能够将生成的数字与用户输入中的任何数字进行比较,而无需将用户输入设为单独的变量。

(编辑) 如果输入是:12345678 我希望生成器生成数字,直到个位匹配,然后是十位,然后是百位,依此类推,直到完全匹配字符串。我需要将 tr 命令输出按顺序与单个位值进行比较。

我该如何在 bash 中做到这一点?

答案1

我不确定我是否理解了您的需求。如果以下代码不能解决您的问题,请告诉我。

# !/bin/bash

echo "Please enter a number."
read NUM

while read -n1 DIGIT; do
    echo "Digit: $DIGIT"
    while true; do
        RND=$((RANDOM%10))
        if [[ "$RND" == "$DIGIT" ]]; then
            echo "$RND matches.";
            break;
        else
            echo "$RND doesn't match.";
        fi
    done
done < <(echo -n "$NUM" | rev)

输出示例:

Please enter a number.
537
Digit: 7
4 doesn't match.
6 doesn't match.
7 matches.
Digit: 3
3 matches.
Digit: 5
9 doesn't match.
7 doesn't match.
0 doesn't match.
5 matches.

您可以RND=$((RANDOM%10))用替换RND="$(tr -dc '0-9' </dev/urandom | head -c 1)",但前者更快。

下面的代码可能对你来说就足够了:

# !/bin/bash

echo "Please enter a number."
read NUM

RND=$((RANDOM%10))

if [[ $NUM == *"$RND"* ]]; then
  echo "It matches";
fi

相关内容