Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Toán học Bash thực tế: Hướng dẫn từng bước với ví dụ

Toán học dễ, Bash script dễ, nên toán/arithmetic trong Bash/Shell script cũng dễ. Thực sự dễ. Đây là cách làm.

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

Arithmetic built-in của Bash chỉ xử lý số nguyên (integer). Nếu khai báo biến với giá trị không phải nguyên:

declare -i e=2.5

Sẽ báo lỗi:

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

Để làm việc số không nguyên, cần chương trình ngoài – nhưng trước tiên, đây là cách dùng arithmetic built-in Bash cho số nguyên.

Dùng khai báo biến

Nếu biến khai báo integer bằng declare, có thể tính toán không cầnพิจารณa đặc biệt:

# Khai báo biến integer declare -i x=4 declare -i y=2 # Tính toán với biến integer result=x/y echo $result

Kết quả:

2

Biểu thức toán học không cần bọc ngoặc nếu biến khai báo integer.

Dùng ngoặc kép/double brackets

Nếu biến không khai báo integer, truyền param script, hoặc output từ chương trình, mặc định coi như string.

Bash xử lý string trong arithmetic – chỉ nếu biểu thức được đánh dấu là arithmetic expression bằng double brackets. Xem ví dụ:

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

Script trên xuất kết quả đúng:

9

…vì biểu thức arithmetic trong ngoặc được hiểu đúng chứa biến số, không phải string.

Không có ngoặc:

y=x+3

Kết quả:

6+3

Biểu thức bị coi là nối 2 string, không được đánh giá.

Toán tử toán học hỗ trợ

Arithmetic built-in Bash hỗ trợ toán tử:

Toán tử Ý nghĩa
+ Cộng
– Trừ
++ Tăng (Increment)
— Giảm (Decrement)
* Nhân
/ Chia
% Chia lấy dư (Remainder)
** Lũy thừa (Exponentiation)

Boolean và arithmetic

Double brackets cũng thấy khi dùng boolean operator, vì biểu thức đánh giá trả về 0 hoặc 1:

if (( x > y )); then echo "x lon hon y" fi

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

Làm việc với số thập phân (Decimal)

Dùng lệnh bc

Như đã chỉ ra, arithmetic Bash với số không nguyên báo lỗi.

Lệnh bc xử lý số thập phân (và toán phức tạp hơn). Cú pháp:

bc TUY_CHON FILE

Trong đó:

  • TUY_CHON là danh sách tùy chọn (xem full list tại đây)
  • FILE là đường dẫn file text chứa phép tính cần giải.

Vì bc chấp nhận input piped, không cần lưu equation trong file; pipe trực tiếp từ console:

echo "2.32+3.45" | bc

…kết quả đúng:

5.77

Xem chi tiết piping và redirect input/output lệnh dòng lệnh.

Xem manual bc đầy đủ bằng lệnh:

man bc

Có nhiều cú pháp nâng cao cho toán phức tạp trong bc, chi tiết trong manual.