• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Eine zufällige Zahl generieren und als Variable speichern?

Chaoshh

Member
Gudnaabaand!

Ich möchte in einem Script (bash) eine zufällige Zahl zwischen 1 und 99 generieren und sie an eine andere (feste) addieren um daraus einen "sleep" Wert zu erstellen.

Code:
ZEIT1=$ - was kommt hier ? - 
ZAHL=$30
ALFAZEIT=$ZAHL1+$ZEIT1
sleep $ALFAZEIT

Jetzt wüsste ich nicht wie ich "ZEIT1" erstelle. Das soll eben diese zufällige Zahl sein.
 
A

Anonymous

Gast
Code:
ZEIT1=$(($RANDOM % 100))
aber
ALFAZEIT=$ZAHL1+$ZEIT1
funktioniert in der Bash nicht ganz so einfach.dort müsstest du schon
Code:
ALFAZEIT=$(($ZAHL1+$ZEIT1))
schreiben, oder vorher beide Variablen als Integer definieren.

PS: Habe gerade gesehen du willst 1 bis 99 "$(($RANDOM % 100))" gibt aber ein Ergebnis 0 bis 99
also musst du das entsprechend ändern damit du nur 0 bis 98 bekommst und dann 31 dazu addieren.

robi
 

abgdf

Guru
Chaoshh schrieb:
Ich möchte in einem Script (bash) eine zufällige Zahl zwischen 1 und 99 generieren und sie an eine andere (feste) addieren um daraus einen "sleep" Wert zu erstellen.
Code:
ZEIT1=$ - was kommt hier ? - 
ZAHL=$30
ALFAZEIT=$ZAHL1+$ZEIT1
sleep $ALFAZEIT
Jetzt wüsste ich nicht wie ich "ZEIT1" erstelle. Das soll eben diese zufällige Zahl sein.
Ich würd's so machen:
Code:
#!/bin/bash
ZEIT1=$(perl -e 'print int(rand(99)) + 1')
ZAHL=30
ALFAZEIT=$(echo "$ZAHL + $ZEIT1" | bc)
echo $ALFAZEIT
# sleep $ALFAZEIT
 
A

Anonymous

Gast
abgdf schrieb:
Ich würd's so machen:
Code:
#!/bin/bash
ZEIT1=$(perl -e 'print int(rand(99)) + 1')
ZAHL=30
ALFAZEIT=$(echo "$ZAHL + $ZEIT1" | bc)
echo $ALFAZEIT
# sleep $ALFAZEIT
klar und würdest damit sinnloserweise perl und bc laden die ihrerseits noch folgende libraries sinnloserweise nachladen
Code:
        libnsl.so.1 => /lib/libnsl.so.1 (0xb76cc000)
        libdl.so.2 => /lib/libdl.so.2 (0xb76c7000)
        libm.so.6 => /lib/libm.so.6 (0xb769b000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0xb7665000)
        libutil.so.1 => /lib/libutil.so.1 (0xb7660000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb7645000)
        libreadline.so.6 => /lib/libreadline.so.6 (0xb76e7000)
        libtinfo.so.5 => /lib/libtinfo.so.5 (0xb751a000)
ließt irgendjemand auch mal eine manpage :???: vordefinierte Standardvariablen in Bash
RANDOM : Each time this parameter is referenced, a random integer between 0 and 32767 is generated. The sequence of random numbers may be initialized by assigning a value to RANDOM. If RANDOM is unset, it loses its special properties, even if it is subsequently reset.
oder muss man immer um 1 + 1 zusammenzuzählen, perl, python und java und möglichst alle 3 auf einmal dazu benutzen. ;)
Kein Wunder wenn heutzutage die modernen Programme das 1000fache an Speicher und die 10fache Zeit benötigen wie die Urprogramme die das selbe vor 20 Jahren auch schon genauso gut gemacht haben, allerdings auf Prozessoren bei denen man die Taktfrequen noch in MHz gezählt hat und den Speicher in KByte.

robi
 

abgdf

Guru
robi schrieb:
klar und würdest damit sinnloserweise perl und bc laden
Ich sitz' hier auf 'ner 10 Jahre alten Kiste mit SuSE 10.0, die kein Mensch mehr benutzen würde, und die hat damit überhaupt kein Problem, während sie gleichzeitig noch ruckelfrei das Forum lädt und Internetradio streamt.
Wir sind nicht mehr in den frühen '80ern mit 16K Speicher. Das kann man also ruhig machen. Vor allem, wenn man dadurch den Code schneller und leichter fertig bekommt.
Die Belastung der Maschine ist heute nicht mehr so wichtig, die kann das ab, wichtiger ist es, die Belastung des Programmierers zu minimieren.
 
A

Anonymous

Gast
abgdf schrieb:
robi schrieb:
Die Belastung der Maschine ist heute nicht mehr so wichtig, die kann das ab, wichtiger ist es, die Belastung des Programmierers zu minimieren.
Bin gerade schön in der Stimmung um hier drüber einen Krieg anzufangen ;)
Die Entlastung der Programmierer geht mittlerweile schon so weit, das die überhaupt das Hirn nicht mehr einschalten müssen, und dann überfordet sind auch nur den kleinsten Bug aus ihren Programmen zu entfernen da sie eigentlich überhaupt nicht wissen was sie da alles zusammenprogrammiert haben. und wenn das so weiter geht, dann brauchen Programmierer in 10 Jahren nicht mal mehr eins, da kippt man dann noch einen halben Liter grünen Schleim mit der Kapazität von 100000 CPUs nach und dann wird "1 + 1" auch in der für den Kunden noch durchaus vertretbaren Zeit mittels der Simulation eines Großrechnernetzes unter Verwendung mehrerer Datenbank ermittelt. Hauptsache das Ergebnis stimmt. Aber lassen wir das.

1000 Wege führen nach Rom

robi
 
OP
C

Chaoshh

Member
robi schrieb:
Code:
ZEIT1=$(($RANDOM % 100))
aber
ALFAZEIT=$ZAHL1+$ZEIT1
funktioniert in der Bash nicht ganz so einfach.dort müsstest du schon
Code:
ALFAZEIT=$(($ZAHL1+$ZEIT1))
schreiben, oder vorher beide Variablen als Integer definieren.

PS: Habe gerade gesehen du willst 1 bis 99 "$(($RANDOM % 100))" gibt aber ein Ergebnis 0 bis 99
also musst du das entsprechend ändern damit du nur 0 bis 98 bekommst und dann 31 dazu addieren.

Grüsst euch.

Ich war krank und meld mich nun verspätet. Hatte vor das Script mit anderen Zahlen ausprobieren wollen.

Hab ein Script geschrieben um das zu testen:
Code:
#!/bin/sh

ZEIT=$(($RANDOM % 180))
ZAHL=$120
ALFAZEIT=$(($ZAHL+$ZEIT))

echo $ALFAZEIT

sleep 10
exit

Bei der echo Ausgabe kommen aber nur Zahlen zwischen 40 und 190 raus, es sollten aber welche zwischen 180 und 300 rauskommen.
 

framp

Moderator
Teammitglied
Chaoshh schrieb:
...Bei der echo Ausgabe kommen aber nur Zahlen zwischen 40 und 190 raus, es sollten aber welche zwischen 180 und 300 rauskommen.
Auf 180, 181, ... bis 300 kommst Du wenn Du zu 180 die Zahlen 0 bis 120 addierst. Die Randomfunktion liefert immer Zahlen zwischen 0 und dem RandomArgument-1. D.h. wenn Deine Randomzahl zwischen 0 und 120 liegen sollen musst Du das Argument fuer Random um eines groesser sein als 120.

D.h. Du musst nur Deine ZAHL und das Randomargument anpassen. $120 ist uebrigens keine Zahl 120 sondern der Inhalt der Variable $1 gefolgt von 20 ;)
 

Faxxon

Member
Code:
~> Zuffi(){ echo $(($RANDOM%($2-$1+1)+$1)); }
~> Zuffi 180 300
254
Aufruf: Zuffi VON BIS
 

abgdf

Guru
@Faxxon: Nett.

@robi: Du hast recht, daß man das hier mit weniger Overhead schreiben kann, als ich es oben getan hatte. Ich kannte $RANDOM

http://tldp.org/LDP/abs/html/randomvar.html

noch nicht, das heißt, ist $RANDOM nicht die Tochter von Arthur Dent * ? :mrgreen:
Ich mag bash nicht besonders und kenne nur die Grundlagen. Wenn ich dann etwas nicht in bash kenne, habe ich meistens keine Lust, das zu lernen, sondern löse das lieber mit 'nem schnellen Perl-Aufruf. It's a known bug in my brain, you know. ;)

* "Per Anhalter durch die Galaxis", Band 5: Arthur Dent hatte viele Samenspenden gemacht, um seine intergalaktischen Flugreisen zu bezahlen. Er bekam recht viel Geld dafür, da er wegen der Zerstörung der Erde der letzte männliche Überlebende seiner Art (Mensch) war. Was er nicht wußte. Eines Tages erschien die letzte Frau bei ihm mit einem Teenager und sagte, das sei sein Kind, denn sie habe ein Kind haben wollen und sei deshalb zur Samenbank gegangen. Name des Kindes: Random.
Haha, gute Geschichte. :mrgreen:
 
Oben