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.603 ]
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;
Pegando as informações do usuario
Renomear todos os arquivos com uma determinada caracteristica
Transformando arquivos TXT em arquivos PDF
Comparação entre os escalonadores BFQ e MQ-Deadline (acesso a disco) no Arch e Debian
Conciliando o uso da ZRAM e SWAP em disco na sua máquina
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Converter os repositórios Debian para o novo formato com as chaves
Instalando Spotify no Debian 13
Realizar overclock no Miyoo Mini (plus ou normal)
linux mint reconhece microfone de lapela como fone de ouvido sem micro... (5)
E aí? O Warsaw já está funcionando no Debian 13? (2)
Dúvidas sobre a originalidade de conteúdos online (12)