bash: Zufällig Elemente einer Liste auswählen ?

Post Reply
Message
Author
Rossi

bash: Zufällig Elemente einer Liste auswählen ?

#1 Post by Rossi »

Moin,

ist es möglich, aus einer Liste zufällig ein Element auszuwählen ?

Im Prinzip möchte ich, das bei jedem Aufruf des Skriptes ein Programm aus einem bestimmten Verzeichnis ausgeführt wird

#!/bin/sh
ls ~/bin > PROGS
PROG=(zufallsgeneriert aus ${PROGS} oder direkt aus `ls`)
~/bin/${PROG}
exit 0

Jochen

Re: bash: Zufällig Elemente einer Liste auswählen ?

#2 Post by Jochen »

Die bash macht es einem hier leicht:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">PROGRAMS=($(ls ~/bin))
MAX=${#PROGRAMS[<!--no-->*<!--no-->]}
PROGRAM=${PROGRAMS[<!--no-->$((RANDOM % MAX))<!--no-->]}
~/bin/$PROGRAM</font><hr></pre></blockquote>Zeile 1 setzt das Array PROGRAMS mit dem Inhalt der Ausgabe von "ls ~/bin". Die Variable MAX erhält die Anzahl Array-Elemente in PROGRAMS und wird in Zeile 3 verwendet, um RANDOM im Bereich von 0 bis MAX-1 zu halten - was exakt den gesetzten Subscripts des Arrays entspricht. RANDOM ist eine Spezialvariable der Shell, die bei jeden Auslesen einen zufälligen Wert zwischen 0 und 32767 besitzt. Das Ergebnis (ein beliebiges Element aus PROGRAMS) muss zum Schluss nur noch gestartet werden.

Ein Tipp zum Stil: Wenn Du Features wie "~" verwendest, schreibe auch in die erste Zeile "#!/bin/bash" und nicht "#!/bin/sh", da die alte Bourne-Shell mit "~" oder auch $(), Arrays, RANDOM, $(()) usw. nix anfangen kann.

Viel Spass noch beim Weiterbasteln!

Jochen

Rossi

Re: bash: Zufällig Elemente einer Liste auswählen ?

#3 Post by Rossi »

Super. Tausend dank. Jetzt startet nämlich zufällig mit "startx" ein "xscreensaver" im rootfenster von icewm. Ich liebe "eyecandyness" einfach. Ich hoffe, es stört Dich nicht zu sehr, das ich Deine Fähigkeiten für niederes Gespiel mißbraucht habe ;o)
Ward nu noch bannich tied, dat DRI mit de ole Radeon7500 löpt.

Jochen

Re: bash: Zufällig Elemente einer Liste auswählen ?

#4 Post by Jochen »

Och nööö, war 'ne nette Gelegenheit, noch mal Arrays unter bash aufzufrischen... Viel Spass beim Von-der-Arbeit-ablenken-lassen! <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

Jochen

BO

Re: bash: Zufällig Elemente einer Liste auswählen ?

#5 Post by BO »

zu DRI mit radeon:

schau mal auf gatos.sf.net vorbei...

funzt zwar mit meinem radeon mobility nicht so wirklich (das ati.2-X-Modul funzt aber prächtig!), aber vielleicht hilfts dir ja...

Post Reply