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

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

Atualizar status do Twitter pelo terminal

Compartilhamento de internet 3g para uma rede domésctica

.conky

Menu em formato texto simples em BASH script feito com comando select

Firewall simples para desktops


  

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