126 votes

Une calculatrice en ligne de commande pour Ubuntu ?

Je recherche une calculatrice capable d'effectuer des calculs dans le terminal lui-même, sans autres préfixes et suffixes supplémentaires.

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

Je le répète, j'ai juste besoin d'une calculatrice rapide en terminal, sans aucun caractère ajouté. Je sais que si je passe à Python, cela peut se faire mais je ne le veux pas de cette manière.

98voto

steeldriver Points 118154

Vous pouvez faire de l'arithmétique entière simple en natif dans bash en utilisant la fonction ((...)) syntaxe, par exemple

$ echo $((10000-9000))
1000

Il y a aussi le bc calculatrice, qui peut accepter des expressions arithmétiques sur l'entrée standard

$ echo "10000-9000" | bc
1000

Le site bc Le programme peut également effectuer des calculs en virgule flottante.

$ echo "scale = 3; 0.1-0.09" | bc
.01

98voto

Radu Rădeanu Points 156862

Vous pouvez utiliser calc . n'est pas installé par défaut, mais vous pouvez l'installer rapidement en utilisant la commande suivante :

sudo apt-get install apcalc

Après l'installation, vous pouvez effectuer tous les calculs 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 son page de manuel

84voto

kiri Points 25860

Arithmétique Bash

Une autre solution possible est d'ajouter une fonction simple pour l'arithmétique intégrée de Bash. Placez-la dans votre .bashrc à essayer :

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

Donc maintenant, vous n'avez même pas besoin $((...)) plus, juste = ce qui semble assez naturel.

Remplacement

Autre chose si vous voulez être encore plus rapide : vous pouvez le faire remplacer p con + y x con * . 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 pas besoin Shift plus, la seule chose est devant l'arithmétique.

Sortie hexadécimale

La sortie peut être affichée à la fois en décimal et en hexadécimal, si on le souhaite. ( Hinweis : en utilisant x La substitution sera en conflit avec l 0x... syntaxe hexagonale)

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

Exemple :

$ = 16 + 0x10
272 (0x110)

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

Utilisation de bc

Si vous voulez des calculs un peu plus avancés, vous pouvez le passer à bc comme ça :

=() {
    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 bc sont les suivants (et peuvent être trouvés à 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 , while et des variables comme dans un langage de programmation, bien qu'il puisse être préférable d'écrire dans un fichier si vous le souhaitez.

Gardez à l'esprit qu'il remplacera p y x dans les noms de fonctions/variables. Il peut être préférable de simplement supprimer les remplacements.

Utilisation de gcalccmd

Vous pouvez également effectuer l'appel de 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 les suivantes (tirées directement de le 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()

30voto

Joe the Person Points 5090

Malheureusement, il n'y a pas de moyen plus simple de le faire. L'interface interactive Python en ligne de commande est la plus adaptée à ce dont vous avez besoin, car contrairement à apcalc\, python es inclus dans Ubuntu. Je ne suis pas sûr que bc est toujours inclus, mais Python est le préféré pour ce genre de choses.

Vous pouvez simplement exécuter la commande interactive python en ligne de commande, et faire les calculs de cette façon. Vous pouvez l'utiliser comme votre calculatrice.

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

Ensuite, dans l'invite Python qui s'affiche, vous pouvez taper vos calculs. Par exemple, 10000 - 9000 . La sortie de la ligne suivante est le résultat.


Si vous voulez dire, quelque chose où vous chargez juste le terminal et pouvez faire ça...

$ 10000 - 9000
1000
$

... alors non, il n'y a pas moyen de faire cela dans juste dans le terminal sans rien d'autre, car Bash ne gère pas les arguments numériques comme ça.

23voto

kiri Points 25860

Je vous conseille de créer une fonction simple pour les calculs Python de base. Quelque chose comme ceci 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 celui qui suit, qui importe toutes les données de l math les fonctions du module. (voir aquí 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 : comme Python est un langage de programmation, certaines choses peuvent sembler étranges, par ex. ** pour les pouvoirs de et % pour modulo)

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

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

le placer dans un répertoire inclus dans le PATH et définir son drapeau exécutable pour obtenir le même résultat que celui de la variable calc comme ci-dessus (pas besoin 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 bénéfique 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 suis pas sûr que cela casse votre note "passez à Python il peut faire ça & je ne le veux pas de cette façon", mais vous n'avez pas besoin d'entrer dans l'invite interactive et le résultat est accessible en Bash donc cette réponse me semble valable (du moins pour moi).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X