(standard_in) 1: syntax-Fehler in der bash-Skript

Ich versuche zu generieren, die einige quasi-Zufallszahlen zur Einspeisung in eine monte-carlo-simulation. Ich bin mit der bash. Ich scheine zu haben, trifft einen syntax-Fehler, die ich habe, eingeengt zu sein in diesem Stück code.

randno4=($RANDOM % 100001)
upper_limit4=$(echo "scale=10; 1*75.3689"|bc)
lower_limit4=$(echo "scale=10; 1*75.1689"|bc)
range4=$(echo "scale=10; $upper_limit4-$lower_limit4"|bc)
t_twall=`echo "scale=10; ${lower_limit4}+${range4}*${randno3}/100001" |bc`
echo "$t_twall"

Weiß jemand, warum ich die unterhalb der Ausgabe-und nicht ein Wert zwischen 75.3689 und 75.1689 als das, was würde ich erwarten?

(standard_in) 1: syntax error
  • randno4=($RANDOM % 100001) ist nicht arithmetische Auswertung. Das wird eine randno4='([0]="25649" [1]="%" [2]="100001")' array. Vielleicht meintest du randno4='$(($RANDOM % 100001))'?
  • Ich habe mehrere Zeilen alias in der ersten Zeile neben dem Namen der Variablen. Sie scheinen in Ordnung zu sein.
  • Nutzen Sie auch $randno3 im t_twall Zuordnung Zeile ist nicht definiert.
  • Die erste Zeile ist in Ordnung. Es einfach nicht tun, was Sie denken, es tut. Führen Sie diese Zeile und führen Sie dann declare -p randno4. Dann versuchen echo "$randno4" vs. echo "${randno4[1]}".
  • Ich glaube, der eigentliche Fehler ist hier von bc wegen der randno3 Tippfehler.
  • OK, so ist die nullte Stelle im array eine Zufallszahl und wenn ja, ist es zwischen 0 und 100001? In meinem Ausgänge habe ich nicht bemerkt Probleme aber ich bin neu in diesem, und nur, es zu schreiben. Ich bekomme nicht die gleiche Anzahl, wie Sie für den nullten element ich bekomme [0]="22737"
  • Das erste element ist der ausbau von $RANDOM so wird es sein... warten Sie... zufällig. Der Punkt war, dass Sie nicht die Anwendung einer modulo-operation, der Wert, die Art und Weise, die Sie erwartet hatten. Sie erstellen ein array mit 3 - Elementen. Von denen das erste (index 0) ist eine unbegrenzte zufällige Zahl. Die zweite ist %. Die Dritte ist 100001. Für eine array-variable arr mit $arr entspricht ${arr[0]}. So, wenn Sie $randno4 Sie sind auf ${randno4[0]} ist die grenzenlose Zufallszahl.
  • Ich will nicht zu verwirren Sie darüber, wäre aber sehr sehr sehr nützlich für mich zu wissen, ob oder nicht das nullte element ist eine zufällige Zahl zwischen 0 und 100001 oder nicht. Ist dies der Fall? Ist es eine andere Grenze, z.B. die int limit oder die double-precision-limit??? Vergessen Sie den rest der Reihe. Ich nicht die Mühe machen möchten, einen Kollegen über eine wissenschaftliche Arbeit, die Sie bereits veröffentlicht, wenn dies der Fall ist. Wenn es nicht ist, dann sollte ich zumindest heraus finden, ob Sie gefunden und das problem behoben.
  • Der bash man-page erklärt die Palette der RANDOM. Es ist dokumentiert, als "eine zufällige ganze Zahl zwischen 0 und 32767".
  • Danke, das war sehr nützlich. Bash man - Seite- ist, dass eine website? Googeln es gibt Sie ziemlich viel trifft?
  • Dies wurde in einem Papier? Sind Sie in der Lage, zu teilen, was Papier war es?
  • Es ist ein Papier in der Vorlage, die ich denke, ist mit dem gleichen code. Ich sehe die einzelnen in Frage morgen. Will nicht unnötig Panik, aber jeder sollte überprüft werden. Ich weiß, dass Sie eine riesige MATLAB-fan und wird wohl geschrieben haben dies zu tun, all dieses Zeug in MATLAB (ich will nicht zu tun, dies aus verschiedenen Gründen, sind zu detailliert, um in nun). Es ist nicht ein Papier, über informatik, die ich beeile mich hinzuzufügen, haben wir (wie Sie sagen können, von meinem basic-Fragen) sind nicht die informatik-Abteilung. Wirklich zu schätzen Ihre Hilfe bei diesem. 🙂
  • man Befehl dürfte so ziemlich das erste Linux-Befehl, den Sie lernen. Hier ist die bash Mann Seite
  • Ich gab +1 auf die Frage (und @Etan), denn es hat mir geholfen, schnell zu verstehen, wo die seltsame Fehlermeldung kam (was war das Ergebnis von schlecht geschrieben regex für grep dass gräbt mal aus ping Ausgang, was zu fehlerhaften Eingabe für bc).

Schreibe einen Kommentar