Ubuntu için herhangi bir komut satırı hesaplayıcısı?

116

Başka ekstra önekler ve son ekler olmadan terminalde hesaplamalar yapabilen bir Hesap Makinesi arıyorum.

Örneğin: Terminalde 10000-9000 gibi bir şey yazmış olsaydım, cevap 1000 olarak çıkar.

Bir kez daha söylüyorum, herhangi bir karakter eklenmeden terminalde hızlı bir hesap makinesine ihtiyacım var. Python'a geçersem bunu yapabilirim, ama bunu istemiyorum.

    
sordu Ten-Coin 18.11.2013 03:37

23 cevap

72

Bash Aritmetik

Başka bir olası çözüm, Bash'ın yerleşik aritmetiği için basit bir işlev eklemektir. Bunu denemek için bunu .bashrc dosyanıza koyun:

=() {
    echo "$(([email protected]))"
}

Şimdi, artık% co_de değerine bile ihtiyacınız yok, sadece $((...)) yeterince doğal görünüyor.

Yedek

Daha hızlı olmak isterseniz başka bir şey de yapabilirsiniz: = 'yi p ve + ile x ile değiştirebilirsiniz. Bu, bunun için çalışacaktır:

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

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

Artık artık Üst Karakter 'ye bile ihtiyacınız yok, tek şey aritmetiğin önündeki * .

Onaltılı çıktı

Çıktı istenirse hem ondalık hem de onaltılık olarak gösterilebilir. ( Not : substitution kullanılarak x hex sözdizimi ile çakışma olacaktır)

=() {
    local answer="$(([email protected]))"
    printf '%d (%#x)\n' "$answer" "$answer"
}

Örnek:

$ = 16 + 0x10
272 (0x110)

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

0x... değerini kullanma

Biraz daha gelişmiş hesaplamalar yapmak isterseniz, bunu bc 'ye benzer şekilde borulayabilirsiniz:

=() {
    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 tarafından sağlanan işlevler aşağıdaki gibidir (ve bc adresinden bulunabilir):

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.

Ayrıca, isterseniz man bc , if , for ve programlama dili gibi değişkenleri de destekliyorsa, bir dosyaya yazmak daha iyi olabilir.

İşlev / değişken adlarında while ve p yerini alacağını unutmayın. Değiştirmeleri kaldırmak daha iyi olabilir.

x değerini kullanma

Ayrıca, işlev çağrısını gcalccmd ( gcalccmd den) gibi yapabilirsiniz:

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

Kullanılabilir işlevler görünüyor (doğrudan kaynak kodundan alınır), gnome-calculator , eşdeğer işlevleri gösterir:

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()
    
verilen cevap kiri 19.11.2013 10:33
88

((...)) sözdizimini kullanarak bash içinde basit tamsayı aritmetiği yapabilirsiniz, ör.

$ echo $((10000-9000))
1000

Ayrıca, standart girdideki aritmetik ifadeleri kabul edebilen bc hesaplayıcı var

$ echo "10000-9000" | bc
1000

bc programı kayan nokta aritmetiği de yapabilir

$ echo "scale = 3; 0.1-0.09" | bc
.01
    
verilen cevap steeldriver 18.11.2013 03:59
87

calc 'yi kullanabilirsiniz. Varsayılan olarak yüklenmez, ancak aşağıdaki komutu kullanarak hızlı bir şekilde kurabilirsiniz:

sudo apt-get install apcalc

Kurulduktan sonra, dilediğiniz herhangi bir hesaplama yapabilirsiniz:

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

Daha fazla bilgi için erkek sayfa ’nı görüntüleyin

    
verilen cevap Radu Rădeanu 18.11.2013 10:16
30

Maalesef, bunu yapmak için "daha kolay" bir yol yoktur. Komut satırındaki etkileşimli python arabirimi, gereksiniminiz için en uygun olanıdır çünkü Ubuntu'da apcalc \, python 'nin dahil edilmiştir . % Co_de% öğesinin hala dahil edilmiş olup olmadığından emin değilim, ancak, python bu öğeler için aşağı açılan favoridir.

Etkileşimli bc arabirimini komut satırında çalıştırabilir ve sonra bu şekilde matematik yapabilirsiniz. Bunu hesap makineniz olarak kullanabilirsiniz.

Bunu yapmak için, terminali açarsınız, python yazıp Enter düğmesine basın.

Ardından, görünen python isteminde, matematiğinizi yazabilirsiniz. Örneğin, python . Sonraki satır çıktısı sonuçtur.

Yani, terminali yüklediğiniz ve bunu yapabileceğiniz bir şey varsa ...

$ 10000 - 9000
1000
$

... o zaman, hiçbir şey yapmadan terminali sadece yapmanın bir yolu yok, çünkü Bash bunun gibi sayısal argümanları ele almıyor.

    
verilen cevap Thomas Ward 18.11.2013 03:40
23

Temel Python hesaplamaları için basit bir işlev oluşturmanızı tavsiye ederim. % Co_de% 'da böyle bir şey var:

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

calc 5 + 5
# Returns 10

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

Daha gelişmiş bir matematik yapmak istiyorsanız, aşağıdaki .bashrc modülünün işlevlerini içe aktaran aşağıdakileri kullanabilirsiniz. (Daha fazla bilgi için burayı ziyaret edin)

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

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

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

(Not: Python bir programlama dilidir, bazı şeyler garip görünebilir, ör. modüller için math ve modulo için ** )

Alternatif olarak, bir Python komut dosyası % ,

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

calc değişkeninde bulunan bir dizine yerleştirin ve yukarıdaki gibi aynı PATH komutunu almak için yürütülebilir bayrağını ayarlayın (bir Python betiğini çalıştırmak için Bash işlevi oluşturmaya gerek yoktur).

Saf Bash'te bir yöntem istiyorsanız, steeldriver'ın yanıtını kullanın. Eğer Python, Bash'e göre nispeten yavaş olduğundan, daha gelişmiş fonksiyonlara (yani calc ) ihtiyaç duyarsanız, bu cevap sadece gerçekten faydalıdır.

Bunun, "python'a geçiş yapabildiğinizi & amp; bunu böyle bir şekilde istemiyorum." Not, ama etkileşimli istemini girmeniz gerekmez ve sonuç Bash'te erişilebilir olur, bu nedenle bu yanıt geçerli görünüyor (benim için, en azından).

    
verilen cevap kiri 18.11.2013 09:45
21

gcalccmd 'yı gnome-calculator (& gt; = 13.04) veya gcalctool (<13.04) paketinden kullanın. Paketin varsayılan olarak yüklendiğini düşünüyorum

% gcalccmd
> 2+3
5
> 3/2
1.5
> 3*2
6
> 2-3
−1
> 
    
verilen cevap Flint 18.11.2013 04:12
10

İşte bunun için hızlı bir kabuk komut dosyası:

#!/bin/bash
echo "[email protected]" | bc

Bunu "c" olarak kaydedin, ardından yolunuzda bir yere koyun (örneğin / bin), sonra da yürütülebilir dosyayı işaretleyin.

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

Bundan sonra, terminaldeki hesaplamaları şu şekilde çalıştırabilirsiniz:

$ c 10000-9000
1000
    
verilen cevap user530873 18.11.2013 06:19
8

İşte, /etc/bash.bashrc işleyicisinin, bilinmeyen komutun ilk karakteri bir sayıysa veya command_not_found veya% ise, kabuğun ifade değerlendiricisini çalıştırmak için - işleyicisini değiştirecek olan uygun + 'sinin bir modifikasyonudur. co_de%.

Bu şekilde herhangi bir kabuk aritmetiği yapabileceksin; Aritmetik işleçlerin bir listesi için İşte konusuna bakın.

Değerlendirmek istediğiniz ifade, * içeriyorsa, * 'yi \ veya quotes ile alıntılamak zorunda kalacağınızdan, hangi komutun çalıştırılacağına karar vermeden önce kabuk dosya adı genişletme yapılacağını unutmayın. % Co_de% gibi diğer operatörler için de aynı şey.

Bunu >> dosyanıza koyun, sonra ~/.bashrc yazıp deneyin.

# 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 [[  == [0-9+-]* ]]; then
           echo $(( [email protected] ))
        elif [ -x /usr/lib/command-not-found ]; then
           /usr/bin/python /usr/lib/command-not-found -- 
           return $?
        elif [ -x /usr/share/command-not-found ]; then
           /usr/bin/python /usr/share/command-not-found -- 
           return $?
        else
           return 127
        fi
    }
fi

Örnek çıktı: (Yeni komut_not_found işleyicimizin hala bilinmeyen komutları aramaya çalışacağını test etmek için . ~/.bashrc , bir yazım hatası yazarım).

[email protected]:~$ cta
No command 'cta' found, did you mean:
 Command 'cda' from package 'xmcd' (universe)
 Command 'cat' from package 'coreutils' (main)
cta: command not found
[email protected]:~$ 9000-1000
8000
    
verilen cevap Mark Plotnick 18.11.2013 18:05
8

Burada görmediğim başka bir çözüm Qalclate (qalc) .

sudo apt-get install qalc
CLI sürümü için

,

sudo apt-get install qalculate-gtk
GUI için

.

gibi bir dizi özelliği vardır:

  • birimler için destek: ör. % Co_de%
  • 20 m / s * 12 h = 864 kilom , pi , e , c gibi yerleşik sabit
  • birçok yerleşik işlev : ör. avogadro , sin(pi) = 0 , gamma(4) = 6 , 5! = 120
  • birim dönüşümü, ör.
  

log(1024, 2) = 10
> 120 in
120 * inch = 120 in
> convert cm

  • sembolik hesaplama , ör. % Co_de%
  • entegrasyon, ör. 120 in = 304.8 centim , (x + y)^2 = x^2 + 2xy + y^2
  • yerleşik yardım, ör. integrate 3*x^2 = x^3 , diff sin(x), pi
  • komutların tamamlanması sekmesi
  • her şey tercüme edilir, ör. sistemim Hollandaca, bu yüzden hem help convert hem de help integrate yazabiliyorum.
  • ve daha fazlası ...

Önek olmadan kullanmak istediğinizi söylüyorsunuz, peki ... önekle kullanabilirsiniz:

factorial(5)

yanı sıra bir repl olarak çalıştırıyor.

    
verilen cevap JW. 26.11.2013 11:46
7

dc ! Bu coreutils bir parçası, bu yüzden OS X, Ubuntu ve hemen hemen her şey başka yüklü. Bu bir RPN hesap makinesi, eğer beğenmediyseniz, bu sizin için değil.

Çok basit komutları şöyledir (manpage, içermediğim tüm sözdizimine sahiptir. Exponentiation, kimse?)

Sadece sayılar arasındaki boşluklara ihtiyacınız var. Diğer tüm durumlarda göz ardı edilirler.

Bir sayının yazılması, onu yığının üstüne iter.

+ 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
    
verilen cevap Yet Another User 18.11.2013 21:07
5

Bu tür şeyler için Octave kullanıyorum: İşte

Oldukça fazla bir matlab klonu (eğer bu bir basitleştirme ise özür diler) ki bu oktav yazarak terminalde kullanılabilir. Sudo apt-get install octave uygulamasını yükle

İstediğin gibi değil ama python'a bir alternatif olarak ekleyeceğimi düşündüm.

Örnek kullanım:

~ $ octave
octave:1> 9000 - 8000
ans =  1000
octave:2> 
    
verilen cevap Andy T 18.11.2013 15:39
5

Wcalc'ı çok severim. Bu bir komut satırı bilimsel hesap makinesi. Ubuntu Yazılım Merkezi'nde kolayca bulunabilir veya apt-get'i kullanabilirsiniz.

sudo apt-get install wcalc

Komut satırı argümanlarını ve "kabuk" modunu kabul eder:

# 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

Ve eğer birisi mühendislikte ise, benim gibi, GNU Octave'den faydalanabilirsiniz. Her türlü şeyi yapabilir, grafik yapabilir, eşzamanlı denklemi çözebilir. Ayrıca, Matlab'a ücretsiz bir alternatiftir

    
verilen cevap Sergiy Kolodyazhnyy 22.09.2014 11:58
4

basit bir yol, python'u çağırmaktır.

Örnek:

>  python -c 'print 10000-9000'
    
verilen cevap user2327875 20.11.2013 14:35
3

Bulduğum şey, expr, bc veya yerleşik Shell seçeneklerine güvenemem. Bu yüzden, normalde * linux distro'lara yüklenecek olan Perl'i kullandım

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

Yukarıdaki hesap, VAL1 $ 'ı $ VAL2'den çıkaracak ve ondalık basamak içermeyen bir yazdıracaktır (0f)

Perl kullanımıyla ilgili avantaj ( Burada listelenen Artıları ve eksileri olan ayrıntılar )

  • Daha iyi hata yakalama (0'a bölün, hesaplamayı durdurmaz)
  • Bir yapılandırma dosyasında formüller sağlayabilir. Karmaşık normal ifadelerden kaçmaya gerek yok
verilen cevap diaryfolio 18.11.2013 11:14
3

Aşağıdaki işlevi .bashrc dosyanıza ekleyebilirsiniz:

function = {
  echo "[email protected]" | bc -l
}

-l bayrağının çok önemli olduğunu unutmayın. Bu olmadan, bc 'si 5 / 2 = 2 değerini verir.

Yukarıda değinildiği gibi, hesaplamalar formülün önünde = işareti kullanılarak yapılabilir.

    
verilen cevap vdm 19.11.2013 14:51
3

Ayrıca, terminalde bazı aritmetik hesaplamaları yapmak için awk 'yi de kullanabilirsiniz.

echo 10000 9000 | awk '{print -}'
1000
echo 10000 9000 | awk '{print +}'
19000
echo 10000 9000 | awk '{print /}'
1.11111
echo 10000 9000 | awk '{print *}'
90000000
    
verilen cevap Avinash Raj 05.01.2014 19:41
2

"bc" komutunu kullan ve sonra hesap yapabilirsin

örnek

[[email protected] ~]# 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

Garanti notu olmadan bc kullanmak için bc -q terminaline yazın

örneğin

[[email protected] ~]# bc -q
10+2
12
    
verilen cevap Vaibhav Jain 19.11.2013 08:18
2

Çıkışı kontrol etmek için bağlama ve bash C-a ve C-e kullanabilirsiniz. Örneğin, bunu kabuğunuzda çalıştırın:

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

Şimdi 10 + 15 gibi herhangi bir aritmetik işlemi yazın ve Ctrl + J 'e basın:

$ echo $(( 10 + 15 )) 
25

Bunu alacaksın. Şimdi, nasıl yapılır?

  • bind bu komut, kısayol tuşları gibi bashınızın bağlanmasını değiştirir.
  • \C-j bu, Ctrl + J'ye eşdeğerdir, bu bizim komuta eklemek istediğimiz anahtar kombinasyonudur.
  • \C-a bu bizi hattın başlangıcına götürüyor.
  • echo $(( bu, echo $(( değerini yazar.
  • \C-e bizi hattın sonuna götürüyor
  • )) önceki parantezimizi kapatır
  • \C-m bu, geri dönüş anahtarına eşdeğerdir.

Bunu ~/.inputrc dosyanıza yazabilirsiniz:

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

Tabii ki diğer cevaplar da geçerli! Sadece biraz tweaked:

  • 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"
  • diğerleri?

Ctrl + J'yi dilediğiniz gibi değiştirebilirsiniz, ancak unutmayın, zaten bir bağlayıcı olan bir şey için değiştirmemeye çalışın;).

Kaynak:

verilen cevap Braiam 20.11.2013 01:55
2

Geçmişte, wcalc ve e adlı küçük bir program kullanmıştım. için google. Şimdi bunu yapmak için bir python betiği kullanıyorum; bu, e 'in köşeli parantezler gibi bazı özelliklerini kullanmaktadır. wcalc hala hoştur, çünkü keyfi hassasiyet ve birim dönüşümü yapabilir, ancak bu özellikleri neredeyse hiç kullanmıyorum.

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

Nasıl kullanacağınız aşağıda açıklanmıştır (komut dosyasının e olarak kaydedildiğini ve $PATH 'da bir yere yerleştirildiğini varsayarak):

$ e e**[pi*1i]
-1.0
$ e hex[10**3]
0x3e8
$ e "[0o400+3]&0xff" # need quotes because of '&'
3
    
verilen cevap jpkotta 18.11.2013 17:20
0

Tam olarak ne istediğinizi gerçekleştirmek için tek adım var. Tek yapmanız gereken, hesabınız için shell değerini /bin/bc olarak ayarlıyor.

    
verilen cevap bizzyunderscore 21.11.2013 02:29
0

Ayrıca, terminalde aritmetik hesaplamaları yapmak için printf shell yerleşiğini de kullanabilirsiniz.

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

Örnek:

$ printf "$(expr 10000 + 9000)\n"
19000
$ printf "$(expr 10000 - 9000)\n"
1000
    
verilen cevap Avinash Raj 16.04.2014 15:26
0

Hesaplama için python yorumlayıcısını kullanabilirsiniz. İşte nasıl yapılacağı ile ilgili bir öğretici .

Python 2 ve python 3, varsayılan olarak Ubuntu'ya yüklenir.

$ 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
    
verilen cevap noone 27.08.2017 12:08
0

Bir Terminal Hesaplayıcısı Oluşturun

Aşağıdakileri .bashrc dosyanıza koyun

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

Veya, kabuk isteminde çalıştırın. şimdi   kabuktan "calc" aşağıdaki gibi çalışacaktır:

$ calc 3+45
   48

"(" veya ")" ile tüm işlevler kapalı olmalıdır   tırnak içinde.

    
verilen cevap Vishnu N K 31.01.2014 18:17

Etiketlerdeki diğer soruları oku