Thứ Sáu, 28 tháng 7, 2023

Xử lý toán học (Math) trong Shell Script

Shell Script cũng là một dạng ngôn ngữ lập trình nên chắc chắn sẽ có sử dụng biểu thức tính toán, có điều hơi khác so với các ngôn ngữ khác là bạn phải sử dụng biểu thức khai báo riêng thì trình biên dịch shell mới biết để xử lý. Và trong bài này chúng ta sẽ cùng tìm hiểu cách xử lý tính toán trong Shell Script.

Trước tiên bạn hãy tạo một file tên là expr.sh để thực hành nhé, mọi đoạn code dưới đây sẽ thực hiện trên file này.

Mục lục

  • 1. Sử dụng expr với kiểu integer
  • 2. Sử dụng factor chia thành tích các số nguyên tố
  • 3. Sử dụng jot để sinh ra dãy số liên tiếp
    • Trường hợp 1 tham số
    • Trường hợp 2 tham số
    • Trường hợp 3 tham số
  • 4. Sử dụng bc để tính toán với số thực
  • 5. Lời kết

1. Sử dụng expr với kiểu integer

Với các ngôn ngữ khác thì việc tính toán chỉ cần sử dụng các ký hiệu phép toán như cộng(+) trừ(-) nhân(\*) chia(/), nhưng với linux thì ta kèm theo hàm expr. Lưu ý với phép nhân thì cú pháp là \* vì * là ký tự đặc biệt trong shell.

Bạn mở file expr.sh lên và nhập vào nội dung sau:

Bài viết này được đăng tại [free tuts .net]

1
2
3
4
5
6
7
8
a=12
b=6
 
echo $a / $b
echo $a - $b
echo $a \* $b
echo $a % $b
echo $a + $b

Bạn chạy file này lên bằng lệnh sh expr.sh thì kết quả như hình sau:

Như vậy kết quả đã không được như mong đợi, lý do là bạn không sử dụng biểu thức expr. Bây giờ bạn hãy sửa lại nội dung của file expr.sh như sau:

1
2
3
4
5
6
7
8
a=12
b=6
 
echo `expr $a / $b`
echo `expr $a - $b`
echo `expr $a \* $b`
echo `expr $a % $b`
echo `expr $a + $b`

Chạy lên bạn sẽ thấy kết quả như sau:


Ngoài xử lý tính toán ra expr còn dùng để thực hiện phép so sánh, kết quả sẽ trả về 1 hoặc 0.

1
2
3
4
$ expr 11 = 11
1
$ expr 11 = 12
0

Bạn cũng có thể kết hợp với biến.

1
2
3
$ age=11
$ expr $age = 11
1

2. Sử dụng factor chia thành tích các số nguyên tố

Lệnh factor sẽ phân bổ một số thành nhiều số và các số đó tích với nhau sẽ bằng số ban đầu đi từ nhỏ đến lớn. Ví dụ mình nhập vào số 12, thì trong khoảng 12 sẽ có các số nguyên tố là 2 - 3 - 5 - 7 - 11, trong chuỗi dãy này thì nó sẽ ưu tiên từ nhỏ tới lớn, có thể sử dụng nhiều số cùng một lúc => kết quả sẽ là 2 2 3 vì tích 3 số này bằng 12.

Ví dụ
1
2
$ factor 54
54: 2 3 3 3

Mình cũng không rõ lệnh này có tác dụng gì nhiều trong lập trinh Linux không, thấy nó rất ít khi sử dụng trong tính toán.

3. Sử dụng jot để sinh ra dãy số liên tiếp

Lệnh jot dùng để sinh ra một dãy các số ngẫu nhiên trong một khoảng cho trước, nếu bạn không thiết lập khoảng thì nó sẽ sinh các số liên tiếp và bắt đầu từ 1. Cú pháp của nó như sau:

1
jot so_luong so_bat_dau so_ket_thuc

Trường hợp 1 tham số

Trường hợp này nó sẽ sinh ra các số liên tiếp và bắt đầu từ 1.

1
2
3
4
5
6
$ jot 5
1
2
3
4
5

Trường hợp 2 tham số

Trường hợp này sinh ra các số liên tiếp và bắt đầu bằng tham số thứ 2.

1
2
3
4
5
6
$ jot 5 11
11
12
13
14
15

Trường hợp 3 tham số

Trường hợp này sinh ra các số bắt đầu tại tham số thứ 2 và kết thúc tại tham số thứ 3. Sẽ có hai trường hợp:

  • Nếu khoảng xác lập ngắn hơn tổng số cần sinh thì nó sẽ sinh các số trùng nhau
  • Nếu khoảng xác lập dài hơn tổng số cần sinh thì nó sẽ sinh ra các số không liên tiếp

Ví dụ 1
1
2
3
4
5
$ jot 4 5 20
5
10
15
20

Ví dụ 2
1
2
3
4
5
6
7
$ jot 6 5 27
5
9
14
18
23
27

Ví dụ 3
1
2
3
4
5
6
$ jot 5 11 13
11
12
12
12
13

Còn rất nhiều nhưng mình sẽ trình bày nó ở một bài khác.

4. Sử dụng bc để tính toán với số thực

Lệnh expr chỉ có tác dụng với số nguyên, còn với số thực thì bạn phải sử dụng module bc, cú pháp như sau:

Ví dụ
1
2
$ echo "123.4+5/6-(7.89*1.234)" | bc
113.664

Nếu bạn chạy lệnh mà bị báo lỗi tức là bạn chưa cài đặt, lúc này bạn thực hiện lệnh sau để cài đặt:

1
sudo apt install bc

Kết quả thường nó sẽ làm tròn, để lấy chi tiết kết quả chưa làm tròn thì bạn thêm tham số -l đằng sau lệnh bc.

Ví dụ
1
2
$ echo "(10 / 3)" | bc -l
3.33333333333333333333

5. Lời kết

Như vậy mình đã giới thiệu sơ lược một số lệnh dùng để xử lý tính toán với số trong Linux shell script, những lệnh này là nền tảng để bạn thực hiện tính toán khi viết script. Shell script ngày càng hấp dẫn phải không các bạn, để lập trình nó rất khó chứ không phải dễ như bạn nghĩ đâu.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master