Come posso ottenere casualità in linea di comando?

11

Come eseguire in modo casuale un comando all'interno dell'elenco di comandi specificato? Utile per scegliere in modo casuale suoni di avvio, sfondi o comandi di esecuzione.

In generale, se ho i comandi per l'esecuzione come segue, come ottengo casualità:?

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

Quindi voglio eseguire a caso un solo comando dalle possibilità di sopra quando viene eseguito lo script!

Come si fa?

    
posta Pandya 07.07.2014 - 07:03
fonte

4 risposte

22

La variabile $RANDOM (in realtà una funzione bash) restituisce un numero casuale compreso tra 0 e 32767 inclusi.

In genere vorresti limitare il suo intervallo dividendolo per un numero e prendine il resto, ad es.

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

In questo esempio semplicistico sarà leggermente sbilanciato per qualsiasi divisore che non divida equamente in 32768 (ad esempio, tutto ciò che non è un potere di due), ma nel tuo scenario non penso che tu sia " d essere turbato da un leggero pregiudizio.

Per scegliere un file casuale, dai un nome ai tuoi file qualcosa come:

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

E poi puoi sceglierne uno casuale con

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

In base alla risposta @neon_overload (utilizzando RANDOM ),
Posso mettere RANDOM nello script di esempio come segue (per 4 comandi):

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

case $random_selection in

  0)
  <command_1>
  ;;

  1)
  <command_2>
  ;;

  2)
  <command_3>
  ;;

  3)
  <command_4>
  ;;

esac
    
risposta data Pandya 07.07.2014 - 07:47
fonte
2

Se vuoi casualità attraverso un sito esterno anziché uno generato dal tuo computer, puoi usare questo script:

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

Esegui come rand (MIN) (MAX) (presupponendo di salvare come / usr / bin / rand)

Potrebbe essere necessario prima installare arricciatura (sudo apt-get install curl) se non è già installato.

    
risposta data iggyvolz 07.07.2014 - 18:29
fonte
0

Puoi utilizzare shuf comando da 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

Esempio:

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

$ shuf -e Debian Ubuntu Trisquel 
Trisquel
Debian
Ubuntu

Ora, per ottenere una voce casuale puoi usare -n 1 che emette la prima riga.

Esempio per la stampa di numeri casuali 1-100:

$ shuf -i 1-100 -n 1
37

Se hai file con i seguenti contenuti:

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

Puoi anche fare qualcosa del tipo:

$ shuf file -n 1
command-3
    
risposta data Pandya 06.03.2016 - 10:49
fonte

Leggi altre domande sui tag