{"id":522,"date":"2009-07-05T10:00:00","date_gmt":"2009-07-05T08:00:00","guid":{"rendered":"http:\/\/www.butschek.de\/?p=522"},"modified":"2012-03-11T12:39:36","modified_gmt":"2012-03-11T11:39:36","slug":"shell-zufallszahlen","status":"publish","type":"post","link":"https:\/\/www.butschek.de\/2009\/07\/05\/shell-zufallszahlen\/","title":{"rendered":"Zufallszahlen mit Modulo auf der Shell erzeugen"},"content":{"rendered":"

\"\"<\/a>Die Firewall aus dem letzten Artikel fand ich extrem lustig, doch die Methode der Zahlenermittlung fand ich sehr interessant. Eine IP-Adresse wurde hier wie folgt erstellt:<\/p>\n

echo „$(($RANDOM%256)).$(($RANDOM%256)).[…]“<\/p>\n

Die Variable $RANDOM gibt eine Zufallszahl zwischen 0 und 32767. Das Prozent-Zeichen (%) berechnet aus einer Zahl deren Modulo<\/a>, also den Rest aus der Division zweier ganzer Zahlen. Einfach gesagt berechnet es den Rest einer Teilung der geraden Zahlen.<\/p>\n

Grundschul-Beispiel: 100 durch 23 = 4, Rest<\/a> 8
\nDas Ergebnis aus 100 mod 23 ist also 8.<\/p>\n

Der Modulo eigenet sich gut, eine Zahl auf einem Wert zu k\u00fcrzen, denn das Ergebnis liegt immer zwischen 0 und dem Divisor-1. Das ist auch logisch, denn der Rest-Wert einer Division muss unter dem Divisor liegen. Also eine zuf\u00e4llige Zahl mod 8 wird ganzzahlig sein und zwischen 0 und 7 liegen.<\/p>\n

Der Syntax $(($RANDOM%256)) macht also nichts anderes als die Variable $RANDOM (Zufallswert zwischen 0 – 32767)\u00a0 modulo 256 zu nehmen – womit ein Ergebnis zwischen 0 und 255 herauskommt.<\/p>\n

Interessant gel\u00f6st fand ich auch diese Codestelle:<\/p>\n

while true; do\r\nsleep 1\r\necho -n .\r\nif [ $(($RANDOM%13)) -eq 2 ]; then break; fi\r\ndone<\/pre>\n

Hier wurde durch $(($RANDOM%13)) eine zuf\u00e4llige Zahl zwischen 0 und 12 ermittelt und mit -eq 2 mit dem Wert 2 verglichen. Die 2 ist dabei nur eine beliebige Zahl, die if-Anweisung hei\u00dft \u00fcbersetzt nichts anderes als\u00a0 „In einem von 13 F\u00e4llen“ (0-12 = 13 M\u00f6glichkeiten!), die Bedingung wird also zuf\u00e4llig mit einer Wahrscheinlichkeit von 1\/13tel erf\u00fcllt.<\/p>\n

\u00dcbrigens: Wer Zufallszahlen zwischen 1 und … braucht, kann $((RANDOM % 9 +1))<\/strong> nutzen. Der erste Teil erzeugt eine Zufallszahl zwischen 0 und 9, danach wird das Ergebnis +1 gerechnet, das ergibt also eine Zufallszahl zwischen 1 und 10.<\/p>\n","protected":false},"excerpt":{"rendered":"

Die Firewall aus dem letzten Artikel fand ich extrem lustig, doch die Methode der Zahlenermittlung fand ich sehr interessant. Eine IP-Adresse wurde hier wie folgt erstellt: echo „$(($RANDOM%256)).$(($RANDOM%256)).[…]“ Die Variable $RANDOM gibt eine Zufallszahl zwischen 0 und 32767. Das Prozent-Zeichen (%) berechnet aus einer Zahl deren Modulo, also den Rest aus der Division zweier ganzer […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4,5],"tags":[45,51,66,90],"_links":{"self":[{"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/posts\/522"}],"collection":[{"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/comments?post=522"}],"version-history":[{"count":2,"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/posts\/522\/revisions"}],"predecessor-version":[{"id":779,"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/posts\/522\/revisions\/779"}],"wp:attachment":[{"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/media?parent=522"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/categories?post=522"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/tags?post=522"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}