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.327 ]

Download alea001.sh




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.

  



Esconder código-fonte

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


Scripts recomendados

menu de interação 1 / 7 pt-br facil aprendizado

Agenda Telefônica com Bash e Xdialog

Automação em cópia de arquivos de backup

Procedimentos de rotinas

Instalador do LOIC (Low Orbit Ion Cannon)


  

Comentários
[1] Comentário enviado por vitinho217 em 11/06/2014 - 09:13h

Exelente script, obrigado pela contribuição.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts