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
bash: Zufällig Elemente einer Liste auswählen ?
Re: bash: Zufällig Elemente einer Liste auswählen ?
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
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
Re: bash: Zufällig Elemente einer Liste auswählen ?
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.
Ward nu noch bannich tied, dat DRI mit de ole Radeon7500 löpt.
Re: bash: Zufällig Elemente einer Liste auswählen ?
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
Jochen
Re: bash: Zufällig Elemente einer Liste auswählen ?
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...
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...