Pular para o conteúdo

Array de números aleatórios não-repetidos de um intervalo em Shellscript (Bashscript)

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.
Perfil removido removido
Hits: 5.832 Categoria: Shell Script Subcategoria: Introdução
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

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.
Download alea001.sh Enviar nova versão

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;

Automatiza a instalação do necessário no Debian 8

Gerenciamento do Usuario no SAMBA /

Assistente de conexão Wireless - KDialog

pimg na rede

Adiciona usuário e máquinas PDC samba

#1 Comentário enviado por vitinho217 em 11/06/2014 - 09:13h
Exelente script, obrigado pela contribuição.

Contribuir com comentário

Entre na sua conta para comentar.