Adakah baris perintah kalkulator untuk Ubuntu?

119

Saya mencari Kalkulator yang dapat melakukan perhitungan di terminal itu sendiri tanpa awalan dan sufiks tambahan.

Sebagai contoh: Jika saya mengetikkan sesuatu seperti 10000-9000 di terminal, jawabannya harus keluar sebagai 1000.

Sekali lagi saya katakan, saya hanya perlu kalkulator cepat di terminal, tanpa ada karakter yang ditambahkan. Saya tahu jika saya beralih ke Python, itu bisa melakukan itu, tetapi saya tidak menginginkannya.

rɑːdʒɑ
sumber
1
Mungkin package.ubuntu.com/saucy/apcalc ?
wakeup
2
Ini mungkin menjadi mungkin untuk hack sesuatu seperti itu dengan semacam pra-hook; tetapi itu sendiri hanya bisa dilakukan dengan cara yang benar-benar jelek dan licik . Tidak, saya pikir itu bukan ide yang bagus. Bash secara keseluruhan dimaksudkan sebagai bahasa scripting IO biasa, apa pun yang dilakukannya selain itu kurang lebih ad-hoc dan tidak berfungsi dengan baik. Python di sisi lain (atau bahkan misalnya Haskell) adalah bahasa pemrograman modern yang serba guna dengan sintaks yang bagus. Jadi bodoh jika tidak menggunakannya.
leftaroundabout
3
Dengan nada yang sama, Anda juga bisa melakukan sesuatu dengan command_not_foundhook, dan mencoba memberi makan perintah ke bc/ calc/ apa pun jika terlihat samar-samar seperti matematika. Meski begitu, masih terasa agak kotor.
chronitis
1
Tunggu, apa sebenarnya maksud Anda "beralih ke" python? dan "tanpa awalan ekstra"? Apakah Anda mengatakan Anda ingin dapat menghitung hal-hal di prompt tanpa menjalankan perintah ?
Random832

Jawaban:

78

Bash Aritmatika

Solusi lain yang mungkin adalah menambahkan fungsi sederhana untuk aritmatika bawaan Bash. Masukkan ini .bashrcke file Anda untuk mencoba:

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

Jadi sekarang, Anda bahkan tidak perlu $((...))lagi, hanya =yang tampaknya cukup alami.

Penggantian

Hal lain jika Anda ingin menjadi lebih cepat: Anda dapat membuatnya ganti pdengan +dan xdengan *. Ini akan bekerja untuk itu:

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

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

Sekarang Anda bahkan tidak perlu Shiftlagi, satu-satunya hal di depan aritmatika.

Output heksadesimal

Output dapat ditampilkan dalam desimal dan heksadesimal, jika diinginkan. ( Catatan : menggunakan xsubtitusi akan bertentangan dengan 0x...sintaks hex)

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

Contoh:

$ = 16 + 0x10
272 (0x110)

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

Menggunakan bc

Jika Anda ingin perhitungan yang sedikit lebih maju, Anda bisa membuatnya bcseperti:

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

Fungsi-fungsi yang disediakan oleh bcadalah sebagai berikut (dan dapat ditemukan dari 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.

Ini juga mendukung if, for, whiledan variabel seperti bahasa pemrograman meskipun jika mungkin lebih baik untuk menulis ke file jika Anda ingin itu.

Ingatlah bahwa itu akan menggantikan pdan xdalam fungsi / nama variabel. Mungkin lebih baik menghapus saja penggantian.

Menggunakan gcalccmd

Anda juga dapat membuat panggilan fungsi gcalccmd(dari gnome-calculator) seperti:

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

Fungsi yang tersedia tampaknya (diambil langsung dari kode sumber ), ==menunjukkan fungsi yang setara:

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
sumber
1
Terima kasih, dapatkah Anda menambahkan lebih banyak dukungan dengan perhitungan ilmiah?
rɑːdʒɑ
2
@rajagenupula Lihat hasil edit saya di atas
kiri
Maaf atas keterlambatan balasan ini tetapi perintah yang Anda berikan gcalccmdtidak berfungsi dengan baik. Ini menunjukkan Error 3mungkin karena ruang putih yang tersesat itu. Namun yang sedikit dimodifikasi ini bekerja dengan baik untuk saya:echo -e "$calc\nquit"| gcalccmd | sed "s:^> ::g"
udiboy1209
Saya membuat perhitungan ilmiah menggunakan R! function = { R -q --vanilla -e "$@" | grep -E '[^>](.*)' -o -x --color=never }
Morteza Milani
Hai, terima kasih. Itu keren sekali. BTW subtitusi Anda untuk 'x' membuatnya gagal untuk input hex, yang jika tidak berfungsi dengan baik. Omong-omong, bisakah saya mendapatkan jawaban dalam 'hex' juga? misalnya. = 2 + 0x20 34 (0x22)
FractalSpace
93

Anda dapat melakukan aritmatika integer sederhana secara native di bash menggunakan ((...))sintaks, mis

$ echo $((10000-9000))
1000

Ada juga bckalkulator, yang dapat menerima ekspresi aritmatika pada input standar

$ echo "10000-9000" | bc
1000

The bcProgram dapat melakukan aritmatika floating point serta

$ echo "scale = 3; 0.1-0.09" | bc
.01
Steeldriver
sumber
11
Ini mungkin yang terdekat yang bisa Anda dapatkan. Untuk mengurangi pengetikan ekstra (meskipun tidak menghilangkan sama sekali), Anda dapat menempatkan fungsi di ~ / .bashrc: calc()NL {NL echo "$@" | bcNL di }mana NL adalah baris baru. Kemudian Anda dapat mengetik calc 1234 + 768(mencetak 2002), atau rumus lain apa pun yang bcdapat menafsirkan. Anda tentu saja dapat menggunakan nama fungsi apa pun, saya hanya berpikir itu calccocok dengan apa yang dilakukannya.
CVn
4
sekali python lebih baik daripada gema sepanjang waktu. pendapat saya.
rɑːd13
6
Anda dapat menggunakan bc secara interaktif juga, kecuali jika Anda memerlukan gema untuk beberapa alasan lain: jalankan bc dan ketik ekspresi Anda. Ketik Ctrl-D pada barisnya sendiri untuk keluar.
berguna
jika Anda membuat ekspresi otomatis dengan bantuan alias atau sesuatu yang lain maka itu akan menjadi hebat.
rɑːdʒɑ
3
Tidak perlu echo:bc <<< "2*2"
Bernhard
90

Anda bisa menggunakannya calc. Tidak diinstal secara default, tetapi Anda dapat menginstalnya dengan cepat menggunakan perintah berikut:

sudo apt-get install apcalc

Setelah Anda menginstal, Anda dapat melakukan perhitungan apa pun yang Anda inginkan:

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

Untuk informasi lebih lanjut, lihat halaman manualnya

Radu Rădeanu
sumber
2
Terima kasih telah menjawab, saya melihat jawabannya memiliki arti sendiri. Saya lebih suka sedikit tentang semua perhitungan fungsi trigonometri itu. manual atau somepage tentang apa yang bisa dilakukan dapat meningkatkan jawaban Anda. :)
rɑːdʒɑ
@rajagenupula man calcdan calc helpmengatakan segalanya.
Radu Rădeanu
2
Ketertarikan saya adalah, jika seseorang melihatnya harus jelas & cepat. Terima kasih.
rɑːdʒɑ
1
Sebenarnya Anda gunakan calc help builtinuntuk melihat daftar fungsi yang didukung sepertisin()
Penghe Geng
Memberikan lebih banyak desimal, sehingga lebih cocok untuk tujuan saya daripada aritmatika bash bawaan. Terima kasih.
Mrmfldmn
30

Sayangnya, tidak ada cara "lebih mudah" untuk melakukan ini. Antarmuka python interaktif pada baris perintah adalah yang terbaik cocok untuk apa yang Anda butuhkan, karena tidak seperti apcalc\, pythonyang termasuk dalam Ubuntu. Saya tidak yakin apakah bcmasih termasuk, namun, python adalah favorit untuk hal ini.

Anda bisa menjalankan pythonantarmuka interaktif di baris perintah, dan kemudian berhitung seperti itu. Anda dapat menggunakannya sebagai kalkulator.

Untuk melakukan itu, Anda membuka terminal, ketik python, lalu tekan Entertombol.

Kemudian, pada prompt python yang muncul, Anda dapat mengetikkan matematika Anda. Misalnya 10000 - 9000,. Output baris berikutnya adalah hasilnya.


Jika Anda maksudkan, sesuatu di mana Anda hanya memuat terminal dan dapat melakukan ini ...

$ 10.000 - 9000
1000
$

... maka tidak ada tidak ada cara untuk melakukan ini hanya di terminal tanpa hal lain, karena Bash tidak menangani argumen numerik seperti itu.

Thomas Ward
sumber
1
Saya memang menyebutkan bahwa saya tidak ingin beralih ke python
rɑːdʒɑ
1
@rajagenupula diperbarui, juga termasuk hal-hal yang saya sebutkan dalam obrolan.
Thomas Ward
bc tidak termasuk lagi?
Random832
1
Sebagai tambahan, ipythonini sedikit lebih berguna daripada shell Python standar ketika datang untuk melakukan perhitungan dan sejenisnya.
Naftuli Kay
bc disertakan secara default (setidaknya dalam 16,04)
TJ Ellis
23

Saya menyarankan Anda untuk membuat fungsi sederhana untuk perhitungan Python dasar. Sesuatu seperti ini di Anda .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

Jika Anda ingin melakukan matematika lebih lanjut, Anda dapat menggunakan yang berikut yang mengimpor semua mathfungsi modul. (lihat di sini untuk info lebih lanjut)

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

(Catatan: Karena Python adalah bahasa pemrograman, beberapa hal mungkin tampak aneh, misalnya **untuk kekuatan dan %untuk modulo)

Atau Anda dapat membuat skrip Python calc,

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

letakkan di direktori yang termasuk dalam PATHvariabel dan atur flag yang dapat dieksekusi untuk mendapatkan calcperintah yang sama seperti di atas (tidak perlu membuat fungsi Bash untuk menjalankan skrip Python).

Jika Anda menginginkan metode dalam Bash murni, gunakan jawaban steeldriver. Jawaban ini hanya benar-benar bermanfaat jika Anda memerlukan fungsi yang lebih maju (yaitu dari math), karena Python relatif lambat dibandingkan dengan Bash.


Saya tidak yakin apakah ini memecah Anda "beralih ke python itu bisa melakukan itu & saya tidak menginginkannya sedemikian rupa." perhatikan, tetapi Anda tidak perlu memasukkan prompt interaktif dan hasilnya dapat diakses di Bash sehingga jawaban ini tampaknya valid (bagi saya, setidaknya).

kiri
sumber
setiap kali semua itu harus berarti tidak mudah dan fleksibel. Terima kasih. ada perbaikan yang dapat Anda buat agar terlihat lebih sederhana & jelas? Aku suka itu.
rɑːd13
1
@rajagenupula Anda dapat menempatkan bahwa dalam fungsi dalam .bashrc Anda (mungkin dengan nama pendek: c, ?atau +?) sehingga Anda akan memilikinya setiap terminal Anda membuka.
kiri
1
Hati-hati: Dengan Python 3 ini berfungsi dengan baik, tetapi jika Anda ingin menggunakan Python 2 Anda harus mengedit snippet ke: python2 -c "from __future__ import division; from math import *; print($*)"jika tidak, ia akan selalu melakukan pembagian integer, misalnya untuk calc 5/2Anda dapatkan 2alih-alih 2.5. Lihat di sini untuk referensi: stackoverflow.com/a/183870/202504
jmiserez
Solusi Python sebenarnya mungkin lebih baik daripada apcalc karena Anda dapat mengimpor perpustakaan tambahan, dan mendukung literal pidan e. Saya merasa menempatkan ini sebagai skrip terpisah lebih fleksibel dan portabel. Berikut adalah intisari sederhana untuk itu: gist.github.com/jasongeng/279eb396c01e74beb9ef
Penghe Geng
21

Gunakan paket gcalccmdfrom gnome-calculator(> = 13.04) atau gcalctool(<13.04). Saya pikir paket diinstal secara default

% gcalccmd
> 2+3
5
> 3/2
1.5
> 3*2
6
> 2-3
−1
> 
Batu api
sumber
Yang terbaik sampai sekarang .. Tidak perlu melakukan hal tambahan dan juga diinstal secara default .. man gcalccmdmengatakan: kalkulator konsol . Sederhananya, itu persis seperti yang diinginkan OP .. :)
Saurav Kumar
Itu keren, mirip dengan bc, python, kalkulator ocatve. Terima kasih.
rɑːdʒɑ
Karena gcalccmd cukup sulit untuk diketik, ada baiknya menambahkan alias ke dalam ./bash_aliasessuka alias calc='gcalccmd'atau jika Anda ingin membuat perhitungan satu kali (dengan jawaban instan), Anda dapat menambahkan alias calc='gnome-calculator -s'- penggunaan yang terakhir: calc 2000/1300atau calc 2+3. Dalam hal ini, tidak perlu keluar dari kalkulator - itu hanya memberi Anda jawaban dan Anda tidak perlu mengetik quit.
Rafal
10

Berikut ini skrip shell cepat untuk ini:

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

Simpan ini sebagai "c", lalu letakkan di suatu tempat di jalur Anda (seperti / bin), lalu tandai itu dapat dieksekusi.

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

Mulai sekarang, Anda dapat menjalankan perhitungan di terminal seperti ini:

$ c 10000-9000
1000
pengguna530873
sumber
Anda hebat, hanya menambahkan satu huruf sebelum perhitungan berarti itu ide yang sangat keren. ini super untuk jika saya perlu 2 hingga 3 perhitungan. Saya bisa menggunakan python atau yang lain lebih lama tetapi lebih pendek saya memilih ini. Terima kasih telah mampir.
rɑːdʒɑ
2
Saya menyarankan Anda untuk menggunakan echo "$@" | bcsebagai gantinya sehingga Anda dapat menempatkan spasi dalam perhitungan lebih alami
kiri
Bagaimana kalau menggunakan =bukan cuntuk nama perintah ini? Bash sebenarnya memungkinkan Anda menggunakan ini sebagai nama fungsi.
Kaz
1
Anda dapat memasukkan program ke ~/bin(direktori home Anda bin) dan memastikannya /home/yourname/binada di PATH.
Kaz
@ minerz029 Pemikiran yang bagus. Saya telah mengedit jawaban saya sesuai dengan itu.
user530873
8

Berikut adalah modifikasi dari bagian yang sesuai dari /etc/bash.bashrc(pada Ubuntu 10.04) yang akan memodifikasi command_not_foundpenangan untuk menjalankan evaluator ekspresi shell jika karakter pertama dari perintah yang tidak diketahui adalah angka atau -atau +.

Anda akan dapat melakukan aritmatika shell dengan cara ini; lihat http://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic untuk daftar operator aritmatika.

Perhatikan bahwa jika ekspresi yang ingin Anda evaluasi mengandung *, Anda harus mengutip *dengan \atau kutipan karena shell akan melakukan ekspansi nama file sebelum memutuskan perintah mana yang akan dijalankan. Hal yang sama untuk operator lain suka >>.

Masukkan ini ke dalam ~/.bashrc, lalu ketikkan . ~/.bashrcdan coba.

# 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

Output sampel: (Saya mengetik cta, kesalahan ketik, hanya untuk menguji bahwa command_not_found handler baru kami masih akan mencoba mencari perintah yang tidak dikenal).

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
Tandai Plotnick
sumber
adakah cara kita dapat menambahkan lebih banyak dukungan untuk perhitungan?
rɑːdʒɑ
1
Anda dapat menggunakan baris yang mengatakan echo $(( $@ ))dan mengubahnya, sebagai gantinya, menjalankan salah satu program kalkulator yang lebih maju yang disebutkan oleh penjawab lain yang menggunakan argumen mereka pada baris perintah.
Mark Plotnick
8

Solusi lain yang belum saya lihat disebutkan di sini adalah Qalculate (qalc) .

sudo apt-get install qalc

untuk versi CLI,

sudo apt-get install qalculate-gtk

untuk GUI.

Ini memiliki banyak fitur seperti:

  • dukungan untuk unit : mis20 m / s * 12 h = 864 kilom
  • built-in konstanta seperti pi, e, c,avogadro
  • banyak built-in fungsi : misalnya sin(pi) = 0, gamma(4) = 6, 5! = 120,log(1024, 2) = 10
  • konversi unit, misalnya:

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

  • perhitungan simbolik , mis(x + y)^2 = x^2 + 2xy + y^2
  • integrasi, misalnya integrate 3*x^2 = x^3,diff sin(x), pi
  • bantuan bawaan help convert, misalnya ,help integrate
  • tab penyelesaian perintah
  • semuanya diterjemahkan, misalnya sistem saya dalam bahasa Belanda, jadi saya bisa menulis keduanya factorial(5)dan faculteit(5).
  • dan banyak lagi ...

Anda bilang ingin menggunakannya tanpa awalan, yah ... Anda bisa menggunakannya dengan awalan:

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

serta menjalankannya sebagai pengganti.

JW.
sumber
7

dc! Itu adalah bagian dari coreutils, jadi itu diinstal pada OS X, Ubuntu, dan hampir semuanya. Ini adalah kalkulator RPN, jadi jika Anda tidak suka itu, itu bukan untuk Anda.

Perintah yang sangat mendasar adalah sebagai berikut (manpage memiliki semua sintaksis yang tidak saya sertakan. Eksponen, siapa pun?)

Anda hanya perlu spasi antar angka. Mereka diabaikan dalam semua kasus lainnya.

Mengetik nomor mendorongnya ke atas tumpukan.

+ 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
Pengguna Lain
sumber
Hanya perhatikan, ini tidak menjawab pertanyaan (juga tidak ada jawaban lain). Pertanyaannya adalah bagaimana TIDAK untuk memiliki hal-hal di depan persamaan (atau di belakang), dan cukup ketik katakan, 42 * 5ke terminal, dan mintalah hasilnya jawaban
Namun Pengguna Lain
2
Sebagian besar jawaban tidak berlaku. Mengetik 1+1di terminal hampir tidak akan pernah berhasil. Jadi jawaban Anda baik-baik saja
kiri
@YetAnotherUser Saya pikir satu-satunya cara adalah meretas ke dalam command-not-found (jika sudah diinstal) atau melakukan sesuatu yang kotor di bashrc ...
Braiam
5

Saya menggunakan Oktaf untuk hal semacam ini: http://www.gnu.org/software/octave/

Ini cukup banyak klon matlab (permintaan maaf jika ini adalah penyederhanaan berlebihan) yang dapat digunakan di terminal dengan mengetikkan oktaf. Instal sudo apt-get install oktaf

Ini tidak seperti yang Anda inginkan, tetapi saya pikir saya akan menambahkannya sebagai alternatif untuk python.

Contoh penggunaan:

~ $ octave
octave:1> 9000 - 8000
ans =  1000
octave:2> 
Andy T
sumber
Menyarankan cara lain untuk mencapai tujuan itu baik dalam jawaban, tetapi Anda harus memberikan informasi lebih lanjut tentang bagaimana OP akan menggunakan Oktaf untuk memenuhi kebutuhan yang disebutkan dan mengapa itu merupakan alternatif yang baik.
chaskes
2
+1, Oktaf, matlab, scilab, python semuanya mirip tetapi oktaf yang harus saya instal tetapi python sudah diinstal. jadi saya menuju ke python secara default. Terima kasih.
rɑːdʒɑ
dari semua yang saya coba (dan saya coba banyak!) oktaf adalah satu-satunya untuk mengembalikan non 0 pada kesalahan sintaks! Terima kasih!
Aquarius Power
5

Saya suka wcalc. Ini adalah kalkulator ilmiah baris perintah. Mudah ditemukan di Ubuntu Software Center, atau cukup gunakan apt-get.

sudo apt-get install wcalc

Ia menerima argumen baris perintah dan juga memiliki 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

Dan jika seseorang dalam bidang teknik, seperti saya, Anda dapat menggunakan GNU Octave. Ia dapat melakukan segala macam hal, menggambar, memecahkan persamaan simultan. Plus itu adalah alternatif gratis untuk Matlab

Sergiy Kolodyazhnyy
sumber
... menggabungkannya dengan @ minerz029 cukup rapi: Tempatkan ini di ~ / .bash_aliases Anda:=() { wcalc "$@" }
Frank Nocke
4

cara sederhana adalah memanggil python.

Contoh:

>  python -c 'print 10000-9000'
pengguna2327875
sumber
dapatkah Anda menyebutkan sesuatu dengan perhitungan ilmiah?
rɑːdʒɑ
1
Apakah Anda menginginkan sesuatu seperti ini? python -c 'import math;print math.log(2)'
user1251007
3

Apa yang saya temukan adalah, saya tidak bisa mempercayai opsi Shell expr, bc atau built-in. Oleh karena itu saya menggunakan Perl yang biasanya diinstal di distro * linux

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

Perhitungan di atas akan mengurangi $ VAL1 dari $ VAL2 dan mencetak tanpa tempat desimal (0f)

Manfaat menggunakan Perl adalah (rincian Pro & Kontra tercantum di sini )

  • Pengambilan kesalahan yang lebih baik (bagi dengan 0 tidak akan menghentikan perhitungan)
  • Dapat memberikan rumus dalam file konfigurasi. Tidak perlu melarikan diri menggunakan regex kompleks
diaryfolio
sumber
tetapi setiap kali perintah itu berarti sedikit masalah dengan cara apa pun. apakah ada kalkulator berbasis perl untuk digunakan di terminal?
rɑːdʒɑ
3

Anda dapat menambahkan fungsi berikut ke file .bashrc Anda:

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

Perhatikan bahwa -lbendera sangat penting. Tanpanya, gunakan bcmemberi 5 / 2 = 2.

Seperti yang disebutkan di atas, perhitungan dapat dilakukan dengan menggunakan =tanda di depan formula.

vdm
sumber
3

Anda dapat menggunakan awk untuk melakukan perhitungan aritmatika pada 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
sumber
cool, awk (as octave) juga mengembalikan non 0 pada kesalahan sintaks thx!
Aquarius Power
2

gunakan perintah "bc" dan kemudian kamu bisa melakukan perhitungan

contoh

[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

Untuk menggunakan bctanpa catatan garansi, tulis di terminalbc -q

contoh

[root@vaibhav ~]# bc -q
10+2
12
Vaibhav Jain
sumber
bc sudah dijelaskan dan dimasukkan.
Braiam
2

Anda dapat menggunakan bind dan bash C-adan C-euntuk mengontrol output. Misalnya, jalankan ini di shell Anda:

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

Sekarang ketik operasi aritmatika seperti 10 + 15 dan tekan Ctrl+ J:

$ echo $(( 10 + 15 )) 
25

Anda akan mendapatkan ini. Sekarang, bagaimana caranya?

  • bind perintah ini mengubah pengikatan bash Anda, seperti tombol pintas.
  • \C-j ini setara dengan bash untuk Ctrl + J, ini adalah kombinasi tombol apa yang ingin kita tambahkan ke perintah kita.
  • \C-a ini membawa kita ke awal baris.
  • echo $((ini menulis echo $((di awal.
  • \C-e membawa kita ke akhir baris
  • )) menutup tanda kurung kami sebelumnya
  • \C-m ini setara dengan untuk mengembalikan kunci.

Anda dapat menulis ini di ~/.inputrcfile Anda :

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

Tentu saja, jawaban lain juga valid! Hanya sedikit men-tweak:

  • 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"
  • ada yang lain?

Anda dapat mengubah Ctrl + J menjadi apa pun yang Anda suka, tetapi ingat, cobalah untuk tidak mengubahnya untuk sesuatu yang sudah memiliki ikatan;).

Sumber:

Braiam
sumber
Ctrl + J memang sudah memiliki ikatan, ia mengirimkan baris (seperti Enter) Ini sebenarnya jawaban yang cukup cerdas;)
kiri
2

Di masa lalu, saya telah menggunakan wcalcdan sebuah program kecil yang disebut eitu tidak mungkin untuk google. Sekarang saya menggunakan skrip python untuk melakukan ini, yang menggunakan beberapa fitur eseperti tanda kurung. wcalcmasih bagus karena bisa melakukan presisi dan konversi unit sewenang-wenang, tapi saya hampir tidak pernah menggunakan fitur-fitur itu.

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

Berikut cara menggunakannya (dengan asumsi bahwa skrip telah disimpan sebagai edan diletakkan di suatu tempat di $PATH):

$ e e**[pi*1i]
-1.0
$ e hex[10**3]
0x3e8
$ e "[0o400+3]&0xff" # need quotes because of '&'
3
jpkotta
sumber
sebuah contoh akan membuat ini terlihat lebih jelas. Terima kasih.
rɑːdʒɑ
0

Ada satu langkah cara untuk mencapai apa yang Anda inginkan. Yang perlu Anda lakukan adalah mengatur shellakun Anda /bin/bc.

bizzyunderscore
sumber
3
Bisakah Anda jelaskan? Pressume OP tidak tahu cara mengganti shell.
Braiam
0

Anda juga dapat menggunakan printf shell builtin untuk melakukan perhitungan aritmatika pada terminal.

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

Contoh:

$ printf "$(expr 10000 + 9000)\n"
19000
$ printf "$(expr 10000 - 9000)\n"
1000
Avinash Raj
sumber
3
Dengan cara ini Anda menggunakan expr (yang bukan bawaan) untuk menghitung hasilnya, printf berlebihan di sini
Javier López
0

Anda dapat menggunakan juru bahasa python untuk perhitungan. Berikut tutorial tentang cara melakukannya .

Python 2 dan python 3 dipasang di Ubuntu secara default.

$ 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
tidak ada
sumber
0

Buat Kalkulator Terminal

Masukkan yang berikut ini di file .bashrc Anda

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

Atau, jalankan di prompt shell. Sekarang "calc" dari shell akan berfungsi sebagai berikut:

$ calc 3+45
   48

Semua fungsi dengan "(" atau ")" harus dilampirkan dalam tanda kutip.

Wisnu NK
sumber