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.733 ]
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;
Convertendo man pages em PDFs (Versão CShell)
Descobrindo MAC, IP, Broadcast e Máscara da placa de rede
Compartilhando conexão DHCP Velox - Linux Ubuntu
Descompactar todos os .zip de um diretório
Trabalhando Nativamente com Logs no Linux
Jogando Daikatana (Steam) com Patch 1.3 via Luxtorpeda no Linux
LazyDocker – Interface de Usuário em Tempo Real para o Docker
Apagar Todo o Histórico do Terminal
Linux Mint: Zram + Swapfile em Btrfs
Pendrive do Ubuntu 24.04 travando ao tentar fazer a instalação dual bo... (4)
Instalar Dual Boot, Linux+Windows. (14)
queria saber de uma coisa sobre o steam e derivados (3)
tentei instalar o steam pelo terminal, agora ele não abre (3)









