PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : zufallszeichen ausgeben



oyster-manu
20.07.2004, 21:11
ich benötige für mein shellscript mehrere zufallszeichen.
cat /dev/urandom kommt nicht in frage da ich nur EIN zeichen (a-z,0-9) brauche. gibt es keinen befehl der mir eben so ein zeichen ausgibt oder muss ich mir da selber was überlegen?

etuli
20.07.2004, 21:44
perl -e '$n_ch = ord("z") - ord("a"); $r = rand($n_ch + 10.0); if($r < 10) { $ch = chr($r + ord("0")); } else { $ch = chr($r + ord("a") - 10); } print $ch;'

oyster-manu
20.07.2004, 21:56
sei mir nicht böse, aber gibt es da keine bashvariante von? ich fange gerade erst mit shellscripten an und möchte nicht schon bei den ersten schritten perl lernen.

h2owasser
20.07.2004, 22:01
dd bs=1 cbs=1 count=1 if=/dev/urandom 2> /dev/null

Wenn du ein beliebiges Zeichen brauchst. Sonst mußt du noch if-Zeugs mit awk, sed co darumbasteln.

etuli
20.07.2004, 22:53
Ist die Frage, ob shell da Sinn macht. Koennte dir sonst noch


echo 'abcdefghijklmnopqrstuvwxyz0123456789' | perl -e '$_=<STDIN>;chomp; print substr( $_, rand( length($_)), 1);'

anbieten, bzw.


perl -e '$_ = "abcdefghijklmnopqrstuvwxyz0123456789"; print substr( $_, rand( length($_)), 1);'

Das waere sicher auch als shell script umsetzbar. Allerdings halt komplizierter.

oyster-manu
21.07.2004, 09:28
ich schreibe mir dieses script nur zum lernen der "shellsprache". sinnvoll ist das script sowieso nicht :)
hier der code des ganzen scripts:


#!/bin/sh

x=0
until [ "$x" -gt 100 ]
do
head --bytes=1 /dev/urandom #gibt genau ein zeichen aus /dev/urandom aus
x=$(expr $x + 1)
echo ""
done

ps: wie kann ich die untilschleife beenden indem ich nur die taste "q" drücke?

rup
21.07.2004, 16:59
> ps: wie kann ich die untilschleife beenden indem ich nur die taste "q" drücke?

Das kann die Shell nicht, das geht aber z.B. mit C/C++ und der ncurses Bibliothek

etuli
21.07.2004, 19:19
muesst ueber stty und die standard eingabe gehen, wenn du aus dem canonical in den ungepufferten modus wechselst. Wuerdest in c nichts anderes machen.

mfg

oyster-manu
22.07.2004, 11:29
muesst ueber stty und die standard eingabe gehen, wenn du aus dem canonical in den ungepufferten modus wechselst. Wuerdest in c nichts anderes machen.

mfg

ähh... ja... :)

zurück zum shellscript:
ich finde dass die zeichen etwas rückartig ausgegeben werden. kann man das vielleicht noch irgendwie flüssiger machen (aber bitte nur shellscript)?

cirad
25.07.2004, 13:28
echo $((RANDOM % 256))
gibt dir auch eine Zahl zwischen 0 und 255 aus. Nur, falls du sowas mal in Zukunft wieder brauchst. (: