Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Toán học / Số học trong Tập lệnh Bash / Shell, với các ví dụ

Toán học rất dễ dàng, tập lệnh Bash cũng dễ dàng, vì vậy việc thực hiện toán học / số học trong tập lệnh Bash / Shell cũng sẽ dễ dàng. Đó là. Đây là cách thực hiện.

Làm việc với số nguyên

Số học tích hợp của Bash chỉ có thể xử lý các giá trị số nguyên (số nguyên). Nếu bạn cố gắng khai báo một biến có giá trị không phải là số nguyên:

declare -i e=2.5

Bạn sẽ thấy như sau:

bash: declare: 2.5: syntax error: invalid arithmetic operator (error token is ".5")

Để làm việc với các số không phải số nguyên, bạn sẽ cần sử dụng chương trình bên ngoài để thực hiện các phép tính của mình - nhưng trước tiên, đây là cách sử dụng số học Bash tích hợp sẵn để làm việc với số nguyên.

Sử dụng khai báo biến

Nếu các biến của bạn được khai báo là số nguyên bằng cách sử dụng khai báo tuyên bố, bạn có thể thực hiện số học mà không cần xem xét đặc biệt nào:

# Declaring variables as integers
declare -i x=4
declare -i y=2

# Performing arithmetic with integer variables
result=x/y 

echo $result

Điều này sẽ trả về:

2

Câu lệnh toán học không cần đặt trong dấu ngoặc để đánh giá nếu các biến được khai báo là số nguyên.

Sử dụng Dấu ngoặc kép / Dấu ngoặc đơn

Nếu các biến của bạn không được khai báo cụ thể dưới dạng số nguyên, được chuyển dưới dạng tham số tập lệnh hoặc đầu ra từ chương trình, chúng sẽ được coi là chuỗi theo mặc định.

Bash có khả năng xử lý các chuỗi trong số học - nhưng chỉ khi biểu thức được gắn cờ là một biểu thức số học sử dụng dấu ngoặc kép . Xem ví dụ dưới đây:

x = 6
((y=$x+3))
echo $y

Đoạn mã tập lệnh Bash ở trên sẽ xuất ra đánh giá chính xác của biểu thức:

9

… Vì biểu thức số học trong ngoặc đã được hiểu đúng là chứa các biến có số, thay vì coi chúng là chuỗi.

Không có dấu ngoặc:

y=$x+3

Bạn sẽ nhận được đầu ra:

6+3

Biểu thức sẽ được coi là kết hợp hai chuỗi và không được đánh giá.

Các toán tử toán học được hỗ trợ

Số học tích hợp sẵn Bash hỗ trợ các toán tử sau:

+ Bổ sung
- Phép trừ
++ Sự gia tăng
- Giảm dần
* Phép nhân
/ Bộ phận
% Phần còn lại
** Luỹ thừa

Boolean và số học

Dấu ngoặc kép cũng được nhìn thấy khi sử dụng toán tử boolean, vì biểu thức được đánh giá sẽ trả về 0 hoặc 1:

if (( x > y )); then
    echo "x is greater than y"
fi

Xem thêm về Hoạt động Bash Boolean tại đây

Làm việc với các giá trị thập phân

Sử dụng bc Lệnh

Như đã trình bày trước đó trong bài viết, việc sử dụng số học Bash với các giá trị không phải là số nguyên sẽ dẫn đến lỗi.

Các bc lệnh có thể xử lý các giá trị thập phân (và toán học phức tạp hơn). Đây là cú pháp:

bc OPTIONS FILE

Ở đâu:

  • OPTIONS là danh sách các tùy chọn (xem tại đây để biết danh sách đầy đủ các tùy chọn)
  • FILE là đường dẫn đến tệp văn bản chứa số học cần giải.

Như bc sẽ chấp nhận đầu vào được chuyển đến nó, bạn không cần phải lưu trữ phương trình của mình trong một tệp; bạn có thể nhập trực tiếp từ bảng điều khiển:

echo "2.32+3.45" | bc

… Sẽ xuất ra câu trả lời chính xác của:

5.77

Dưới đây là tóm tắt đầy đủ về đường ống và chuyển hướng đầu vào và đầu ra của các ứng dụng dòng lệnh.

Bạn có thể xem hướng dẫn sử dụng bc đầy đủ bằng cách chạy:

man bc

Có rất nhiều cú pháp nâng cao cho phép toán phức tạp cho lệnh bc, được trình bày chi tiết trong hướng dẫn sử dụng.