Corresponde a um inteiro gerado aleatoriamente com um valor de lugar específico em uma string

1

No bash eu quero solicitar ao usuário uma entrada em um script. Vamos dizer que a entrada é:

#!/bin/bash

echo "Please enter a number."
read NUM

# User enters "12345678"

Como posso usar o próximo comando para gerar um número aleatório e, em seguida, verificar se esse número é igual a um dos dígitos da entrada do usuário?

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

Eu quero poder verificar se o número gerado corresponde a qualquer um dos dígitos da entrada do usuário que eu escolhi. Eu quero ser capaz de comparar o número gerado com qualquer um dos dígitos na entrada do usuário sem ter que fazer a entrada do usuário ser variáveis separadas.

(editar) Se a entrada for: 12345678 eu quero que o gerador gere números até que o lugar do 1 seja correspondido, então o lugar do 10, então o lugar do 100 e assim por diante até que haja uma correspondência completa da string. Eu preciso que a saída do comando tr seja comparada com um único valor de lugar por vez em seqüência.

Como eu faria isso no bash?

    
por Yokai 13.05.2016 / 11:37

1 resposta

1

Não tenho certeza se entendi o que você precisa. Por favor, diga-me se o seguinte código não resolve o seu problema.

# !/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)

Exemplo de saída:

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.

Você pode substituir RND=$((RANDOM%10)) por RND="$(tr -dc '0-9' </dev/urandom | head -c 1)" , mas o primeiro é mais rápido.

O seguinte código pode ser suficiente para você:

# !/bin/bash

echo "Please enter a number."
read NUM

RND=$((RANDOM%10))

if [[ $NUM == *"$RND"* ]]; then
  echo "It matches";
fi
    
por 22.06.2016 / 21:31