Любой калькулятор командной строки для Ubuntu?

Я ищу калькулятор, который может выполнять вычисления в самом терминале без каких-либо дополнительных префиксов и суффиксов.

Например: если я набрал что-то вроде 10000-9000 в терминале, ответ должен получиться как 1000.

Еще раз говорю, мне просто нужен быстрый калькулятор в терминале, без добавления каких-либо символов. Я знаю, что если я переключусь на Python, он сможет это сделать, но я не хочу этого таким образом.

121
задан 20 November 2013 в 16:12

25 ответов

Существует один шаг, чтобы выполнить именно то, что вы хотите. Все, что вам нужно сделать, это установить shell для вашей учетной записи на /bin/bc.

0
ответ дан 20 November 2013 в 16:12

Простой способ - вызвать Python.

Пример:

>  python -c 'print 10000-9000'
0
ответ дан 20 November 2013 в 16:12

Используйте пакет gcalccmd из gnome-calculator (> = 13.04) или gcalctool (< 13.04). Я думаю, что пакет установлен по умолчанию

% gcalccmd
> 2+3
5
> 3/2
1.5
> 3*2
6
> 2-3
−1
> 
0
ответ дан 20 November 2013 в 16:12

Создание калькулятора терминала

Добавьте в файл .bashrc следующее

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

. Или запустите его в командной строке. Теперь «calc» из оболочки будет работать следующим образом:

$ calc 3+45
   48

Все функции с «(» или «)» должны быть заключены в кавычки.

0
ответ дан 20 November 2013 в 16:12

Вы можете использовать интерпретатор Python для расчета. Вот учебник о том, как это сделать .

Python 2 и python 3 установлены в Ubuntu по умолчанию.

$ 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
0
ответ дан 20 November 2013 в 16:12

Вы также можете использовать встроенную оболочку printf для выполнения арифметических вычислений на терминале.

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

Пример:

$ printf "$(expr 10000 + 9000)\n"
19000
$ printf "$(expr 10000 - 9000)\n"
1000
0
ответ дан 20 November 2013 в 16:12

используйте команду "bc", а затем вы можете выполнить расчет

пример

[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

Чтобы использовать bc без гарантийного талона, пишите в терминал bc -q

пример

[root@vaibhav ~]# bc -q
10+2
12
0
ответ дан 20 November 2013 в 16:12

Вы также можете использовать awk для выполнения некоторых арифметических вычислений на терминале,

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
0
ответ дан 20 November 2013 в 16:12

Вы можете добавить следующую функцию в ваш файл .bashrc:

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

Обратите внимание, что флаг -l очень важен. Без этого использование bc дает 5 / 2 = 2.

Как отмечалось выше, вычисления могут быть выполнены с использованием знака = перед формулой.

0
ответ дан 20 November 2013 в 16:12

Я обнаружил, что я не могу доверять expr, bc или встроенным параметрам Shell. Поэтому я использовал Perl, который обычно устанавливается в дистрибутиве * linux

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

Приведенный выше расчет вычтет $ VAL1 из $ VAL2 и печатает без десятичных разрядов (0f)

Преимущество использования Perl - это (подробности о за и против, перечисленные здесь )

  • Улучшение захвата ошибок (деление на 0 не остановит вычисления)
  • Может предоставить формулы в конфигурационном файле. Не нужно убегать, используя сложное регулярное выражение
0
ответ дан 20 November 2013 в 16:12

Я использую Octave для такого рода вещей: http://www.gnu.org/software/octave/

Это в значительной степени клон matlab (извинения, если это упрощение), который можно использовать в терминале, набрав октаву. Установите sudo apt-get install octave

Это не совсем то, что вам нужно, но я подумал, что добавлю его как альтернативу python.

Пример использования:

~ $ octave
octave:1> 9000 - 8000
ans =  1000
octave:2> 
0
ответ дан 20 November 2013 в 16:12

dc! Он является частью coreutils, поэтому он установлен на OS X, Ubuntu и почти все остальное. Это калькулятор RPN, так что если он вам не нравится, он не для вас.

Основными командами являются следующие (man-страница имеет весь синтаксис, который я не включил. Кто-нибудь возражает?)

Вам нужны только пробелы между числами. Они игнорируются во всех других случаях.

Ввод числа увеличивает его на вершину стека.

+ 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
0
ответ дан 20 November 2013 в 16:12

Вот быстрый сценарий оболочки для этого:

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

Сохраните его как «c», затем поместите его где-нибудь на вашем пути (например, / bin), затем отметьте его как исполняемый.

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

Теперь вы можете выполнять вычисления в терминале следующим образом:

$ c 10000-9000
1000
0
ответ дан 20 November 2013 в 16:12

Вы можете использовать calc . По умолчанию не устанавливается, но вы можете быстро установить его с помощью следующей команды:

sudo apt-get install apcalc

После установки вы можете выполнять любые вычисления:

$ 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...

Для более подробную информацию смотрите на его man-странице

0
ответ дан 20 November 2013 в 16:12

Вы можете выполнять простую целочисленную арифметику непосредственно в bash, используя синтаксис ((...)), например

.
$ echo $((10000-9000))
1000

Также имеется калькулятор bc, который может принимать арифметические выражения на стандартном вводе

$ echo "10000-9000" | bc
1000

Программа bc может также выполнять арифметику с плавающей запятой

$ echo "scale = 3; 0.1-0.09" | bc
.01
0
ответ дан 20 November 2013 в 16:12

Мне очень нравится Wcalc. Это научный калькулятор командной строки. Легко найти в Центре программного обеспечения Ubuntu или просто использовать apt-get.

sudo apt-get install wcalc

Он принимает аргументы командной строки, а также имеет режим «оболочки»:

# 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

И если кто-то занимается инжинирингом, как я, вы можете использовать GNU Octave. Он может делать все что угодно, строить графики, решать уравнения одновременно. Плюс это бесплатная альтернатива Matlab

0
ответ дан 20 November 2013 в 16:12

Вы можете использовать bind и bash C-a и C-e для управления выводом. Например, выполните это в своей оболочке:

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

Теперь введите любую арифметическую операцию, например 10 + 15, и нажмите Ctrl + J :

$ echo $(( 10 + 15 )) 
25

Вы получите это. Теперь, как это делается?

  • bind эта команда меняет привязку вашего bash, как сочетания клавиш.
  • \C-j это bash-эквивалент Ctrl + J, вот какую комбинацию клавиш мы хотели бы добавить в нашу команду.
  • \C-a это приводит нас к началу строки.
  • echo $(( это пишет echo $(( в начале.
  • \C-e переносит нас в конец строки
  • )) закрывает нашу предыдущую скобку
  • \C-m это эквивалент ключа возврата.

Вы можете записать это в свой файл ~/.inputrc:

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

Конечно, другие ответы также действительны! Просто немного подправил:

  • bc: "\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"
  • какие-нибудь еще?

Вы можете изменить Ctrl + J на ​​все что угодно, но помните, старайтесь не менять его на то, что уже имеет привязку;).

Ресурс:

0
ответ дан 20 November 2013 в 16:12

В прошлом я использовал wcalc и немного названной программы e это в значительной степени невозможно к Google для. Теперь я использую сценарий Python, чтобы сделать это, которое использует некоторые функции e как квадратные скобки. wcalc все еще хорошо, потому что это может сделать преобразование произвольной точности и единицы, но я почти никогда не использую те функции.

#!/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(")", "]"))

Вот то, как использовать его (предполагающий, что сценарий был сохранен как e и помещенный где-нибудь в $PATH):

$ e e**[pi*1i]
-1.0
$ e hex[10**3]
0x3e8
$ e "[0o400+3]&0xff" # need quotes because of '&'
3
2
ответ дан 20 November 2013 в 16:12

Другим решением, которое я не видел упомянутый здесь, является Qalculate (qalc).

sudo apt-get install qalc

для версии CLI,

sudo apt-get install qalculate-gtk

для GUI.

Это имеет набор функций, таких как:

  • поддержка единиц: например. 20 m / s * 12 h = 864 kilom
  • встроенные константы такой как pi, e, c, avogadro
  • много встроенных функций: например. sin(pi) = 0, gamma(4) = 6, 5! = 120, log(1024, 2) = 10
  • преобразование единицы, например:

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

  • символьное вычисление, например. (x + y)^2 = x^2 + 2xy + y^2
  • интеграция, например. integrate 3*x^2 = x^3, diff sin(x), pi
  • встроенная справка, например. help convert, help integrate
  • заполнение клавишей Tab команд
  • все переводится, например, моя система находится на нидерландском языке, таким образом, я могу записать обоим factorial(5) и faculteit(5).
  • и больше...

Вы говорите, что хотите использовать его без префиксов, хорошо... можно использовать его с префиксом:

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

а также выполнение его как repl.

8
ответ дан 20 November 2013 в 16:12

Вот модификация соответствующей части /etc/bash.bashrc (в Ubuntu 10.04), которая изменит обработчик command_not_found для запуска оценщика выражений оболочки, если первый символ неизвестной команды является числом или - или +.

Таким образом, вы сможете выполнить любую арифметику оболочки; см. http://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic для получения списка арифметических операторов.

Обратите внимание, что если выражение, которое вы хотите оценить, содержит *, вам придется заключить в кавычки * с \ или кавычками, поскольку оболочка выполнит расширение имени файла, прежде чем решить, какую команду запустить. То же самое для других операторов, таких как >>.

Поместите это в ~/.bashrc, затем напечатайте . ~/.bashrc и попробуйте.

# 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

Пример вывода: (Я печатаю cta, опечатку, просто чтобы проверить, что наш новый обработчик command_not_found все еще будет пытаться искать неизвестные команды).

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
0
ответ дан 20 November 2013 в 16:12

К сожалению, нет «более простого» способа сделать это. Интерактивный интерфейс Python в командной строке лучше всего подходит для того, что вам нужно, потому что в отличие от apcalc \, python включен в в Ubuntu. Я не уверен, что bc все еще включен, однако, Python является любимым для этого материала.

Вы можете просто запустить интерактивный интерфейс python в командной строке, а затем выполнить математику таким образом. Вы можете использовать это как калькулятор.

Для этого вы открываете терминал, набираете python, затем нажимаете кнопку Enter .

Затем в появившемся приглашении python вы можете ввести свою математику. Например, 10000 - 9000. Вывод следующей строки - результат.


Если вы имеете в виду что-то, где вы просто загружаете терминал и можете сделать это ...

$ 10000 - 9000
1000
$

... тогда нет, в нет способа сделать это просто в терминале без чего-либо еще, потому что Bash не обрабатывает подобные числовые аргументы.

0
ответ дан 20 November 2013 в 16:12

Я советовал бы Вам создавать простую функцию для основных вычислений Python. Что-то вроде этого в Вашем .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

Если Вы хотите сделать больше высшей математики, можно использовать следующий, который импортирует весь из math функции модуля. (см. здесь для большего количества информации),

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

(Примечание: Поскольку Python является языком программирования, некоторые вещи могут казаться странными, например. ** для полномочий и % для модуля)

Кроме того, можно создать сценарий Python calc,

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

поместите его в каталог, включенный в PATH переменная и набор ее исполняемый флаг для получения того же calc управляйте как выше (никакая потребность создать функцию Bash для запущения скрипта Python).

Если Вы хотите метод в чистом Bash, используйте ответ steeldriver. Этот ответ только действительно выгоден при необходимости в более усовершенствованных функциях (т.е. от math), поскольку Python является относительно медленным по сравнению с Bash.


Я не уверен, повреждает ли это Ваш "переключатель к Python, он может сделать это, и я не хочу его таким способом". отметьте, но Вы не должны вводить интерактивную подсказку, и результат доступен в Bash, таким образом, этот ответ кажется действительным (мне, по крайней мере).

23
ответ дан 20 November 2013 в 16:12

Арифметика Баша

Другое возможное решение - добавить простую функцию для встроенной арифметики Баша. Поместите это в свой файл .bashrc и попробуйте:

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

Итак, теперь вам даже не нужно $((...)), просто =, что кажется достаточно естественным.

Замена

Другое дело, если вы хотите быть еще быстрее: вы можете заставить его заменить p на + и x на *. Это будет работать для этого:

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

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

Теперь вам даже не нужно Shift , только перед арифметикой.

Шестнадцатеричный вывод

Вывод может отображаться как в десятичном, так и в шестнадцатеричном виде, если это необходимо. ( Примечание : использование замены x будет конфликтовать с шестнадцатеричным синтаксисом 0x...)

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

Пример:

$ = 16 + 0x10
272 (0x110)

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

Использование bc

Если вы хотите немного более сложных вычислений, вы можете направить их в bc следующим образом:

=() {
    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)

Функции, предоставляемые bc, следующие (и их можно найти в 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.

Он также поддерживает if, for, while и переменные, такие как язык программирования, хотя, может быть, лучше записать в файл, если вы этого хотите.

]

Имейте в виду, что он заменит p и x в именах функций / переменных. Может быть, лучше просто удалить замены.

Использование gcalccmd

Вы также можете сделать вызов функции gcalccmd (из gnome-calculator) следующим образом:

=() {
    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

Доступные функции кажутся (взятыми прямо из исходный код ), == обозначает эквивалентные функции:

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()
0
ответ дан 20 November 2013 в 16:12

awk встроен, поэтому я создал небольшую функцию-оболочку в моей функции ~/.bashrc и буду использовать ее в будущих проектах. Вот как это использовать:

$ a=2.2; b=3.3

$ math c = $a / $b
$ echo $c
0.666667

$ math c = $a * $b
* not allowed, use x to multiply

$ math c = $a x $b
$ echo $c
7.26

$ math c = $a - $b
$ echo $c
-1.1

Вот функция:

math () {

    [[ $2 != "=" ]] && { echo "Second parm must be '='"; return 1; }

    # Declare arg as reference to argument provided (Bash 4.3 or greater)
    declare -n mathres=$1

    math_op="$4"    # '*' as parameter changes operator to 'aptfielout' and
                    # operand2 to 'aptfilein' so force 'x' instead.
    [[ $math_op == "aptfielout" ]] && \
        { echo "* not allowed, use x to multiply"; return 2;}
    [[ $math_op == "x" ]] && math_op="*"

    mathres=$(awk "BEGIN { print ($3 $math_op $5) }")

#    test=$(awk "BEGIN { print ($3 $math_op $5) }")
#    echo "1:$1 2:$2 3:$3 4:$4 5:$5 result=$test"

} # math
1
ответ дан 21 May 2020 в 03:07

Гений

Когда вам нужно что-то более мощное, чем bc. Например, Genius позволяет выполнять возведение в степень с рациональными (не целыми) показателями:

genius --exec='81^0.75'

выводит

27,0

1
ответ дан 8 August 2020 в 08:46

Другие вопросы по тегам:

Похожие вопросы: