Rechnen in Shell-Scripten
Rechnen in Shell-Scripten
Hallo,
ich möchte in einem Shell-Script die Wurzel (nur 2te) aus einer Zahl ziehen. Außerdem würde ich auch gerne mit Nachkommastellen arbeiten können.
z. B. sqrt5 * 2.35 ~ 5.25476
Wie mache ich das?
Wichtig wäre mir auch, dass das Script auf möglichst vielen Shells lauffähig ist. (Also keine Spezialpakete o.ä.)
ich möchte in einem Shell-Script die Wurzel (nur 2te) aus einer Zahl ziehen. Außerdem würde ich auch gerne mit Nachkommastellen arbeiten können.
z. B. sqrt5 * 2.35 ~ 5.25476
Wie mache ich das?
Wichtig wäre mir auch, dass das Script auf möglichst vielen Shells lauffähig ist. (Also keine Spezialpakete o.ä.)
Ich würde dafür bc verwenden, also ungefähr so
Code: Alles auswählen
#!/bin/sh
x=`bc << EOF
scale = 6
sqrt(5) * 2.35
EOF
`
echo $x
MfG GoKi
:wq
:wq
Re: Rechnen in Shell-Scripten
OK, ohne Nachkommastellen hätte man da etwas machen können, mit Nachkommastellen geht ohne Hilfsprogramme wie dc oder bc nicht, da die Shells nur mit Ganzzahlen umgehen können.Maui Muc hat geschrieben:ich möchte in einem Shell-Script die Wurzel (nur 2te) aus einer Zahl ziehen. Außerdem würde ich auch gerne mit Nachkommastellen arbeiten können.
PS: Bevor jemand fragt, Wurzel aus x kann man mit
Code: Alles auswählen
W[n+1] = (W[n] + (x/W[n])) / 2
Re: Rechnen in Shell-Scripten
jetzt wo du es sagst, fällt mir ein dass ich das mal beweisen musste.Joghurt hat geschrieben: ......Code: Alles auswählen
W[n+1] = (W[n] + (x/W[n])) / 2
Sind dc und bc weit verbreitet? Oder muss ich die Pakete in der Regel erst einspielen. Dem User des Scripts sollten möglichst wenige Stolpersteine in den Weg gelegt werden.
- godsmacker
- Beiträge: 902
- Registriert: 16.03.2003 21:50:26
- Lizenz eigener Beiträge: Artistic Lizenz
- Wohnort: Chemnitz
-
Kontaktdaten:
Es ist einfach so, dass ich gerade mal halbwegs vernünftig mit der Shell zurecht komme. Ein Script schreiben und gleichzeitig ein Programmiersprache lernen ist wohl etwas viel. Zudem ist das Script schon fast fertig.
Auf eine andere Shell umsteigen will ich eigentlich auch nicht die bash tuts eigentlich.
Ich werde mich mit bc begnügen, auch wenn es nicht gerade stilistisch schön ist. Für meine Zwecke wird es schon reichen.
Auf eine andere Shell umsteigen will ich eigentlich auch nicht die bash tuts eigentlich.
Ich werde mich mit bc begnügen, auch wenn es nicht gerade stilistisch schön ist. Für meine Zwecke wird es schon reichen.
eine Frage hätte ich noch, zwar nicht ganz zum Thema passend aber sicher schnell beantwortet.
Wie kann ich prüfen ob bc vorhanden ist?
ich habe es mitversucht, das klappte leider nicht.
Wie kann ich prüfen ob bc vorhanden ist?
ich habe es mit
Code: Alles auswählen
if [-f"bc"]
then
..
else
...
fi
- godsmacker
- Beiträge: 902
- Registriert: 16.03.2003 21:50:26
- Lizenz eigener Beiträge: Artistic Lizenz
- Wohnort: Chemnitz
-
Kontaktdaten:
Code: Alles auswählen
if [ -x `which bc 2>/dev/null` ]; then
yada yada
fi
-Flo
Mit
kommt man schonmal an den ASCII Code in Hex. Gibt es eine einfache Möglichkeit das zum Rechnen nach dezimal zu wandeln?
Code: Alles auswählen
echo -n $ch | xxd | awk '{print $2}'
Du kannst natürlich perl dafür benutzen aber vielleicht solltest du dann eh auf perl (oder python) wechseln.
Code: Alles auswählen
perl -e "print ord('$ch')"
aber zur Not geht's auch in der Shell:
Code: Alles auswählen
echo -n $CH | od -A n -i
Beware of programmers who carry screwdrivers.