Array de números aleatórios não-repetidos de um intervalo em Shellscript (Bashscript)
Publicado por Perfil removido (última atualização em 16/04/2012)
[ Hits: 5.784 ]
Este script preenche um array de tamanho N com números aleatórios pertencentes ao intervalo de 1 a N.
Ele gera um número e verifica se já foi inserido. Se sim, ele insere, gera outro e repete-se de novo. Se não, ele gera outro número e volta ao teste até o preenchimento completo do array.
Dá prá saber se foi repetido algum número com o seguinte comando:
$ ./alea001.sh | sort -n --key=2
Que pode ser melhorado usando-se comandos de linha como uniq, que filtram texto por critério de repetição.
O teste foi feito usando-se o número 52 porque é o mesmo número de cartas do baralho comum.
Por enquanto está sem falhas.
#!/bin/bash
# Para testar se não há números repetidos, usar por exemplo:
# ./alea001.sh | sort -n --key=2
unset VALOR i j k n vec;
VALOR=52;
n=$VALOR;
i=0;
while [[ i -lt n ]]; do
vec[$i]=-1;
let i++;
done;
i=0; j=0;
while [[ i -lt n ]]; do
let j=($RANDOM*VALOR)/32767 j++ k=0;
while [[ k -le i && ${vec[$k]} -ne j ]]; do
let k++;
done;
[[ k -eq $((i+1)) ]] && vec[$i]=$j && let i++;
done;
i=0;
while [[ i -lt n ]]; do
echo -e "$i\t${vec[$i]}";
let i++;
done;
unset VALOR i j k n vec;
Administrando Servidores Shell Script
Calculo de notas - Incrementar um array em shell dinamicamente
menu de interação 1 / 7 pt-br facil aprendizado
Recarregando as configurações do SQUID sem perder as conexões
Converte permissões de octal para textual e vice-versa
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor
Como rodar o Folding@home no Linux
Criando um painel de controle (Dashboard) para seu servidor com o Homepage
O Abismo entre o Código e o Chão: Saltos Tecnológicos e a Exclusão Estrutural no Brasil
Instalar e Configurar a santíssima trindade (PAP) no Void Linux
Pisando no acelerador do Linux Mint: Kernel XanMod, zRAM e Ajustes de Swap
Como compilar kernel no Linux Mint
Lançamento do Brutal DOOM test 6
Consertando o erro no Brave de webgl
Solução para ter de volta as bordas e barra de títulos das janelas em zenity no Debian 13.x
Seno, Coseno, Tangente em CLIPPER (0)
Inserir uma URL num arquvo pelo Ubuntu (CLIPPER) (0)
VMWare Player não conecta na rede nem consigo intercambiar arquivos (1)









