Probleme mit $((RANDOM % 49 + 1))

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
jaguar
Beiträge: 54
Registriert: 17.08.2008 19:07:07
Wohnort: Germany

Probleme mit $((RANDOM % 49 + 1))

Beitrag von jaguar » 15.10.2011 22:35:50

Hey,
Ich mache folgendes "TUT"
http://www.tutorials.de/content/1190-un ... ripte.html

und bin bei Abschnitt "-- 6 aus 49 --" angelangt.

Das Script ist dies:

Code: Alles auswählen

clear
echo `touch lotto_temp`
i=0
 
while [ $i -lt 6 ]
do
  rnd=$((RANDOM % 49 + 1)) 
  echo $rnd >> lotto_temp
  i=`expr $i + 1`
done
echo `sort -n lotto_temp`
echo `rm lotto_temp`
als Ausgabe auf meinem PC bekomme ich aber:

Code: Alles auswählen

1 1 1 1 1 1
Was mache ich falsch? :?: :?: :?:
Wenn ich dies auserhalb des Scripts ausführe:

Code: Alles auswählen

rnd=$((RANDOM % 49 + 1)) 
echo $rnd
bekomme ich z.B. folgendes Ergebnis:

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Probleme mit $((RANDOM % 49 + 1))

Beitrag von Cae » 15.10.2011 22:42:33

jaguar hat geschrieben:Wenn ich dies auserhalb des Scripts ausführe:

Code: Alles auswählen

rnd=$((RANDOM % 49 + 1)) 
echo $rnd
Schreib' das mal als Skript: Bei mir war der Output reproduzierbar "1". Keine Ahnung, warum :P

Gruß Cae

--Edit: eeeek - deine normale Shell wird wohl die Bash sein, die Script-Shell vllt aber sh? RANDOM scheint eine Funktion der Bash zu sein!
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Benutzeravatar
jaguar
Beiträge: 54
Registriert: 17.08.2008 19:07:07
Wohnort: Germany

Re: Probleme mit $((RANDOM % 49 + 1))

Beitrag von jaguar » 15.10.2011 22:47:35

Ich habe auch schon ein:

Code: Alles auswählen

echo $rnd
eingefügt, um zu sehen, wie es zwischen durch ausschaut...
Script:

Code: Alles auswählen

#!/bin/bash
clear

echo `touch lotto_temp`
i=0

while [ $i -lt 6 ]
do
  rnd=$((RANDOM % 49 + 1))
  echo $rnd
  echo $rnd >> lotto_temp
  i=`expr $i + 1`
done
echo `sort -n lotto_temp`
echo `rm lotto_temp`
Ergebnis:

Code: Alles auswählen

1
1
1
1
1
1
1 1 1 1 1 1

Benutzeravatar
jaguar
Beiträge: 54
Registriert: 17.08.2008 19:07:07
Wohnort: Germany

Re: Probleme mit $((RANDOM % 49 + 1))

Beitrag von jaguar » 15.10.2011 22:56:08

Ich habe es geschaft!
Datei mit

Code: Alles auswählen

chmod 777 09_lotto
für jeden ausführbar gemacht!
und das File direkt ausgeführt!

Code: Alles auswählen

./09_lotto
Output:

Code: Alles auswählen

30
14
40
13
9
39
9 13 14 30 39 40

Am Kopf des Files muss aber natürlich

Code: Alles auswählen

#!/bin/bash
stehen! und nicht:

Code: Alles auswählen

#!/bin/sh
Danke für den Tipp! mit Bash bzw Sh

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Probleme mit $((RANDOM % 49 + 1))

Beitrag von Cae » 15.10.2011 22:57:18

Code: Alles auswählen

foo@debian:~$ cat test
rnd=$((RANDOM % 49 + 1))
echo $rnd
foo@debian:~$ sh test
1
foo@debian:~$ bash test
21
Mach' dir mal Gedanken darüber.

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Benutzeravatar
jaguar
Beiträge: 54
Registriert: 17.08.2008 19:07:07
Wohnort: Germany

Re: Probleme mit $((RANDOM % 49 + 1))

Beitrag von jaguar » 15.10.2011 23:10:09

Aber warum ist das so?
Mit Bash geht es und mit Sh nicht.
Wo liegt da der Unterschied (zwischen den beiden)? Ist das eine "minimaler" als das andere?

Benutzeravatar
TRex
Moderator
Beiträge: 8333
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Probleme mit $((RANDOM % 49 + 1))

Beitrag von TRex » 15.10.2011 23:17:55

Die bash ist um einiges funktionsreicher als sh, braucht dafür aber um einiges mehr an Resourcen. In den meisten Fällen wirst du das aber nicht merken ;)

Die ganzen Komfortfunktionen wie Autovervollständigung usw sind alles Funktionen der bash.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
jaguar
Beiträge: 54
Registriert: 17.08.2008 19:07:07
Wohnort: Germany

Re: Probleme mit $((RANDOM % 49 + 1))

Beitrag von jaguar » 15.10.2011 23:24:44

Danke :D
und interessant... :!:

Benutzeravatar
catdog2
Beiträge: 5352
Registriert: 24.06.2006 16:50:03
Lizenz eigener Beiträge: MIT Lizenz

Re: Probleme mit $((RANDOM % 49 + 1))

Beitrag von catdog2 » 15.10.2011 23:35:47

/bin/sh hat früher auch nur auf Debianbash verlinkt, mittlerweile ist es aber die Debiandash
Unix is user-friendly; it's just picky about who its friends are.

Antworten