1

В bash я хочу предложить пользователю ввести данные в скрипт. Допустим, входные данные:

#!/bin/bash

echo "Please enter a number."
read NUM

# User enters "12345678"

Как я могу использовать следующую команду, чтобы сгенерировать случайное число, а затем проверить, совпадает ли это число с одной из цифр пользовательского ввода?

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

Я хочу иметь возможность проверить, соответствует ли сгенерированный номер какой-либо из цифр в пользовательском вводе, который я выбрал. Я хочу иметь возможность сравнивать сгенерированное число с любой из цифр в пользовательском вводе, не делая пользовательский ввод отдельными переменными.

(edit) Если введено: 12345678 Я хочу, чтобы генератор генерировал числа, пока не будет сопоставлено 1-е место, затем 10-е место, затем 100-е место и т. д., пока не будет найдено полное совпадение строк. Мне нужно, чтобы выходные данные команды tr сравнивались с единичным значением за раз в последовательности.

Как бы я сделал это в Bash?

1 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .