Befehlszeilen-Ausdruckslöser?


8

Ich suche einen Linux-kompatiblen TTY-basierten Rechner. Zum Beispiel:

user@host:~$ calculate
> 2
2
user@host:~$ calculate
> 8*6-4
44
user@host:~$ calculate
> 8*(6-4)
16

Gibt es so etwas, das grundlegende Operationen, einige integrierte Funktionen wie atan()und möglicherweise benutzerdefinierte Funktionen über Skripte unterstützt?

Antworten:


7

bc & dc

bcund dcsind die 2 Taschenrechner, die ich oft benutze, wenn ich Zugriff von einem Terminal benötige.

Beispiele

$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 

Dann können Sie Ihre Fragen eingeben:

2
2
5+5
10

Wenn Sie fertig sind, können Sie mit einem Ctrl+ aussteigen C.

Probefahrt

Diese Taschenrechner sind ziemlich funktionsreich.

Skalierung

scale=5
193 * 1/3
64.33333

Gleichungen

principal=100
ir = 0.05
years = 5
futurevalue = principal * (1 + ir)^years

futurevalue
127.62800

Ihre Beispiele

8*6-4
44

8*(6-4)
16

calc

Wenn Sie etwas Interaktiveres wollen, gibt es calc.

Beispiel

$ calc
C-style arbitrary precision calculator (version 2.12.4.4)
Calc is open software. For license details type:  help copyright
[Type "exit" to exit, or "help" for help.]

; 10+10
20
; 8*6-4
    44
; 8*(6-4)
    16
; 

Sie können die Aufwärts- / Abwärtspfeile verwenden, um frühere Befehle durchzugehen, und es gibt auch eine interaktive Hilfe.

; help

Gibt Ihnen Folgendes:

For more information while running calc, type  help  followed by one of the
following topics:

    topic               description
    -----               -----------
    intro               introduction to calc
    overview            overview of calc
    help                this file

    assoc               using associations
    builtin             builtin functions
    command             top level commands
    config              configuration parameters
    custom              information about the custom builtin interface
    define              how to define functions
    environment         how environment variables effect calc
    errorcodes          calc generated error codes
    expression          expression sequences
    file                using files
    history             command history
    interrupt           how interrupts are handled
    list                using lists
    mat                 using matrices
    ...

Verweise


Da dies keine Ubuntu-spezifische Frage ist, können Sie einen Link zu Calc Upstream anstelle des Ubuntu-Pakets erstellen.
Mattdm

@mattdm - danke diesen Link hinzugefügt, ich habe den anderen Link einfach b / c verlassen Ich habe auf eine Manpage auf calc verlinkt, nicht unbedingt das Ubuntu-Paket.
slm

6

Es gibt viele Antworten auf Ihre Frage ...

Die einfachen, die Sie in der Shell tun könnten.

$ echo $((8*(6-4)))
16

Als spezielles Programm gibt es bc.

$ echo "8*(6-4)" | bc
16

Benutzerdefinierte Funktionen per Scripting? Nun, Shell-Skripte und bc haben sie beide in gewisser Weise. Kommt darauf an, wie weit du gehen willst.

Warum nicht Python? Es ist leicht zu lernen.

$ python
>>> from math import atan
>>> 8*(6-4)+atan(0)
16.0

Ich habe in letzter Zeit tatsächlich Python dafür verwendet, aber das ist der Grund, warum ich etwas anderes möchte. Es wird ärgerlich, für jede Funktion etwas importieren zu müssen. Ich hoffte mehr auf etwas Eigenständiges wie Speedcrunch ( i.imgur.com/Cn6GejG.png ), aber offensichtlich auf die Befehlszeile.
Lucas Phillips

1
Sie können das Importproblem lösen, indem Sie die Umgebungsvariable PYTHONSTARTUP definieren und Inhalte in die Datei importieren, auf die die Variable zeigt.
mkc



2

Maxima CAS :

  • kann von der Konsole aus ausgeführt werden (hat auch Fensterversionen wie wxMaxima
  • unterstützt Skripte ( Batch-Textdatei mit Mac-Erweiterung )
  • hat viele eingebaute Funktionen
   L (t): = exp (% i * t * 2 *% pi); / * Einheitskreis mit Winkel in Windungen parametrisiert * /
   plot2d (
   [atan2 (Imagpart (L (x)), Realpart (L (x))]],
   [x, 0,1],
   [y, -2 *% pi, 2 *% pi],
   [plot_format, gnuplot],
   [gnuplot_term, "png"],
   [gnuplot_out_file, "atan2.png"],
   [Legende "atan2"],
   [xlabel, "Winkel im Bogenmaß"], 
   [ylabel, "Winkel im Bogenmaß"],
   [gnuplot_preamble, "
   Schlüssel links oben einstellen;
   setze xtics ('pi / 2' 0,25, 'pi' 0,5, '3pi / 2' 0,75, '2pi' 1,0);
   setze ytics ('-2pi' -6,283, '-pi' -3,1415, '-pi / 2' -1,5708, '0' 0, 'pi / 2' 1,5708, 'pi' 3,1415, '2pi' 6,283);
   set grid xtics ytics "]
  );

HTH


1

Hier ist ein kleiner Bash-Hack, mit dem Sie einfache Arithmetik direkt über die Befehlszeile ausführen können.

alias calc='set -o noglob; docalc'
function docalc { perl -e "print STDOUT $*, \"\\n\""; set +o noglob; }

Dann können Sie z.

calc 3 * 15 + 5

Leider spielt es nicht gut mit Klammern. (Wenn ich mich richtig erinnere, können Sie tcsh dazu bringen, diese auch zu akzeptieren, aber ich konnte bash nicht davon überzeugen.)

PS. Sie können sich bei der Arithmetik auf bash verlassen, indem Sie den perlAufruf durch ersetzen echo $(( $* )). Aber das gibt Ihnen eine ganzzahlige Division für 5/6usw. Perls Arithmetik ist nützlicher.

Alternative: Wenn Ihr einziges Rindfleisch mit Python das ist, was Sie brauchen, import mathist das Folgende Ihr Freund:

% alias calc='python -i -c "from math import *"'
% calc
>>> 5 * atan(0.25)

0

Eine andere Möglichkeit ist die Verwendung eines Interpreters wie Python 3:

$ python3
> from math import *
> 213/53*exp(0.8)/asin(3)
9.645423462356044

Haben Sie den Vorteil, dass Sie alles skripten können, es gibt bereits viele Funktionen (Sie können diese auch importieren, cmathwenn Sie komplexe Zahlen benötigen), Sie müssen in den meisten Fällen keine Genauigkeit festlegen und Python ist bereits auf den meisten Linux-Installationen installiert.

Python 3.x ist für einen generischen Taschenrechner besser als Python 2.x, da Python 3.x eine Gleitkommadivision durchführt, wenn das Ergebnis kein int ist.

$ python3
> 3/2
1.5
$ python2
> 3/2
1

Der größte Nachteil für mich ist zumindest, dass Floats nicht in der wissenschaftlichen Notation gedruckt werden, wenn sie nicht sehr groß oder klein sind, ohne eine Formatzeichenfolge:

> exp(35)
1586013452313430.8
> "{:e}".format(exp(35))
'1.586013e+15'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.