Como obtenho aleatoriedade na linha de comando?

11

Como executar aleatoriamente um comando dentro da lista de comandos especificada? Útil para escolher aleatoriamente som de inicialização, papel de parede ou executar comandos.

Em geral, se eu tiver comandos para execução da seguinte maneira: Como obtenho aleatoriedade:?

#!/bin/bash
<command_1>
<command_2>
<command_3>
.
.
.
<command_n>

Então eu quero executar aleatoriamente apenas um comando das possibilidades acima quando o script é executado!

Como fazer isso?

    
por Pandya 07.07.2014 / 07:03

4 respostas

22

A variável $RANDOM (na verdade, uma função bash) retorna um número aleatório de 0 a 32767, inclusive.

Normalmente, você deseja limitar o intervalo dividindo-o por um número e recebendo o restante, por exemplo,

# output a random number 0 to 3
echo $((RANDOM % 4))

Neste exemplo simplista, será um pouco tendencioso para qualquer divisor que não se divida igualmente em 32768 (por exemplo, qualquer coisa que não seja um poder de dois), mas no seu cenário eu não acho que você d ser incomodado por um ligeiro viés.

Para escolher um arquivo aleatório, você nomearia seus arquivos como:

file0.jpg
file1.jpg
file2.jpg
file3.jpg

E então você pode escolher um aleatório com

# output a random file from file0.jpg to file3.jpg
echo "file$((RANDOM % 4)).jpg"
    
por thomasrutter 07.07.2014 / 07:18
7

De acordo com a resposta @neon_overload (usando RANDOM ),
Eu posso colocar RANDOM no script de exemplo da seguinte forma (para 4 comandos):

#!/bin/bash
random_selection=$((RANDOM % 4))

case $random_selection in

  0)
  <command_1>
  ;;

  1)
  <command_2>
  ;;

  2)
  <command_3>
  ;;

  3)
  <command_4>
  ;;

esac
    
por Pandya 07.07.2014 / 07:47
2

Se você deseja aleatoriedade por meio de um site externo em vez de um gerado pelo seu computador, é possível usar esse script:

curl "http://www.random.org/integers/?num=1&min=&max=&col=1&base=10&format=plain&rnd=new"

Executar como rand (MIN) (MAX) (supondo que você salvou como / usr / bin / rand)

Você pode ter que instalar o curl primeiro (sudo apt-get install curl) se ele ainda não estiver instalado.

    
por iggyvolz 07.07.2014 / 18:29
0

Você pode usar shuf comando de GNU coreutils .

NAME
       shuf - generate random permutations

SYNOPSIS
       shuf [OPTION]... [FILE]
       shuf -e [OPTION]... [ARG]...
       shuf -i LO-HI [OPTION]...

DESCRIPTION
       Write a random permutation of the input lines to standard output

Exemplo:

$ shuf -i 1-5
4
1
2
5
3

$ shuf -e Debian Ubuntu Trisquel 
Trisquel
Debian
Ubuntu

Agora, para obter uma entrada aleatória, você pode usar -n 1 , que gera a primeira linha.

Exemplo para imprimir números aleatórios de 1-100:

$ shuf -i 1-100 -n 1
37

Se você tem file com os seguintes conteúdos:

$ cat file
command-1
command-2
command-3
command-4
command-5

Você também pode fazer algo como:

$ shuf file -n 1
command-3
    
por Pandya 06.03.2016 / 10:49