Bất kỳ máy tính dòng lệnh cho Ubuntu?


119

Tôi đang tìm kiếm một Máy tính có thể tự tính toán trong thiết bị đầu cuối mà không có bất kỳ tiền tố và hậu tố bổ sung nào khác.

Ví dụ: Nếu tôi gõ một cái gì đó như 10000-9000 trong thiết bị đầu cuối, câu trả lời sẽ là 1000.

Một lần nữa tôi đang nói, tôi chỉ cần một máy tính nhanh trong thiết bị đầu cuối, không có bất kỳ ký tự nào được thêm vào. Tôi biết nếu tôi chuyển sang Python, nó có thể làm điều đó nhưng tôi không muốn nó theo cách như vậy.



2
thể hack thứ gì đó tương tự bằng một loại hook trước; nhưng điều đó tự nó chỉ có thể được thực hiện theo một cách thực sự xấu xí và hackish . Không, tôi rất nghĩ đó không phải là một ý tưởng tốt. Nói chung, Bash có nghĩa là một ngôn ngữ kịch bản IO đơn giản, bất cứ thứ gì nó làm ngoài đó là ít nhiều quảng cáo và không hoạt động thực sự tốt. Mặt khác, Python (hoặc thậm chí là Haskell) là một ngôn ngữ lập trình đa năng, hiện đại với cú pháp tuyệt vời. Vì vậy, nó sẽ chỉ là ngu ngốc khi không sử dụng nó.
leftaroundabout

3
Trong cùng một hướng, bạn cũng có thể làm một cái gì đó với command_not_foundcái móc, và thử đưa lệnh đến bc/ calc/ bất cứ thứ gì nếu nó trông mơ hồ như toán học. Nó vẫn cảm thấy một chút bẩn, mặc dù.
viêm chron

1
Đợi đã, chính xác ý bạn là gì "chuyển sang" trăn? và "không có bất kỳ tiền tố thêm"? Bạn đang nói rằng bạn muốn có thể tính toán mọi thứ tại dấu nhắc mà không cần chạy lệnh ?
Random832

Câu trả lời:


78

Số học Bash

Một giải pháp khả thi khác là thêm một hàm đơn giản cho số học dựng sẵn của Bash. Đặt cái này trong .bashrctập tin của bạn để thử:

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

Vì vậy, bây giờ, bạn thậm chí không cần $((...))nữa, =điều đó dường như đủ tự nhiên.

Thay thế

Một điều nữa nếu bạn muốn nhanh hơn nữa: bạn có thể làm cho nó thay thế pbằng +xbằng *. Điều này sẽ làm việc cho điều đó:

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

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

Bây giờ bạn thậm chí không cần Shiftnữa, điều duy nhất là ở phía trước của số học.

Đầu ra thập lục phân

Đầu ra có thể được hiển thị ở cả thập phân và thập lục phân, nếu muốn. ( Lưu ý : sử dụng xthay thế sẽ xung đột với 0x...cú pháp hex)

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

Thí dụ:

$ = 16 + 0x10
272 (0x110)

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

Sử dụng bc

Nếu bạn muốn tính toán nâng cao hơn một chút, bạn có thể chuyển nó thành bcnhư sau:

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

Các chức năng được cung cấp bởi bcnhư sau (và có thể được tìm thấy từ 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.

Nó cũng hỗ trợ if, for, whilevà các biến giống như một ngôn ngữ lập trình tuy nhiên nếu nó có thể tốt hơn để viết vào một tập tin nếu bạn muốn đó.

Hãy nhớ rằng nó sẽ thay thế pxtrong tên hàm / biến. Nó có thể tốt hơn để chỉ cần loại bỏ thay thế.

Sử dụng gcalccmd

Bạn cũng có thể thực hiện chức năng gọi gcalccmd(từ gnome-calculator) như vậy:

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

Các chức năng có sẵn dường như (được lấy thẳng từ mã nguồn ), ==biểu thị các chức năng tương đương:

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

1
Cảm ơn bạn, bạn có thể thêm hỗ trợ với các tính toán khoa học?
rɑːdʒɑ

2
@rajagenupula Xem các chỉnh sửa của tôi ở trên
kiri

Xin lỗi vì trả lời trễ này nhưng lệnh bạn đã đưa ra gcalccmdkhông hoạt động khá tốt. Nó cho thấy Error 3có lẽ vì khoảng trắng đi lạc đó. Tuy nhiên, bản sửa đổi nhỏ này hoạt động hoàn hảo với tôi:echo -e "$calc\nquit"| gcalccmd | sed "s:^> ::g"
udiboy1209

Tôi đã xây dựng một calc khoa học bằng R! function = { R -q --vanilla -e "$@" | grep -E '[^>](.*)' -o -x --color=never }
Morteza Milani

Xin chào, và cảm ơn. Điều đó thật tuyệt. BTW thay thế của bạn cho 'x' làm cho nó không thành công cho đầu vào hex, nếu không thì hoạt động tốt. Nói về điều đó, tôi có thể có câu trả lời trong 'hex' không? ví dụ. = 2 + 0x20 34 (0x22)
FractalSpace

93

Bạn có thể thực hiện số nguyên đơn giản số nguyên trong bash bằng ((...))cú pháp, vd

$ echo $((10000-9000))
1000

Ngoài ra còn có bcmáy tính, có thể chấp nhận các biểu thức số học trên đầu vào tiêu chuẩn

$ echo "10000-9000" | bc
1000

Các bcchương trình có thể làm điểm số học nổi cũng

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

11
Đây có lẽ là gần nhất bạn có thể nhận được. Để cắt giảm việc gõ thêm (mặc dù không loại bỏ hoàn toàn), bạn có thể đặt một hàm trong ~ / .bashrc: calc()NL {NL echo "$@" | bcNL }trong đó NL là một dòng mới. Sau đó, bạn có thể nhập calc 1234 + 768(in 2002) hoặc bất kỳ công thức nào khác bccó thể diễn giải. Tất nhiên bạn có thể sử dụng bất kỳ tên hàm nào, tôi chỉ nghĩ rằng nó calcphù hợp với những gì nó làm.
một CVn

4
một lần trăn tốt hơn tiếng vang mọi lúc. quan điểm của tôi.
rdʒɑ

6
Bạn cũng có thể sử dụng bc tương tác, trừ khi bạn cần tiếng vang vì một số lý do khác: chỉ cần chạy bc và nhập biểu thức của bạn. Nhập Ctrl-D trên dòng riêng để thoát.
Vô dụng

nếu bạn thực hiện bất kỳ biểu thức tự động nào với sự trợ giúp của bí danh hoặc một cái gì đó khác thì điều đó sẽ rất tuyệt.
rɑːdʒɑ 18/11/13

3
Không cần phải echo:bc <<< "2*2"
Bernhard

90

Bạn có thể sử dụng calc. Không được cài đặt theo mặc định, nhưng bạn có thể cài đặt nó nhanh chóng bằng lệnh sau:

sudo apt-get install apcalc

Sau khi bạn đã cài đặt, bạn có thể thực hiện bất kỳ tính toán nào bạn muốn:

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

Để biết thêm thông tin, xem trang man của nó


2
Cảm ơn bạn đã trả lời, tôi thấy câu trả lời có ý nghĩa riêng của nó. Tôi thích nhiều hơn một chút về tất cả các tính toán hàm lượng giác. bất kỳ hướng dẫn hoặc somepage nào về những gì nó có thể làm có thể cải thiện bạn trả lời rất nhiều. :)
rɑːdʒɑ

@rajagenupula man calccalc helpnói tất cả mọi thứ.
Radu Rădeanu

2
Ý định của tôi là, nếu ai đó nhìn vào nó thì rõ ràng & nhanh chóng. cảm ơn bạn.
rɑːdʒɑ 18/11/13

1
Trên thực tế, bạn sử dụng calc help builtinđể xem danh sách các chức năng được hỗ trợ nhưsin()
Penghe Geng

Cung cấp nhiều số thập phân hơn, vì vậy nó phù hợp hơn cho mục đích của tôi so với số học bash tích hợp. Cảm ơn.
Mrmfldmn

30

Thật không may, không có cách "dễ dàng hơn" để làm điều này. Giao diện python tương tác trên dòng lệnh là phù hợp nhất cho những gì bạn cần, vì không giống như apcalc\, pythonđược bao gồm trong Ubuntu. Tôi không chắc chắn nếu bcđược bao gồm vẫn còn, tuy nhiên, python là yêu thích xuống tay cho công cụ này.

Bạn chỉ có thể chạy pythongiao diện tương tác trên dòng lệnh, và sau đó làm toán theo cách đó. Bạn có thể sử dụng nó như là máy tính của bạn.

Để làm điều đó, bạn mở terminal, gõ python, sau đó nhấn Enternút.

Sau đó, trong dấu nhắc python xuất hiện, bạn có thể nhập toán học của mình vào. Ví dụ : 10000 - 9000. Đầu ra dòng tiếp theo là kết quả.


Tuy nhiên, nếu bạn muốn nói, một cái gì đó mà bạn chỉ cần tải thiết bị đầu cuối và có thể làm điều này ...

$ 10000 - 9000
1000
$

... Vậy thì không có cách nào để làm điều này chỉ trong thiết bị đầu cuối mà không có gì khác, bởi vì Bash không xử lý các đối số bằng số như thế.


1
Tôi đã đề cập rằng tôi không muốn chuyển sang python
rɑːdʒɑ 18/11/13

1
@rajagenupula cập nhật, cũng bao gồm những thứ tôi đã đề cập trong trò chuyện.
Thomas Ward

bc không bao gồm nữa?
Random832

1
Bên cạnh đó, ipythonkhá hữu ích hơn một chút so với trình bao Python tiêu chuẩn khi thực hiện các phép tính và tương tự.
Naftuli Kay

bc được bao gồm theo mặc định (ít nhất là trong 16.04)
TJ Ellis

23

Tôi khuyên bạn nên tạo một hàm đơn giản cho các tính toán Python cơ bản. Một cái gì đó như thế này trong của bạn .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

Nếu bạn muốn làm toán nâng cao hơn, bạn có thể sử dụng cái sau để nhập tất cả các mathhàm của mô-đun. (xem tại đây để biết thêm)

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

(Lưu ý: Vì Python là ngôn ngữ lập trình, một số thứ có vẻ lạ, ví dụ: **đối với quyền hạn và %đối với modulo)

Ngoài ra, bạn có thể tạo một tập lệnh Python calc,

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

đặt nó trong một thư mục có trong PATHbiến và đặt cờ thực thi của nó để nhận calclệnh tương tự như trên (không cần tạo hàm Bash để chạy tập lệnh Python).

Nếu bạn muốn một phương thức trong Bash thuần túy, hãy sử dụng câu trả lời của Steeldo. Câu trả lời này chỉ thực sự có lợi nếu bạn cần các hàm nâng cao hơn (tức là từ math), vì Python tương đối chậm so với Bash.


Tôi không chắc chắn nếu điều này phá vỡ "chuyển sang python của bạn thì nó có thể làm điều đó và tôi không muốn nó theo cách như vậy." lưu ý, nhưng bạn không cần phải nhập dấu nhắc tương tác và kết quả có thể truy cập được trong Bash để câu trả lời này có vẻ hợp lệ (ít nhất là với tôi).


mọi lúc mọi nơi đều có nghĩa là không dễ dàng và linh hoạt đến thế. Cảm ơn bạn. bất kỳ cải tiến nào bạn có thể làm cho nó trông đơn giản và rõ ràng hơn? Tôi thích điều đó.
rdʒɑ

1
@rajagenupula Bạn có thể đặt trong một hàm trong .bashrc của bạn (có thể với một tên ngắn hơn: c, ?hay +?), do đó bạn sẽ có nó mỗi terminal bạn mở.
kiri

1
Chú ý: Với Python 3, công việc này rất tuyệt, nhưng nếu bạn muốn sử dụng Python 2, bạn sẽ phải chỉnh sửa đoạn mã thành: python2 -c "from __future__ import division; from math import *; print($*)"nếu không, nó sẽ luôn thực hiện phép chia số nguyên, ví dụ như calc 5/2bạn sẽ nhận được 2thay vì 2.5. Xem tại đây để tham khảo: stackoverflow.com/a/183870/202504
jmiserez

Giải pháp Python thực sự có thể tốt hơn apcalc ở chỗ bạn có thể nhập các thư viện bổ sung và nó hỗ trợ bằng chữ pie. Tôi cảm thấy đặt điều này như một kịch bản riêng biệt linh hoạt và di động hơn. Đây là một ý chính đơn giản cho nó: gist.github.com/jasongeng/279eb394c01e74beb9ef
Penghe Geng

21

Sử dụng gói gcalccmdtừ gnome-calculator(> = 13.04) hoặc gcalctool(<13.04). Tôi nghĩ rằng gói được cài đặt theo mặc định

% gcalccmd
> 2+3
5
> 3/2
1.5
> 3*2
6
> 2-3
−1
> 

Cái tốt nhất cho đến bây giờ .. Không cần phải làm thêm và cũng được cài đặt theo mặc định .. man gcalccmdnói: một máy tính bảng điều khiển . Đơn giản, đó chính xác là những gì OP muốn .. :)
Saurav Kumar

Đó là mát mẻ, tương tự như bc, python, máy tính ocatve. Cảm ơn bạn.
rɑːdʒɑ

Kể từ gcalccmd là khá vất vả khi gõ, nó là ý tưởng tốt để thêm bí danh để nó trong ./bash_aliasesnhư alias calc='gcalccmd'hoặc nếu bạn muốn thực hiện các tính toán một lần (với câu trả lời ngay lập tức), bạn có thể thêm alias calc='gnome-calculator -s'- sử dụng sau này: calc 2000/1300hoặc calc 2+3. Trong trường hợp đó, không cần phải thoát máy tính - nó chỉ cung cấp cho bạn câu trả lời và bạn không cần phải nhập quit.
Rafal

10

Đây là một kịch bản shell nhanh cho việc này:

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

Lưu cái này dưới dạng "c", sau đó đặt nó ở đâu đó trong đường dẫn của bạn (chẳng hạn như / bin), sau đó đánh dấu nó có thể thực thi được.

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

Từ bây giờ, bạn có thể chạy các tính toán trong thiết bị đầu cuối như thế này:

$ c 10000-9000
1000

Bạn thật tuyệt vời, chỉ thêm một chữ cái trước khi tính toán có nghĩa là ý tưởng thực sự tuyệt vời. Đây là siêu cho nếu tôi cần 2 đến 3 phép tính. Tôi có thể đi cho trăn hoặc một số khác lâu hơn nhưng ngắn hơn tôi chọn cái này. Cảm ơn đã ghé qua.
rɑːdʒɑ

2
Tôi khuyên bạn nên sử dụng echo "$@" | bcthay thế để bạn có thể đặt khoảng trắng vào các phép tính một cách tự nhiên hơn
kiri

Làm thế nào về việc sử dụng =thay vì ccho tên của lệnh này? Bash thực sự cho phép bạn sử dụng nó như là tên của một chức năng.
Kaz

1
Bạn có thể đặt các chương trình vào ~/bin(thư mục chính của bạn bin) và đảm bảo rằng nó /home/yourname/binnằm trong của bạn PATH.
Kaz

@ minerz029 Suy nghĩ đẹp. Tôi đã chỉnh sửa câu trả lời của tôi cho phù hợp.
dùng530873

8

Đây là một sửa đổi của phần thích hợp của /etc/bash.bashrc(trên Ubuntu 10.04) sẽ sửa đổi command_not_foundtrình xử lý để chạy trình đánh giá biểu thức của shell nếu ký tự đầu tiên của lệnh chưa biết là một số -hoặc +.

Bạn sẽ có thể thực hiện bất kỳ số học shell nào theo cách này; xem http://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithatures để biết danh sách các toán tử số học.

Lưu ý rằng nếu biểu thức bạn muốn đánh giá có chứa a *, bạn sẽ phải trích dẫn *bằng \hoặc dấu ngoặc kép vì shell sẽ thực hiện mở rộng tên tệp trước khi quyết định chạy lệnh nào. Điều tương tự cho các nhà khai thác khác như >>.

Đặt cái này trong của bạn ~/.bashrc, sau đó gõ . ~/.bashrcvà thử nó.

# 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

Đầu ra mẫu: (Tôi đang gõ cta, một lỗi đánh máy, chỉ để kiểm tra rằng trình xử lý lệnh_not_found mới của chúng tôi vẫn sẽ cố gắng tìm kiếm các lệnh chưa biết).

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

Có cách nào chúng ta có thể thêm hỗ trợ cho các tính toán không?
rɑːdʒɑ 18/11/13

1
echo $(( $@ ))Thay vào đó, bạn có thể lấy dòng nói và thay đổi nó thành một trong những chương trình máy tính nâng cao hơn mà những người trả lời khác đã đề cập, đưa các đối số của họ lên dòng lệnh.
Đánh dấu Plotnick

8

Một giải pháp khác tôi chưa từng thấy được đề cập ở đây là Qalculate (qalc) .

sudo apt-get install qalc

cho phiên bản CLI,

sudo apt-get install qalculate-gtk

cho GUI.

Nó có một loạt các tính năng như:

  • hỗ trợ cho các đơn vị : vd20 m / s * 12 h = 864 kilom
  • built-in hằng như pi, e, c,avogadro
  • nhiều built-in chức năng : ví dụ như sin(pi) = 0, gamma(4) = 6, 5! = 120,log(1024, 2) = 10
  • chuyển đổi đơn vị, ví dụ:

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

  • tính toán tượng trưng , vd(x + y)^2 = x^2 + 2xy + y^2
  • hội nhập, ví dụ integrate 3*x^2 = x^3,diff sin(x), pi
  • trợ giúp tích hợp, ví dụ help convert,help integrate
  • tab hoàn thành các lệnh
  • tất cả mọi thứ được dịch, ví dụ hệ thống của tôi bằng tiếng Hà Lan, vì vậy tôi có thể viết cả factorial(5)faculteit(5).
  • và nhiều hơn nữa...

Bạn nói rằng bạn muốn sử dụng nó mà không có tiền tố, vâng ... bạn có thể sử dụng nó với tiền tố:

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

cũng như chạy nó như là một thay thế.


7

dc! Nó là một phần của coreutils, vì vậy nó được cài đặt trên OS X, Ubuntu và khá nhiều MỌI THỨ khác. Đó là một máy tính RPN, vì vậy nếu bạn không thích chúng, nó không dành cho bạn.

Rất cơ bản lệnh như sau (manpage có tất cả các cú pháp mà tôi đã không bao gồm. Lũy thừa, bất cứ ai?)

Bạn chỉ cần khoảng trắng giữa các số. Chúng được bỏ qua trong tất cả các trường hợp khác.

Nhập một số đẩy nó lên đầu ngăn xếp.

+ 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

Chỉ cần lưu ý, điều này không trả lời câu hỏi (cũng không có câu trả lời nào khác). Câu hỏi là làm thế nào KHÔNG có bất kỳ thứ gì ở phía trước phương trình (cũng không phải phía sau), và chỉ cần gõ nói, 42 * 5vào một thiết bị đầu cuối và đưa ra câu trả lời
Tuy nhiên, một người dùng khác vào

2
Hầu hết các câu trả lời không áp dụng. Gõ 1+1vào một thiết bị đầu cuối sẽ hầu như không bao giờ làm việc. Vì vậy, câu trả lời của bạn là tốt
kiri

@YetAntherUser Tôi nghĩ rằng cách duy nhất là hack vào lệnh không tìm thấy (nếu nó được cài đặt) hoặc làm điều gì đó bẩn thỉu trong bashrc ...
Braiam

5

Tôi sử dụng Octave cho loại điều này: http://www.gnu.org/software/octave/

Nó gần như là một bản sao matlab (xin lỗi nếu đây là một sự đơn giản hóa quá mức) có thể được sử dụng trong thiết bị đầu cuối bằng cách gõ quãng tám. Cài đặt sudo apt-get cài đặt quãng tám

Nó không hoàn toàn như những gì bạn muốn nhưng tôi nghĩ tôi sẽ thêm nó như một cách thay thế cho trăn.

Ví dụ sử dụng:

~ $ octave
octave:1> 9000 - 8000
ans =  1000
octave:2> 

Đề xuất một cách khác để hoàn thành mục tiêu là tốt trong câu trả lời, nhưng bạn nên cung cấp thêm thông tin về cách OP sẽ sử dụng Octave để đáp ứng các nhu cầu đã nêu và tại sao đó là một lựa chọn tốt.
cuộc trò chuyện

2
+1, Octave, matlab, scilab, python đều tương tự nhưng octave tôi cần cài đặt nhưng python đã được cài đặt sẵn. Vì vậy, tôi đi đến python theo mặc định. Cảm ơn bạn.
rɑːdʒɑ

từ tất cả những gì tôi đã thử (và tôi đã thử nhiều!) octave là người duy nhất trả về không 0 về lỗi cú pháp! cám ơn!
Sức mạnh Bảo Bình

5

Tôi thích wcalc rất nhiều. Đó là một máy tính khoa học dòng lệnh. Dễ dàng tìm thấy trong Trung tâm phần mềm Ubuntu hoặc chỉ cần sử dụng apt-get.

sudo apt-get install wcalc

Nó chấp nhận các đối số dòng lệnh cũng như có chế độ "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

Và nếu ai đó làm về kỹ thuật, như tôi, bạn có thể sử dụng GNU Octave. Nó có thể làm tất cả các loại, vẽ đồ thị, giải phương trình đồng thời. Thêm vào đó là một sự thay thế miễn phí cho Matlab


... kết hợp điều đó với @ minerz029 khá gọn gàng: Đặt cái này vào ~ / .bash_aliases của bạn:=() { wcalc "$@" }
Frank Nocke

4

cách đơn giản là gọi trăn.

Thí dụ:

>  python -c 'print 10000-9000'

bạn có thể đề cập đến một cái gì đó với tính toán khoa học.
rdʒɑ

1
Bạn có muốn một cái gì đó như thế này? python -c 'import math;print math.log(2)'
dùng1251007

3

Những gì tôi đã tìm thấy là, tôi không thể tin tưởng các tùy chọn Shell, bc hoặc in-dựng sẵn. Do đó tôi đã sử dụng Perl thường được cài đặt trong * linux distro

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

Tính toán trên sẽ trừ $ VAL1 khỏi $ VAL2 và in không có số thập phân (0f)

Lợi ích khi sử dụng Perl là (chi tiết về Ưu & nhược điểm được liệt kê ở đây )

  • Nắm bắt lỗi tốt hơn (chia cho 0 sẽ không dừng tính toán)
  • Có thể cung cấp các công thức trong một tập tin cấu hình. Không cần phải thoát bằng regex phức tạp

nhưng mỗi khi lệnh đó có nghĩa là một chút vấn đề. Có bất kỳ máy tính dựa trên perl sẽ được sử dụng trong thiết bị đầu cuối?
rdʒɑ 18/11/13

3

Bạn có thể thêm chức năng sau vào tệp .bashrc của mình:

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

Lưu ý rằng -lcờ rất quan trọng. Không có nó, sử dụng bccho 5 / 2 = 2.

Như đã được đề cập ở trên, các tính toán có thể được thực hiện bằng cách sử dụng =dấu trước công thức.


3

Bạn cũng có thể sử dụng awk để thực hiện một số tính toán số học trên thiết bị đầu cuối,

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

tuyệt, awk (dưới dạng quãng tám) cũng trả về không 0 về lỗi cú pháp thx!
Sức mạnh Bảo Bình

2

sử dụng lệnh "bc" và sau đó bạn có thể tính toán

thí dụ

[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

Để sử dụng bcmà không có ghi chú bảo hành ghi vào thiết bị đầu cuốibc -q

thí dụ

[root@vaibhav ~]# bc -q
10+2
12

bc đã được giải thích và bao gồm.
Braiam

2

Bạn có thể sử dụng liên kết và bash C-aC-eđể kiểm soát đầu ra. Ví dụ, thực hiện điều này trong shell của bạn:

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

Bây giờ, nhập bất kỳ thao tác số học nào như 10 + 15 và nhấn Ctrl+ J:

$ echo $(( 10 + 15 )) 
25

Bạn sẽ nhận được điều này. Bây giờ, nó được thực hiện như thế nào?

  • bind lệnh này thay đổi ràng buộc của bash của bạn, như các phím tắt.
  • \C-j đây là bash tương đương với Ctrl + J, đây là tổ hợp phím nào chúng tôi muốn thêm vào lệnh của chúng tôi.
  • \C-a điều này đưa chúng ta đến đầu dòng.
  • echo $((Điều này viết echo $((khi bắt đầu.
  • \C-e đưa chúng ta đến cuối dòng
  • )) đóng ngoặc đơn trước của chúng tôi
  • \C-m Đây là tương đương với phím trả về.

Bạn có thể viết điều này vào ~/.inputrctập tin của bạn :

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

Tất nhiên, các câu trả lời khác là hợp lệ quá! Chỉ cần tinh chỉnh một chút:

  • bc: "\C-j": "\C-aecho " \C-e " | bc \C-m"
  • apcalc: "\C-j": "\C-acacl \C-m"
  • trăn: "\C-j": "\C-apython3 -c "print( \C-e )" \C-m"
  • bất kì thứ khác?

Bạn có thể thay đổi Ctrl + J thành bất cứ điều gì bạn thích, nhưng hãy nhớ, cố gắng không thay đổi nó cho một cái gì đó đã có ràng buộc;).

Nguồn:


Ctrl + J đã có một ràng buộc, nó gửi dòng (như Enter) Đây thực sự là một câu trả lời khá thông minh;)
kiri

2

Trước đây, tôi đã từng sử dụng wcalcvà một chương trình nhỏ gọi là ekhá nhiều điều không thể tìm kiếm trên google. Bây giờ tôi sử dụng một kịch bản python để làm điều này, trong đó sử dụng một số tính năng enhư dấu ngoặc vuông. wcalcvẫn còn tốt vì nó có thể thực hiện chính xác tùy ý và chuyển đổi đơn vị, nhưng tôi hầu như không bao giờ sử dụng các tính năng đó.

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

Đây là cách sử dụng nó (giả sử rằng tập lệnh đã được lưu dưới dạng evà đặt ở đâu đó trong $PATH):

$ e e**[pi*1i]
-1.0
$ e hex[10**3]
0x3e8
$ e "[0o400+3]&0xff" # need quotes because of '&'
3

một ví dụ sẽ làm cho điều này trông rõ ràng hơn. Cảm ơn bạn.
rdʒɑ 18/11/13

0

Có một bước để thực hiện chính xác những gì bạn muốn. Tất cả bạn cần làm là thiết lập shellcho tài khoản của bạn /bin/bc.


3
Bạn có thể vui lòng giải thích? Pressume OP không biết cách thay đổi vỏ.
Braiam

0

Bạn cũng có thể sử dụng printf shell dựng sẵn để thực hiện các phép tính số học trên thiết bị đầu cuối.

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

Thí dụ:

$ printf "$(expr 10000 + 9000)\n"
19000
$ printf "$(expr 10000 - 9000)\n"
1000

3
Bằng cách này, bạn đang sử dụng expr (không được tích hợp sẵn) để tính kết quả, printf là dự phòng ở đây
Javier López

0

Bạn có thể sử dụng trình thông dịch python để tính toán. Đây là một hướng dẫn về cách làm như vậy .

Python 2 và python 3 được cài đặt trong Ubuntu theo mặc định.

$ 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

Tạo một máy tính đầu cuối

Đặt phần sau vào tệp .bashrc của bạn

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

Hoặc, chạy nó tại dấu nhắc shell. Bây giờ "calc" từ vỏ sẽ hoạt động như sau:

$ calc 3+45
   48

Tất cả các chức năng có dấu "(" hoặc ")" phải được đặt trong dấu ngoặc kép.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.