- Gerar link
- Outros aplicativos
Postagem em destaque
- Gerar link
- Outros aplicativos
clique na imagem para ampliar. |
Um número aleatório pertence a uma série numérica que por definição não pode ser previsto a partir dos membros anteriores a sua série e é um conceito relativo à série numérica a que o número pertence.
Assim como em outras linguagem, o shell possui convenções que nos permite gerar números aleatórios a partir de um intervalo especificado, ou seja, determinar um número base inicial e final afim de garantir que o número gerado esteja dentro do intervalo estipulado; Ou simplesmente omitir o mesmo para gerar números dentro do intervalo máximo suportado.
Vou citar algumas formas para geração de números aleatórios. São elas:
1. $RANDOM
É uma variável de ambiente (bash building) que a cada vez que é referenciada, um número inteiro aleatório entre 0 e 32767 é gerado.
$ echo $RANDOM
24199
$ echo $RANDOM
2203
$ echo $RANDOM
10203
Para definir o valor máximo utilize a seguinte sintaxe:
$((RANDOM%VALOR_MAX+1))
Gerando um número aleatório que esteja entre 1 e 100.
$ echo $((RANDOM%100+1))
61
$ echo $((RANDOM%100+1))
76
$ echo $((RANDOM%100+1))
80
2. /dev/urandom
É um arquivo especial que ativa o pool interno para produzir bits pseudoaleatórios. Porém por si só não resolve o problema, pois lotaria a tela de lixo se imprimisse o seu conteúdo.
$ cat /dev/urandom
@V*���*�n\���P�K��B!�%�HB�E�a\(��#�S�UGZ�M�~>U6^�W���M5�
�Cs�k2��M!���ˏ�]d�e��U�Җ���|�G`����j��=V_�0������(��Y���h$z�
É necessário tratar a saída, filtrar somente os dígitos e delimitar a quantidade de caracteres a serem exibidos. Para isso teremos que utilizar os comandos a seguir:
$ tr -dc 0-9 < /dev/urandom | head -c NUM_BYTES
Gerando um número aleatório entre 0 e 999 (considerando que o valor máximo tem 3 dígitos).
$ tr -dc 0-9 < /dev/urandom | head -c 3
706
$ tr -dc 0-9 < /dev/urandom | head -c 3
080
3. shuf
Um comando especifico para geração de números aleatórios que fornece algumas opções interessantes e de fácil aplicação (recomendado). Para sua execução é necessário que o usuário informe o intervalo ou elementos que deseja trabalhar. No caso especifico onde iremos trabalhar com números, utilizaremos o parâmetro (-i, --input-range=LO-HI); Onde (LO) é o valor inicial e (HI) o valor final.
Por padrão o comando gera uma lista aleatória única contendo uma quantidade de elementos equivalentes a quantidade de números contidos no intervalo.
Gerando uma lista de números aleatórios de 1 à 5.
$ shuf -i 1-5
2
4
3
1
5
Gerando um único número entre 10 e 70.
$ shuf -i 10-70 -n 1
22
$ shuf -i 10-70 -n 1
66
$ shuf -i 10-70 -n 1
46
Comentários
É importante salientar que essas bibliotecas URANDOM e SRADOM não geram números aleatórios, mas sim pseudoaleatórios e embora sejam usadas para gerar senhas em alguns programas, não são recomendáveis para este fim. Números realmente aleatórios vem de fenômenos da natureza acoplados em medidores digitais. Onde o universo gerador de variáveis é quase impossível de se prever.
ResponderExcluirSim. Por isso tomei o cuidado de mencionar na postagem.
ExcluirBora jogar na mega da virada usando o SHUF !!!!
ResponderExcluir