S-k-y.F-i-r-e Geschrieben 3. Februar 2011 Teilen Geschrieben 3. Februar 2011 Hallo Fachinformatiker! Ich arbeite mich Momentan in das Shell-Scriping von Linux ein. Ich stoße jetzt allerdings vor ein Problem, dass ich nicht selbst lösen kann. Es soll ein Script erstellt werden, dass 6 Zufallszahlen generiert und diese ausgibt. Mein Script sieht bisher so aus: clear i=0 echo `touch lotto_temp` for i in `seq 1 6` do echo `expr $RANDOM % 49 + 1 >> lotto_temp` echo $i done echo `sort -n lotto_temp` echo `rm lotto_temp` Ausgegeben wird mir folgendes: expr: Syntaxfehler 1 expr: Syntaxfehler 2 expr: Syntaxfehler 3 expr: Syntaxfehler 4 expr: Syntaxfehler 5 expr: Syntaxfehler 6 Mich persönlich macht im Moment stuzig, dass ich den Befehl: expr $RANDOM % 49 + 1 >> lotto_temp ausführen kann, ohne das ein Syntaxfehler ausgegeben wird. Hat irgendjemand von euch eine Ahnung, warum das Befehl allein sauber läuft, im Kontext des Scripts aber nicht? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SaJu Geschrieben 3. Februar 2011 Teilen Geschrieben 3. Februar 2011 Ich lerne gerade auch Shell-Programmierung. Dafür hat mir zur Einarbeitung mein Chef den Advanced Bash-Scripting Guide empfohlen. Hier ist die Erklärung zur Anwendung von RANDOM: $RANDOM: generate random integer Ich hoffe, das kann Dir weiter helfen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
charmanta Geschrieben 3. Februar 2011 Teilen Geschrieben 3. Februar 2011 also zunächst gefallen mir Deine Quotes nicht. Ich empfehle: echo `expr $RANDOM % 49 + 1 ` >> lotto_temp Formal ist das ansonsten korrekt und wird bei mir auf die schnelle auch ausgeführt. Ein mögliches Problem mit Scripten sind nicht sichtbare Sonderzeichen, die enstehen z.b. durch Cursortasten mit vi ( wenn die Einstellung nicht richtig stimmt ) oder ähnliches. Im Zweifel die fehlerhafte Zeile löschen und komplett neu eintippen Nur weil Du nix siehst heisst das nicht dass da nix ist seq 1 6 ???? Bei 400 Kommandos eines UNIX Systems muß man nicht versuchen auf Krampf alle zu benutzen EDIT: Die unnötige Benutzung von Tempfiles wird bei uns mit Haue bestraft ! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 3. Februar 2011 Teilen Geschrieben 3. Februar 2011 Versuche es doch einfach mal mit expr $RANDOM % 49 + 1 >> lotto_temp ohne irgendwelche subshells. expr liefert die Ausgabe nach STDOUT. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
S-k-y.F-i-r-e Geschrieben 3. Februar 2011 Autor Teilen Geschrieben 3. Februar 2011 Hallo zuammen, schonmal vielen dank, an alle die mir helfen wollten. Leider führte keiner eurer Vorschläge zum gewünschten Erfolg. Weder echo `expr $RANDOM % 49 + 1` >> lotto_temp noch expr $RANDOM % 49 + 1 >> lotto_temp Auch ein erneutes Schreiben der betroffenen Zeile brachte nichts. Aktueller Scriptcode sieht folgendermaßen aus: clear i=0 echo `touch lotto_temp` for i in 1 2 3 4 5 6 do expr $RANDOM % 49 + 1 >> lotto_temp echo $i done echo `sort -n lotto_temp` echo `rm lotto_temp` Fehlermeldung nach wie vor so: expr: Syntaxfehler 1 expr: Syntaxfehler 2 expr: Syntaxfehler 3 expr: Syntaxfehler 4 expr: Syntaxfehler 5 expr: Syntaxfehler 6 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SaJu Geschrieben 3. Februar 2011 Teilen Geschrieben 3. Februar 2011 Hast Du darüber auch die Shell mit angegeben? z.B. #! /bin/bash Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 3. Februar 2011 Teilen Geschrieben 3. Februar 2011 Ich erhalte die folgende Ausgabe wenn ich das Skript, das du zuletzt gepostet hast mit Shebang Zeile ausführe: 1 2 3 4 5 6 5 5 12 42 47 49 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
charmanta Geschrieben 3. Februar 2011 Teilen Geschrieben 3. Februar 2011 joah, ich auch. Was hast Du da für ein Linux ? was sagt "expr --version" ? Hast Du evt. ein anderes expr im Suchpfad vor dem des Linux ? Formal alles korrekt und richtig Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
S-k-y.F-i-r-e Geschrieben 4. Februar 2011 Autor Teilen Geschrieben 4. Februar 2011 Hallo, Es handelt sich um ein Ubuntu 10.04 LTS - Lucid Lynx - in einem VMWare-Player Version 3.1.3 build-324285. expr befindet sich in der Version 7.4. Kann das Problem auch mit dem Ausführungsort des Scriptes zusammenhängen? Momentan befindet sich das Script in /opt/scripte/. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
charmanta Geschrieben 4. Februar 2011 Teilen Geschrieben 4. Februar 2011 keine Ahnung was das ist. Benutz ein anderes Linux. Am Ort kann es nicht liegen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 6. Februar 2011 Teilen Geschrieben 6. Februar 2011 keine Ahnung was das ist. Benutz ein anderes Linux. Lade einfach mal ein iso einer Live-Distribution als CD-Laufwerk, wechsel mit chroot die Umgebung und probier das Skript da noch mal. btw. bei mir liegen die coreutils in Version 8.5 vor, Distribution: aptosid Welche Shell benutzt du? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.