Problem:
Hin und wieder muss ich einfache Arithmetik in einer Befehlszeilenumgebung ausführen. ZB bei folgender Ausgabe:
Disk /dev/sdb: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 106MB 105MB fat32 hidden, diag
2 106MB 64.1GB 64.0GB ext4
3 64.1GB 192GB 128GB ext4
5 236GB 256GB 20.0GB linux-swap(v1)
Wie kann auf einfache Weise die Größe des nicht zugewiesenen Speicherplatzes zwischen Partition 3 und 5 in der Befehlszeile berechnet werden ?
Was ich schon ausprobiert habe:
bc
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'.
236-192
44
quit
wo die fett oben ist alles das , was ich brauche zu geben Sie eine einfach zu tun 236-192
als bc 1+1
EchoFile 1+1 is unavailable.
ausdr
expr 236 - 192
Wo muss ich Leerzeichen vor und nach dem Operator als expr 1+1
nur Echos eingeben 1+1
.
shell
calculator
Fabby
quelle
quelle
quit
inbc
; Drücken vonctrl-D
genügt wie in jedem interaktiven Programm.dc
ist (IMO) weit überlegenbc
.Antworten:
Sie können den Umfang der Ausführlichkeit erheblich reduzieren, wenn Sie Folgendes verwenden
bc
:(Vorausgesetzt, Ihre Shell unterstützt das).
Wenn Sie das lieber als Funktion haben möchten:
Speichern Sie die
c
Definition in Ihrer bevorzugten Shell-Startdatei, wenn Sie sie immer verfügbar machen möchten.quelle
bc<RET>236-128<RET>quit<RET>
beträgt 16 Tastenanschläge.bc<<<"236-128"<RET>
beträgt 15 Tastenanschläge. Nicht das, was ich "stark reduzierter Tippaufwand" nennen würde :-)bc
Kann aber auch mit beendet werden^D
, so dass die erste Option auf 13 Tastenanschläge reduziert wird (^D
als zwei zählen).c 1+1
das, was ich brauchte! :-) (Antwort aktualisiert, um diesbc -l
in der Funktionsdefinition, um sie leistungsfähiger zu machen.Schale
Die einfachste Berechnung in der CLI ist die CLI (Shell) selbst (wenn dies
IFS
die Standardeinstellung ist):Leerzeichen können weggelassen werden:
Da es Teil von POSIX ist , haben es fast alle Shells. Und es enthält die meisten mathematischen Funktionen in C (außer dass zsh eine andere Priorität hat, setzen Sie C_PRECEDENCES, um einen kompatiblen Wert wiederherzustellen):
Und einige Shells haben den größten Teil der mathematischen Syntax in C (einschließlich Komma):
In einigen Shells handelt es sich jedoch nur um ganzzahlige Mathematik (und normalerweise weniger als 2 63 in heutigen Betriebssystemen):
Einige Muscheln könnten schwimmend rechnen:
Vermeiden Sie zsh (zcalc hat ähnliche Probleme):
Ich empfehle Ihnen zu vermeiden
expr
, es braucht manchmal seltsame Fluchten:bc
Auf der nächsten Ebene ist ( auch POSIX )
bc
(Cousin von RPNdc
)Das
dc
war POSIX, wurde aber 2017 entfernt .Kürzere, wenn Ihre Shell es unterstützt:
Oder auch:
Beide sind beliebige Präzisionsrechner mit einigen internen mathematischen Funktionen:
awk
Nach diesen wirklich grundlegenden Calc-Tools müssen Sie zu anderen Sprachen wechseln
Funktion
Sie können eine Funktion für eine der oben genannten Optionen definieren:
Und benutze:
quelle
Wenn ich die Kommentare auf dieser Seite lese , sehe ich ein UNIX / Linux-Programm
calc
, das genau das tut, was Sie wollen. Wenn unter Debian / Ubuntu / Derivaten:dann kannst du:
und wenn Sie einen Alias
alias c='calc'
zu Ihrem hinzufügen.bashrc
oder/etc/bash.bashrc
dann wird es einfach:in der Befehlszeile.
quelle
In
zsh
:quelle
Das
units
Programm ist zwar nicht als Taschenrechner gedacht, funktioniert aber ziemlich gut.Wenn der Ausdruck Leerzeichen enthält, muss er durch Anführungszeichen geschützt sein.
Es unterstützt Exponentiale und tiefes Verschachteln von Klammern
quelle
units -t -d 10 "236GB - 192GB" GB
Ausgänge44
,units -t -d 15 "236GB - 192GB" bytes
Ausgänge44000000000
, usw.Wie in einem Kommentar zu einer früheren Antwort angemerkt, ermöglicht die Standard-Shell (ba) sh, arithmetische Ausdrücke darin auszuwerten
$((...))
. Ich konnte nicht überprüfen, ob dies Teil des POSIX-Standards ist, aber ich habe überprüft, ob es auch auf Cygwin und der Mingw32-Shell funktioniert.Um zu sehen das Ergebnis, dann würden Sie in der Tat geben müssen
echo $((...))
, was einige Zeichen mehr als (interaktive Nutzung) machtbc
. Um jedoch zu verwenden das Ergebnis in einem Skript, wird dies wahrscheinlich kürzer sein als diebc
Lösung (die sein könnte, zum Beispiel`echo ...|bc`
).In Bezug auf die Ausführlichkeit
bc
erlaubt der Befehl die Option,-q
die die Ausgabe des "normalen GNU-bc
Willkommens" unterdrückt .Als letzte, leicht umrandete Bemerkung sei angemerkt, dass
bc
es sich nicht nur um einen Taschenrechner, sondern um eine vollwertige Programmiersprache handelt (einschließlich benutzerdefinierter Funktionen, while & for-Schleifen usw. usw.). Eine weitere Tatsache, die nahe legt, die eingebauten Rechenfunktionen für solch einfache Berechnungen anstelle eines externen Programms zu bevorzugen. Das heißt, das Extrahieren der Daten für gegebene Partitionsnummern und das Behandeln von "M" - und "G" -Suffixen, wie es die ursprüngliche Frage zu sein schien, könnte(g)awk
eher erfordern alsbc
.Quellen: https://www.gnu.org/software/bc/manual/html_mono/bc.html https://www.gnu.org/software/gawk/manual/html_node/Getting-Started.html
quelle
$((...))
heißt Arithmetic Expansion und ist Teil von POSIX: pubs.opengroup.org/onlinepubs/9699919799/utilities/… Für mich ist der größte Nachteil dieser Funktion einer POSIX-Shell, dass sie nur Ganzzahlarithmetik unterstützt :(Was ich in zsh mache ist:
In bash muss ich cat explizit erwähnen:
Wenn das Ergebnis Nachkommastellen enthalten soll (funktioniert in zsh, nicht in bash), würde ich einem der Operanden einen Radixpunkt hinzufügen
quelle
echo $((236 - 128))
funktioniert auch ;-).zsh -c 'print $((12345678901234567890123 + 1))' zsh:1: number truncated after 22 digits: 12345678901234567890123 + 1 -1363962815083169259
.zsh -c 'print $((12345678901234567890123 + 1))'
undzsh -c 'print $((123456789012345678901 + 1))'
. Es wird bei verschiedenen Längen abgeschnitten und erzeugt unterschiedliche numerische Ergebnisse.bash -c 'echo $((1<<63))'
und `` bash -c 'echo $ (((1 << 63) -1))' `.Persönlich mag ich libqalculate (die Kommandozeilenversion von Qalculate ).
Während die Oberfläche sicherlich einfach ist, ist (lib) qalculate ein leistungsfähiger, vollwertiger Taschenrechner. z.B
Außerdem werden nützliche Funktionen wie das Ausfüllen von Registerkarten, das Öffnen / Schließen von Klammern bei Bedarf und das Drucken der Interpretation der Abfrage ausgeführt.
Zum Beenden drücke ich einfach Ctrl+ d.
Stellen Sie für einen noch schnelleren Zugriff die Option auf
alias ca='qalc'
.quelle
Python in einem anderen Tab öffnen?
quelle
dc -e '236 192-p'
... Wenn Sie nicht mit
dc
zwei Zahlen vertraut sind und mehr benötigen, als sie zu subtrahieren, verbringen Sie mehr Zeit damit, nachzuschlagen, wie Sie sie verwendendc
(und möglicherweise RPN im Allgemeinen), als mit bekannteren Methoden zu sparen.quelle
Wenn du gradle installiert hast dann hast du groovige ...
Wenn Groovy korrekt dargestellt wird, sollten Sie Folgendes verwenden können:
Dies mag bei allen anderen Beispielen etwas überflüssig erscheinen, aber:
Wenn Sie kein Java installiert haben, lohnt es sich wahrscheinlich nicht, groovy & java zu installieren - es ist nur eine Option, wenn groovy bereits verfügbar ist.
quelle
Haben Sie versucht, concalc ?
Installieren mit:
quelle
Bevor eine der anderen brillanten Antworten veröffentlicht wurde, habe ich das Skript erstellt
/usr/local/bin/c
enthält:Also: Tippen
c 1+1
Ertrag2
! :-)Hinweis 1: Ich habe
c
diesen Befehl verwendet, da er auf keinem Unix-System vorhanden ist, das ich finden konnte. Wenn Sie dies auf Ihren c-Compiler verlagert hätten, verwenden Sie alles andere, was kurz ist und Sie nicht verwenden.Anmerkung 2: Quelle
quelle
echo "$*" | bc -l
als den von Ihnen verwendeten Shebang zu verwenden,/bin/sh
und ich weiß nicht, ob Sie ksh / bash / zsh zur Verfügung haben. (2) Beachten Sie, dass Sie die zu berechnende Skala ändern können, wenn Sie beispielsweise "c" scale = 60; 777/333 "ausführen. Hoffe, es hilft @ FabbyWenn Python installiert ist, können Sie viele mathematische Operationen über die Befehlszeile ausführen. Ich habe versucht, unten ein Beispiel anzugeben.
Ich habe verwendet, dass
python3
Sie verwenden könnenpython
. Der Unterschied zwischenpython
undpython3
tritt auf, wenn geteilte (gebrochene) Operationen auftreten, um das Problem zu vermeiden, siehe unten python vs python3 .Addieren, Subtrahieren, Multiplizieren und Teilen:
Modul-Rest der Abteilung:
Etageneinteilung:
Exponent - x hoch y (x ^ y):
Quadratwurzel (Beispiel: √4 = 2):
Der natürliche Logarithmus von x = log (x):
Der Logarithmus zur Basis 10 von x = log10 (x):
Fakultät (Beispiel: 3! = 3.2.1 = 6):
Trigonometry-
sin(x)
,cos(x)
,tan(x)
:Weitere mathematische Funktionen finden Sie hier .
-Zum Teilen: (benutze float):
-anstatt
Das ist es. Viel Spaß beim Codieren!
quelle
Entweder
bc
oderqalc
.Um automatisch
bc
immer auf zwei Ziffern zu runden: (läuft mit-l
ist für alltägliche Dinge unhandlich.)Bearbeiten Sie Ihre
~/.bashrc
:Öffne eine neue Shell und starte sie
bc
.quelle
Erstellen eines Einzeilers:
Jetzt können Sie einfache Ganzzahl-Mathematik verwenden:
quelle
${1}
Verwendung der Parameter ist für alle Antworten eindeutig.${1}
;-)