Tính toán biến trong shell linux
Với bài viết này mình sẽ trình bày “bốn cách tính toán trong bash shell” hay trên Linux thường áp dụng cho các hoạt động code shell script lập trình trên Linux rất nhiều. Mỗi phương thức, công cụ đều sẽ có những cách sử dụng và lưu ý riêng nên các bạn có thể gõ lệnh nhiều vào để quen với cách sử dụng lệnh đó. Show
Contents
1. ExprKiểu dữ liệu số áp dụng : số
nguyên (integer). Ví dụ 1: # expr 1 + 1 2 # myvar=$(expr 1 + 1) # echo ${myvar} 2 # expr $myvar + 1 3 # expr $myvar / 3 1 # expr $myvar \* 3 9 (Sai) : expr 1+1 – Ở phép toán nhân, các bạn phải thêm dấu “\” trước dấu “*” thì lệnh mới hiểu đó là phép nhân. (Sai) : expr 3 * 3 2. LetKiểu dữ liệu số áp dụng : số nguyên (integer) . Ví dụ 2: # a=5 # let a+=1 # echo ${a} 6 # let a+1 # echo ${a} 6 # let b=a+5; echo ${b} 11 # let c=a+b; echo ${c} 17 # let d=$b+3; echo ${d} 14 (Sai): let 5+5 – Thằng này phải viết các biến số hoặc số dính liền nhau không được tách khoảng trắng như “expr“ (Sai)
: let a + 1 3. Sử dụng $((expression)) hoặc $[expression]Kiểu dữ liệu số áp dụng : số nguyên (integer) . Ví dụ 3: # echo $((5+6)) 11 # echo $[5+7] 12 # echo $[5+7.5] bash: 5+7.5: syntax error: invalid arithmetic operator (error token is ".5") # var=10 # echo ${var} 10 # var=$((var+5)) # echo $var 15 # echo var=$[var+5] var=20 # echo $[var+5] 20 # echo $var 15 # var=$[var+5] # echo $var 20 # var2=7 # var=$((var+${var2})) # echo $var 27 4. “bc” – An arbitrary precision calculator language”Kiểu dữ liệu số sử dụng : integer, float (số nguyên và số thập phân) . Ví dụ 4: # echo "2 + 3" | bc 5 # bc <<< "3.4+7/8-(5.94*3.14)" -15.25 # echo "3.4+7/8-(5.94*3.14)" | bc -15.25 # echo "2/3" | bc 0 # echo "scale=2; 2/3" | bc .66 # echo "(2/3)+(7/8)" | bc 0 # echo "scale=2;(2/3)+(7/8)" | bc 1.53 # echo "scale=4;(2/3)+(7/8)" | bc 1.5416 # echo "scale=6;(2/3)+(7/8)" | bc 1.541666 # echo "(2/3)+(7/8)" | bc -l 1.54166666666666666666 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. Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức. Trước tiên bạn hãy tạo một file tên là 1. Sử dụng expr với kiểu integerVớ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 Bạn mở file Bài viết này được đăng tại [free tuts .net] 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 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 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. $ expr 11 = 11 1 $ expr 11 = 12 0 Bạn cũng có thể kết hợp với biến. $ 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ụ $ 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ếpLệ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: 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. 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. $ 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:
Ví dụ 1 $ jot 4 5 20 5 10 15 20 Ví dụ 2 $ jot 6 5 27 5 9 14 18 23 27 Ví dụ 3 $ 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ựcLệ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 Ví dụ $ 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: 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ố Ví dụ $ echo "(10 / 3)" | bc -l 3.33333333333333333333 5. Lời kếtNhư 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. |