Un calculateur en ligne de commande pour Ubuntu?

119

Je cherche une calculatrice capable d'effectuer des calculs dans le terminal lui-même sans autre préfixe ni suffixe supplémentaire.

Par exemple: si je saisis quelque chose comme 10000-9000 dans le terminal, la réponse devrait être 1000.

Encore une fois, je dis qu'il me faut une calculatrice rapide dans le terminal, sans aucun caractère ajouté. Je sais que si je passe à Python, cela peut le faire mais je ne le veux pas de cette façon.

rɑːdʒɑ
la source
1
Peut-être packages.ubuntu.com/saucy/apcalc ?
Réveil
2
Il serait peut- être possible de pirater quelque chose comme ça avec une sorte de pré-crochet; mais cela en soi ne peut être fait que de manière vraiment laide et hack . Non, je pense vraiment que ce n'est pas une bonne idée. Bash dans son ensemble est conçu comme un langage de script IO simple. Tout ce qu'il fait, à part cela, est plus ou moins ad-hoc et ne fonctionne pas vraiment bien. En revanche, Python (ou même, par exemple, Haskell) est un langage de programmation moderne et polyvalent avec une syntaxe remarquable. Donc, il serait juste stupide de ne pas l'utiliser.
gauche du
3
Dans le même ordre d'idées, vous pouvez également faire quelque chose avec le command_not_foundcrochet et essayer d'envoyer la commande à bc/ calc/ peu importe si cela ressemble vaguement à un calcul. Il se sent toujours un peu sale, cependant.
chronite
1
Attendez, que voulez-vous dire exactement par "passer à" python? et "sans préfixe supplémentaire"? Voulez-vous pouvoir calculer des choses à l’invite sans exécuter de commande ?
Random832

Réponses:

78

Arithmétique Bash

Une autre solution possible consiste à ajouter une fonction simple pour l'arithmétique intégrée de Bash. Mettez ceci dans votre .bashrcfichier pour essayer:

=() {
    echo "$(($@))"
}

Alors maintenant, vous n’avez même $((...))plus besoin de =quoi, cela semble assez naturel.

Remplacement

Une autre chose si vous voulez être encore plus rapide: vous pouvez le remplacer ppar +et xavec *. Cela fonctionnera pour cela:

=() {
    local IFS=' '
    local calc="${*//p/+}"
    calc="${calc//x/*}"
    echo "$(($calc))"
}

= 5 x 5  # Returns 25
= 50p25  # Returns 75

Maintenant, vous n’avez même Shiftplus besoin de rien , la seule chose à faire est d’être arithmétique.

Sortie hexadécimale

La sortie peut être affichée en décimal et en hexadécimal, si vous le souhaitez. ( Remarque : l'utilisation de la xsubstitution sera en conflit avec la 0x...syntaxe hexadécimale)

=() {
    local answer="$(($@))"
    printf '%d (%#x)\n' "$answer" "$answer"
}

Exemple:

$ = 16 + 0x10
272 (0x110)

$ = 16**3 + 16**4
69632 (0x11000)

En utilisant bc

Si vous souhaitez des calculs légèrement plus avancés, vous pouvez le diriger de la bcmanière suivante:

=() {
    local IFS=' '
    local calc="${*//p/+}"
    calc="${calc//x/*}"
    bc -l <<<"scale=10;$calc"
}

= 'sqrt(2)' # Returns 1.4142135623
= '4*a(1)'  # Returns pi (3.1415926532)

Les fonctions fournies par bcsont les suivantes (et peuvent être trouvées à partir de man bc):

sqrt ( expression )
       The value of the sqrt function is the square root of the expression.  
       If the expression is negative, a run time error is generated.

s (x)  The sine of x, x is in radians.

c (x)  The cosine of x, x is in radians.

a (x)  The arctangent of x, arctangent returns radians.

l (x)  The natural logarithm of x.

e (x)  The exponential function of raising e to the value x.

j (n,x)
       The Bessel function of integer order n of x.

Il prend également en charge if, for, whileet les variables comme un langage de programmation mais s'il peut être préférable d'écrire dans un fichier si vous voulez que.

Gardez à l'esprit qu'il substituera pet xdans les noms de fonction / variable. Il peut être préférable de simplement supprimer les remplaçants.

En utilisant gcalccmd

Vous pouvez également appeler la fonction gcalccmd(de gnome-calculator) comme suit:

=() {
    local IFS=' '
    local calc="$*"
    # Uncomment the below for (p → +) and (x → *)
    #calc="${calc//p/+}"
    #calc="${calc//x/*}"
    printf '%s\n quit' "$calc" | gcalccmd | sed 's:^> ::g'
}

= 'sqrt(2)' # Returns 1.4142135623
= '4^4'     # Returns 256

Les fonctions disponibles semblent être (prises directement du code source ), ==dénote des fonctions équivalentes:

ln()
sqrt()
abs()
int()
frac()
sin()
cos()
tan()
sin⁻¹() == asin()
cos⁻¹() == acos()
tan⁻¹() == atan()
sinh()
cosh()
tanh()
sinh⁻¹() == asinh()
cosh⁻¹() == acosh()
tanh⁻¹() == atanh()
ones()
twos()
kiri
la source
1
Merci, pouvez-vous ajouter plus de soutien avec des calculs scientifiques?
Début
2
@rajagenupula Voir mes modifications ci
kiri
Désolé pour cette réponse tardive, mais la commande que vous avez donnée gcalccmdne fonctionne pas très bien. Cela se voit Error 3probablement à cause de cet espace vide. Cependant, cette version légèrement modifiée a parfaitement fonctionné pour moi:echo -e "$calc\nquit"| gcalccmd | sed "s:^> ::g"
udiboy1209
J'ai construit un calcul scientifique en utilisant R! function = { R -q --vanilla -e "$@" | grep -E '[^>](.*)' -o -x --color=never }
Morteza Milani
Bonjour et merci C'est plutôt cool. BTW votre substitution pour 'x' fait échouer pour l'entrée hexadécimale, qui fonctionne autrement très bien. En parlant de ça, est-ce que je peux avoir la réponse dans 'hex' aussi? par exemple. = 2 + 0x20 34 (0x22)
FractalSpace
93

Vous pouvez faire de l’arithmétique d’entiers simple de manière native dans bash en utilisant la ((...))syntaxe, par exemple:

$ echo $((10000-9000))
1000

Il y a aussi la bccalculatrice, qui peut accepter des expressions arithmétiques sur une entrée standard

$ echo "10000-9000" | bc
1000

Le bcprogramme peut aussi faire de l'arithmétique en virgule flottante

$ echo "scale = 3; 0.1-0.09" | bc
.01
Steeldriver
la source
11
Ceci est probablement le plus proche que vous pouvez obtenir. Pour réduire la saisie supplémentaire (sans toutefois l'éliminer complètement), vous pouvez insérer une fonction dans votre ~ / .bashrc: calc()NL {NL echo "$@" | bcNL }où NL est une nouvelle ligne. Ensuite, vous pouvez taper calc 1234 + 768(empreintes 2002), ou toute autre formule bcpouvant interpréter. Vous pouvez bien sûr utiliser n'importe quel nom de fonction, je pensais juste que cela calccadrait parfaitement avec ce que cela faisait.
un CVn
4
une fois que python vaut mieux que l'écho tout le temps. mon avis.
vendredi
6
Vous pouvez également utiliser bc de manière interactive, à moins que vous n'ayez besoin de l'écho pour une autre raison: exécutez simplement bc et tapez votre expression. Tapez Ctrl-D sur sa propre ligne pour quitter.
Inutile
si vous preniez une expression automatique avec l'aide de alias ou de quelque chose d'autre, ce serait génial.
Réduire
3
Pas besoin de echo:bc <<< "2*2"
Bernhard
90

Vous pouvez utiliser calc. N’est pas installé par défaut, mais vous pouvez l’installer rapidement à l’aide de la commande suivante:

sudo apt-get install apcalc

Une fois que vous avez installé, vous pouvez faire le calcul que vous souhaitez:

$ calc 5+2
    7
$ calc 5-2
    3
$ calc 5*2          
    10
$ calc 5/2
    2.5
$ calc 5^2
    25
$ calc 'sqrt(2)' 
    1.4142135623730950488
$ calc 'sin(2)'
    0.9092974268256816954
$ calc 'cos(2)'
    -0.416146836547142387
$ calc 'log(2)'
    ~0.30102999566398119521
$ calc 'sqrt(sin(cos(log(2))))^2'
    ~0.81633199125847958126
$ # and so on...

Pour plus d'informations, consultez sa page de manuel

Radu Rădeanu
la source
2
Merci d'avoir répondu, je vois que la réponse a sa propre signification. J'aime un peu plus tous ces calculs de fonctions trigonométriques. n'importe quel manuel ou quelque page sur ce qu'il peut faire de plus peut améliorer votre réponse. :)
vendredi
@rajagenupula man calcet calc helpdit tout.
Radu Rădeanu
2
Mon intension est, si quelqu'un le regarde il devrait être clair et rapide. Merci.
vendredi
1
En fait, vous calc help builtinvoyez une liste de fonctions supportées telles quesin()
Penghe Geng
Donne plus de nombres décimaux, il est donc mieux adapté à mes besoins que l'arithmétique bash intégrée. Merci.
Mrmfldmn
30

Malheureusement, il n'y a pas de moyen "facile" de faire cela. L'interface python interactive sur la ligne de commande est la mieux adaptée à vos besoins, car contrairement à apcalc\, elle pythonest incluse dans Ubuntu. Je ne sais pas si bcest toujours inclus, cependant, python est le préféré pour ce genre de choses.

Vous pouvez simplement exécuter l' pythoninterface interactive sur la ligne de commande, puis faire les calculs de cette façon. Vous pouvez l'utiliser comme calculatrice.

Pour ce faire, vous ouvrez le terminal, tapez python, puis appuyez sur le Enterbouton.

Ensuite, dans l’invite python qui s’affiche, vous pouvez taper vos calculs. Par exemple 10000 - 9000,. La ligne suivante est le résultat.


Si vous voulez dire, cependant, quelque chose où vous venez de charger le terminal et pouvez le faire ...

10 000 $ à 9 000 $
1000
$

... alors pas il n'y a pas moyen de le faire dans tout le terminal sans rien d' autre, parce que Bash ne gère pas d' arguments numériques comme ça.

Thomas Ward
la source
1
J'ai mentionné que je ne veux pas passer en python
rɑːdʒɑ
1
@rajagenupula a été mis à jour et inclut également les éléments mentionnés dans le chat.
Thomas Ward
bc n'est plus inclus?
Random832
1
Soit dit en passant, ipythonest un peu plus utile que le shell Python standard pour effectuer des calculs et autres.
Naftuli Kay
bc est inclus par défaut (au moins dans 16.04)
TJ Ellis
23

Je vous conseillerais de créer une fonction simple pour les calculs de base de Python. Quelque chose comme ça dans votre .bashrc:

calc() {
    python3 -c 'import sys; print(eval(" ".join(sys.argv[1:])))' "$@"
}

calc 5 + 5
# Returns 10

result="$(calc 5+5)"
# Stores the result into a variable

Si vous voulez faire des calculs plus avancés, vous pouvez utiliser le suivant qui importe toutes les mathfonctions du module. (voir ici pour plus d'informations)

calc() {
    python3 -c 'from math import *; import sys; print(eval(" ".join(sys.argv[1:])))' "$@"
}

calc 'sqrt(2)'  # Needs quotes because (...) is special in Bash
# Returns 1.4142135623730951

result="$(calc 'sqrt(2)')"
# Stores the result into a variable

(Remarque: Python étant un langage de programmation, certaines choses peuvent paraître étranges, par exemple **pour les puissances de et %pour le modulo)

Sinon, vous pouvez créer un script Python calc,

#!/usr/bin/python3
from math import *
import sys
print(eval(' '.join(sys.argv[1:])))

placez-le dans un répertoire inclus dans la PATHvariable et définissez son indicateur exécutable pour obtenir la même calccommande que ci-dessus (inutile de créer une fonction Bash pour exécuter un script Python).

Si vous voulez une méthode en pur Bash, utilisez la réponse de steeldriver. Cette réponse n’est vraiment utile que si vous avez besoin des fonctions les plus avancées (c’est-à-dire de math), car Python est relativement lent par rapport à Bash.


Je ne sais pas si cela casse votre "passage en python, il peut le faire et je ne le veux pas de cette façon". remarque, mais vous n'avez pas besoin d'entrer l'invite interactive et le résultat est accessible dans Bash, donc cette réponse semble valide (du moins pour moi).

kiri
la source
à chaque fois, tout cela ne signifie pas vraiment facile et flexible. Je vous remercie. des améliorations que vous pouvez rendre plus simples et claires? J'adorerais ça.
vendredi
1
@rajagenupula Vous pouvez mettre cela en fonction dans votre .bashrc (peut - être avec un nom plus court: c, ?ou +?) de sorte que vous aurez à chaque terminal que vous ouvrez.
Kiri
1
Attention: avec Python 3, cela fonctionne très bien, mais si vous voulez utiliser Python 2, vous devez éditer l'extrait de code comme suit: python2 -c "from __future__ import division; from math import *; print($*)"sinon, il fera toujours une division entière, par exemple pour calc 5/2vous obtenir à la 2place de 2.5. Voir ici pour référence: stackoverflow.com/a/183870/202504
jmiserez
La solution Python est peut-être meilleure que apcalc en ce sens que vous pouvez importer des bibliothèques supplémentaires, et prend en charge littéral piet e. Je pense que mettre cela comme un script séparé est plus flexible et portable. Voici un résumé
Penghe Geng
21

Utilisez le package gcalccmdfrom gnome-calculator(> = 13.04) ou gcalctool(<13.04). Je pense que le paquet est installé par défaut

% gcalccmd
> 2+3
5
> 3/2
1.5
> 3*2
6
> 2-3
−1
> 
Silex
la source
Le meilleur jusqu'à maintenant .. Pas besoin de faire quelque chose de plus et également installé par défaut .. man gcalccmddit: une calculatrice sur console . C'est tout simplement ce que veut l'OP .. :)
Saurav Kumar
Cest cool, similaire à BC, Python, calculatrices ocatve. Je vous remercie.
Départ
Comme gcalccmd est assez difficile à saisir, il est judicieux d’ajouter un alias de la ./bash_aliasesmême manière alias calc='gcalccmd'ou si vous souhaitez effectuer des calculs ponctuels (avec réponse instantanée), vous pouvez ajouter alias calc='gnome-calculator -s'- utilisation de ce dernier: calc 2000/1300ou calc 2+3. Dans ce cas, il n'est pas nécessaire de quitter la calculatrice - elle vous donne simplement une réponse et vous n'avez pas besoin de taper quit.
Rafal
10

Voici un script shell rapide pour cela:

#!/bin/bash
echo "$@" | bc

Enregistrez ceci sous "c", puis placez-le quelque part dans votre chemin (comme / bin), puis marquez-le comme exécutable.

# nano /bin/c
# chmod +x /bin/c

A partir de maintenant, vous pouvez exécuter des calculs dans le terminal comme ceci:

$ c 10000-9000
1000
utilisateur530873
la source
Vous êtes superbe, ajouter une seule lettre avant le calcul signifie que c’est vraiment une bonne idée. c'est super pour si j'ai besoin de 2 à 3 calculs. Je peux opter pour le python ou un autre plus longtemps, mais plus court, je le choisis. Merci pour la visite.
Départ
2
Je vous conseillerais echo "$@" | bcplutôt de l' utiliser afin que vous puissiez insérer des espaces dans les calculs plus naturellement
kiri
Que diriez-vous d'utiliser =au lieu de cpour le nom de cette commande? Bash vous permet en fait d'utiliser ceci comme nom d'une fonction.
Kaz
1
Vous pouvez mettre des programmes dans ~/bin(votre répertoire personnel de bin) et veiller à ce que /home/yourname/binest dans votre PATH.
Kaz
@ minerz029 Belle réflexion. J'ai modifié ma réponse en conséquence.
user530873
8

Voici une modification de la partie appropriée de /etc/bash.bashrc(sur Ubuntu 10.04) qui modifiera le command_not_foundgestionnaire pour exécuter l'évaluateur d'expression du shell si le premier caractère de la commande inconnue est un nombre ou -ou +.

Vous pourrez faire n'importe quelle arithmétique de coquille de cette façon; voir http://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic pour obtenir une liste des opérateurs arithmétiques.

Notez que si l'expression que vous voulez évaluer contient un *, vous devrez citer le ou *avec les \guillemets, car le shell fera l'expansion du nom de fichier avant de décider quelle commande exécuter. Même chose pour d'autres opérateurs comme >>.

Mettez ceci dans votre ~/.bashrc, puis tapez . ~/.bashrcet essayez-le.

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found ]; then
    function command_not_found_handle {
        if [[ $1 == [0-9+-]* ]]; then
           echo $(( $@ ))
        elif [ -x /usr/lib/command-not-found ]; then
           /usr/bin/python /usr/lib/command-not-found -- $1
           return $?
        elif [ -x /usr/share/command-not-found ]; then
           /usr/bin/python /usr/share/command-not-found -- $1
           return $?
        else
           return 127
        fi
    }
fi

Exemple de sortie: (je tape cta, une faute de frappe, juste pour vérifier que notre nouveau gestionnaire command_not_found essayera toujours de rechercher des commandes inconnues).

mp@ubuntu:~$ cta
No command 'cta' found, did you mean:
 Command 'cda' from package 'xmcd' (universe)
 Command 'cat' from package 'coreutils' (main)
cta: command not found
mp@ubuntu:~$ 9000-1000
8000
Mark Plotnick
la source
Existe-t-il un moyen d'ajouter plus de soutien aux calculs?
Réduire
1
Vous pouvez prendre la ligne qui dit echo $(( $@ ))et la remplacer par, exécutez l’un des programmes de calcul les plus avancés mentionnés par d’autres répondeurs qui prennent leurs arguments sur la ligne de commande.
Mark Plotnick
8

Une autre solution que je n'ai pas vue mentionnée ici est Qalculate (qalc) .

sudo apt-get install qalc

pour la version CLI,

sudo apt-get install qalculate-gtk

pour l'interface graphique.

Il a un tas de fonctionnalités telles que:

  • soutien aux unités : par exemple20 m / s * 12 h = 864 kilom
  • intégré des constantes telles que pi, e, c,avogadro
  • beaucoup intégrés fonctions : par exemple sin(pi) = 0, gamma(4) = 6, 5! = 120,log(1024, 2) = 10
  • Conversion d'unités, par exemple:

> 120 in
120 * inch = 120 in
> convert cm
120 in = 304.8 centim

  • calcul symbolique , par exemple(x + y)^2 = x^2 + 2xy + y^2
  • l' intégration, par exemple integrate 3*x^2 = x^3,diff sin(x), pi
  • aide intégrée, par exemple help convert,help integrate
  • tabulation des commandes
  • tout est traduit, par exemple mon système est en néerlandais, je peux donc écrire les deux factorial(5)et faculteit(5).
  • et plus...

Vous dites que vous voulez l'utiliser sans préfixes, eh bien ... vous pouvez l'utiliser avec un préfixe:

$ qalc 5 ft + 3 cm
(5 * foot) + (3 * centim) = 1.554 m

ainsi que de l'exécuter en tant que remplaçant.

JW.
la source
7

dc! Cela fait partie de coreutils, donc il est installé sur OS X, Ubuntu et à peu près TOUT autre. C'est une calculatrice RPN, donc si vous n'aimez pas ça, ce n'est pas pour vous.

Les commandes très basiques sont les suivantes (la page de manuel a toute la syntaxe que je n’ai pas incluse. Exponentiation, ça vous tente?)

Vous avez seulement besoin d'espaces entre les nombres. Ils sont ignorés dans tous les autres cas.

Taper un nombre le pousse vers le haut de la pile.

+ Adds top 2 items in stack, then pushes result to stack (`2 4 +p` outputs 6)
- Subtracts top 2 items in stack, then pushes result to stack (`4 2 -p` outputs 2)
* Multiplies top 2 items in stack, then pushes result to stack (`6 5 *p` outputs 30)
/ Divides top 2 items in stack, then pushes result to stack (`54 7 /p` outputs 8)
p Print top item in stack, without destroying it
c Clear stack
r Swap top 2 items on stack
d Duplicate top item on stack
k Pops top item off stack, using it to determine precision (so 10 k would print 10 numbers after the decimal point). Default is 0, so it won't do floating point math by default.
n Pops top value off stack, then sends to stdout without a trailing newline
f Dump stack. Useful for finding what something does
Encore un autre utilisateur
la source
Je viens de remarquer que cela ne répond pas à la question (ni aucune autre réponse). La question est de savoir comment ne PAS insérer de texte devant l'équation (ni derrière), et simplement taper say 42 * 5dans un terminal, et le laisser afficher la réponse
Encore un utilisateur
2
La plupart des réponses ne s'appliquent pas. Taper 1+1dans un terminal ne fonctionnera presque jamais. Donc, votre réponse est bonne
kiri
@YetAnotherUser Je pense que le seul moyen est de pirater un système de commande introuvable (s'il est installé) ou de faire quelque chose de sale dans le champ de bataille ...
Braiam
5

J'utilise Octave pour ce genre de chose: http://www.gnu.org/software/octave/

C'est à peu près un clone matlab (excuses s'il s'agit d'une simplification excessive) qui peut être utilisé dans le terminal en tapant octave. Installez sudo apt-get install octave

Ce n'est pas tout à fait ce que vous voulez, mais j'ai pensé l'ajouter comme alternative au python.

Exemple d'utilisation:

~ $ octave
octave:1> 9000 - 8000
ans =  1000
octave:2> 
Andy T
la source
Il est tout à fait judicieux de suggérer un autre moyen d'atteindre l'objectif, mais vous devriez fournir davantage d'informations sur la manière dont le PO utiliserait Octave pour répondre aux besoins énoncés et sur les raisons pour lesquelles il s'agit d'une bonne alternative.
Chaskes
2
+1, Octave, matlab, scilab, python sont similaires, mais je dois installer octave, mais python est préinstallé. donc je me dirige vers python par défaut. Je vous remercie.
vendredi
de tout ce que j'ai essayé (et j'en ai essayé beaucoup!) octave est le seul à renvoyer une erreur de syntaxe non 0! Merci!
Aquarius Power
5

J'aime beaucoup wcalc. C'est une calculatrice scientifique en ligne de commande. Facile à trouver dans le Centre logiciel Ubuntu, ou utilisez simplement apt-get.

sudo apt-get install wcalc

Il accepte les arguments de ligne de commande ainsi que le mode "shell":

# simple operation
$ wcalc 2+2
 = 4
# Quoting is necessary to prevent shell from evaluating parenthesis
$ wcalc "(2+2)*10"                                                                                    
 = 40
$ wcalc "sqrt(25)"                                                                                    
~= 5
# in shell mode you can evaluate multiple commands repeatedly
$ wcalc
Enter an expression to evaluate, q to quit, or ? for help:
-> 12*20+1
 = 241
-> sin(90)
 = 1
-> sin(pi/2)
 = 0.0274121

Et si quelqu'un est en ingénierie, comme moi, vous pouvez utiliser GNU Octave. Il peut faire toutes sortes de choses, créer des graphiques, résoudre des équations simultanées. De plus, c'est une alternative gratuite à Matlab

Sergiy Kolodyazhnyy
la source
... combinant cela avec @ minerz029 est assez nette: Placez dans vos .bash_aliases ~ /:=() { wcalc "$@" }
Frank Nocke
4

manière simple est d'appeler python.

Exemple:

>  python -c 'print 10000-9000'
utilisateur2327875
la source
pouvez-vous mentionner quelque chose avec des calculs scientifiques.
vendredi
1
Voulez-vous quelque chose comme ça? python -c 'import math;print math.log(2)'
user1251007
3

Ce que j’ai trouvé, c’est que je ne peux pas faire confiance aux options expr, bc ou Shell intégrées. J'ai donc utilisé Perl qui serait normalement installé dans la distribution * linux

perl -le 'printf "%.0f", eval"@ARGV"' "($VAL2-$VAL1)"

Le calcul ci-dessus soustrait $ VAL1 de $ VAL2 et imprimera sans décimale (0f)

Profitez de l'utilisation de Perl is (détails des avantages et inconvénients répertoriés ici )

  • Meilleure capture d'erreur (diviser par 0 n'arrêtera pas le calcul)
  • Peut fournir des formules dans un fichier de configuration. Pas besoin d'échapper à l'aide de regex complexe
diaryfolio
la source
mais chaque fois que cette commande signifie peu de problème de toute façon. Existe-t-il des calculatrices basées sur Perl à utiliser dans les terminaux?
vendredi
3

Vous pouvez ajouter la fonction suivante à votre fichier .bashrc:

function = {
  echo "$@" | bc -l
}

Notez que le -ldrapeau est très important. Sans cela, l'utilisation de bcdonne 5 / 2 = 2.

Comme il a été mentionné ci-dessus, les calculs peuvent être effectués en utilisant le =signe devant la formule.

vdm
la source
3

Vous pouvez également utiliser awk pour effectuer des calculs arithmétiques sur le terminal,

echo 10000 9000 | awk '{print $1-$2}'
1000
echo 10000 9000 | awk '{print $1+$2}'
19000
echo 10000 9000 | awk '{print $1/$2}'
1.11111
echo 10000 9000 | awk '{print $1*$2}'
90000000
Avinash Raj
la source
cool, awk (sous forme d'octave) renvoie également une valeur autre que 0 en cas d'erreur de syntaxe thx!
Aquarius Power
2

utilisez la commande "bc" et vous pourrez alors calculer

exemple

[root@vaibhav ~]# bc

----------these lines will genrate automaicaly---------------

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

---------------enter your calculation here---------------------------------------


10+2   

12

À utiliser bcsans la note de garantie, écrivez dans le terminalbc -q

exemple

[root@vaibhav ~]# bc -q
10+2
12
Vaibhav Jain
la source
bc est déjà expliqué et inclus.
Braiam
2

Vous pouvez utiliser bind et bash C-aet C-epour contrôler la sortie. Par exemple, exécutez ceci dans votre shell:

bind '"\C-j": "\C-aecho $(( \C-e )) \C-m"'

Maintenant tapez une opération arithmétique comme 10 + 15 et appuyez sur Ctrl+ J:

$ echo $(( 10 + 15 )) 
25

Vous obtiendrez ceci. Maintenant, comment fait-on?

  • bind Cette commande change la liaison de votre bash, comme les raccourcis clavier.
  • \C-j c'est l'équivalent bash de Ctrl + J, c'est la combinaison de touches que nous voudrions ajouter à notre commande.
  • \C-a cela nous amène au début de la ligne.
  • echo $((cela écrit echo $((au début.
  • \C-e nous amène au bout de la ligne
  • )) ferme notre parenthèse précédente
  • \C-m c'est l'équivalent de la clé de retour.

Vous pouvez écrire ceci dans votre ~/.inputrcfichier:

"\C-j": "\C-aecho $(( \C-e )) \C-m"

Bien sûr, les autres réponses sont également valables! Juste un peu modifié:

  • avant JC: "\C-j": "\C-aecho " \C-e " | bc \C-m"
  • apcalc: "\C-j": "\C-acacl \C-m"
  • python: "\C-j": "\C-apython3 -c "print( \C-e )" \C-m"
  • d'autres?

Vous pouvez changer Ctrl + J comme bon vous semble, mais rappelez-vous, essayez de ne pas le changer pour quelque chose qui a déjà une liaison;).

Ressource:

Braiam
la source
Ctrl + J a déjà une liaison, il soumet la ligne (comme Enter) C'est en fait une réponse plutôt intelligente, cependant;)
kiri
2

Dans le passé, j’utilisais wcalcun petit programme appelé equasiment impossible à rechercher sur Google. Maintenant, j'utilise un script python pour cela, qui utilise des fonctionnalités etelles que les crochets. wcalcest toujours agréable car il peut effectuer des conversions de précision et des unités arbitraires, mais je n’utilise presque jamais ces fonctionnalités.

#!/usr/bin/env python3

"""
This is a very simple command line calculator.  It reads in all
arguments as a single string and runs eval() on them.  The math module
is imported so you have access to all of that.  If run with no
arguments, it allows you to input a single line expression.  In the
case of command line args, square brackets are replaced with round
parentheses, because many shells interpret round parentheses if they
are not quoted.
"""

import sys, numbers
import cmath, math

args = sys.argv[1:]

if len(args) < 1:
    expr = input()
else:
    expr = " ".join(args[:])
    expr = expr.replace("[", "(").replace("]", ")")

def log2(x):
    """Return the base-2 logarithm of x."""
    return cmath.log(x, 2)

# the smallest number such that 1+eps != 1
# (this is approximate)
epsilon = sys.float_info.epsilon

env = math.__dict__
env.update(cmath.__dict__)
env = {k:v for k,v in env.items() if not k.startswith("__")}
env["eps"] = epsilon
env["log2"] = log2
env["inf"] = float("inf")
env["nan"] = float("nan")

res = eval(expr, env)
# throw away small imaginary parts, they're probably just due to imprecision
if (isinstance(res, numbers.Number)
    and res != 0
    and abs(res.imag)/abs(res) < 10*epsilon):
    res = res.real

print(str(res).replace("(", "[").replace(")", "]"))

Voici comment l'utiliser (en supposant que le script a été sauvegardé eet placé quelque part dans le fichier $PATH):

$ e e**[pi*1i]
-1.0
$ e hex[10**3]
0x3e8
$ e "[0o400+3]&0xff" # need quotes because of '&'
3
jpkotta
la source
un exemple rendra cela plus clair. Merci.
vendredi
0

Il existe une méthode en une étape pour accomplir exactement ce que vous voulez. Tout ce que vous avez à faire est de configurer le shellpour votre compte /bin/bc.

bizzyunderscore
la source
3
Pourriez-vous élaborer? Pressume OP ne sait pas comment changer de shell.
Braiam
0

Vous pouvez également utiliser le printf shell intégré pour effectuer des calculs arithmétiques sur un terminal.

printf `expr $num1 + $num2`   # num1,num2 are  variables which stores numbers as values.

Exemple:

$ printf "$(expr 10000 + 9000)\n"
19000
$ printf "$(expr 10000 - 9000)\n"
1000
Avinash Raj
la source
3
De cette façon, vous utilisez expr (qui n'est pas intégré) pour calculer le résultat, printf est redondant ici
Javier López
0

Vous pouvez utiliser l'interpréteur python pour le calcul. Voici un tutoriel sur la façon de le faire .

Python 2 et Python 3 sont installés dans Ubuntu par défaut.

$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 2+2
4
>>> 3*5
15
personne
la source
0

Créer une calculatrice de terminal

Mettez ce qui suit dans votre fichier .bashrc

function calc
{
 echo "${1}"|bc -l;
}

Ou exécutez-le à l'invite du shell. Maintenant, "calc" à partir de la coque fonctionnera comme suit:

$ calc 3+45
   48

Toutes les fonctions avec "(" ou ")" doivent être entre guillemets.

Vishnu NK
la source