Logo

Personal Ops Runbook

Personal runbook covering infrastructure operations for Cloud, Kubernetes, OpenStack, and Ceph environments. Includes deployment and teardown procedures, node management, cluster monitoring setup, and incident response workflows compiled from day-to-day operational work. Intended strictly for personal reference — configurations and scripts are environment-specific and not guaranteed to work as-is elsewhere.

[Bash] Lesson 12 – Toán tử số học trong Bash


1. Toán tử số học trong Bash Trong chủ đề này, chúng ta sẽ hiểu cách sử dụng các toán tử số học trong Bash.

Tùy vào loại kết quả chúng ta muốn thông qua các tập lệnh của mình, chúng ta có thể cần áp dụng các toán tử số học vào một số điểm. Giống như biến, chúng khá dễ áp dụng trong Bash. Trong script bash, chúng ta có thể thực hiện các phép tính số học trên các giá trị số để đạt được kết quả mong muốn.

image

Có 11 toán tử số học được hỗ trợ bởi Bash Shell.

Hãy xem bảng sau đây để thấy cú pháp, mô tả và ví dụ cho mỗi toán tử số học:

Toán tử Mô tả Ví dụ
+ Cộng expr 2 + 3 sẽ trả về 5
Trừ expr 10 - 3 sẽ trả về 7
* Nhân expr 2 \* 3 sẽ trả về 6
/ Chia expr 10 / 2 sẽ trả về 5
% Chia lấy dư expr 10 % 3 sẽ trả về 1
= Gán giá trị a=10
== So sánh bằng if [ $a == $b ]
!= So sánh khác if [ $a != $b ]
> Lớn hơn if [ $a > $b ]
< Nhỏ hơn if [ $a < $b ]
>= Lớn hơn hoặc bằng if [ $a >= $b ]
<= Nhỏ hơn hoặc bằng if [ $a <= $b ]

2. Thực hiện các phép toán số học trong Bash

Có nhiều cách để thực hiện các phép toán số học trên shell Bash. Dưới đây là một số phương pháp mà chúng ta có thể áp dụng để thực hiện các phép toán số học:

Đôi dấu ngoặc đơn Đôi ngoặc đơn là cơ chế dễ nhất để thực hiện các phép toán số học cơ bản trong shell Bash. Chúng ta có thể sử dụng phương pháp này bằng cách sử dụng đôi ngoặc đơn với hoặc không có ký tự $. Cú pháp:

((expression))

Chúng ta có thể áp dụng bốn cách khác nhau để đạt được các mục tiêu yêu cầu. Xem các phương pháp được đưa ra bên dưới để hiểu cách sử dụng cơ chế ngoặc đôi (Double Parentheses) (Giả sử chúng ta muốn cộng hai số 10 và 3):

Phương pháp 1:

Sum=$((10+3))
echo "Sum = $Sum"

Phương pháp 2:

((Sum=10+3))
echo "Sum = $Sum"

Phương pháp 3

Num1=10
Num2=3
((Sum=Num1+Num2))
echo "Sum = $Sum"

Phương pháp 4:

Num1=10
Num2=3
Sum=$((Num1+Num2))
echo "Sum = $Sum"

Tất cả các phương pháp này sẽ cung cấp cùng một kết quả như sau: 13.

Sum = 13

Dưới đây là một ví dụ minh họa về việc sử dụng đôi ngoặc kép để thực hiện các phép tính toán trong một script Bash shell:

Ví dụ 1:

#!/bin/bash

a=10
b=5

echo "Addition"
echo "a + b = $((a + b))"

echo "Subtraction"
echo "a - b = $((a - b))"

echo "Multiplication"
echo "a * b = $((a * b))"

echo "Division"
echo "a / b = $((a / b))"

echo "Modulus"
echo "a % b = $((a % b))"

Trong ví dụ này, chúng ta đã khai báo hai biến ab và sử dụng đôi ngoặc kép để thực hiện các phép tính cộng, trừ, nhân, chia và chia lấy dư trên các biến này. Khi script được thực thi, kết quả của từng phép tính sẽ được hiển thị trên màn hình.

Ví dụ 2:

#!/bin/bash

x=8
y=2
echo "x=8, y=2"
echo "Addition of x & y"
echo $(( $x + $y ))
echo "Subtraction of x & y"
echo $(( $x - $y ))
echo "Multiplication of x & y"
echo $(( $x * $y ))
echo "Division of x by y"
echo $(( $x / $y ))
echo "Exponentiation of x,y"
echo $(( $x ** $y ))
echo "Modular Division of x,y"
echo $(( $x % $y ))
echo "Incrementing x by 5, then x= "
(( x += 5 ))
echo $x
echo "Decrementing x by 5, then x= "
(( x -= 5 ))
echo $x
echo "Multiply of x by 5, then x="
(( x *= 5 ))
echo $x
echo "Dividing x by 5, x= "
(( x /= 5 ))
echo $x
echo "Remainder of Dividing x by 5, x="
(( x %= 5 ))
echo $x

Kết quả

image

3. Toàn tử với Let

Let là một lệnh tích hợp trong Bash cho phép chúng ta thực hiện các phép toán số học. Nó có định dạng cơ bản như sau:

let <arithmetic expression>

Một ví dụ được cung cấp bên dưới giải thích cách sử dụng lệnh let trong một kịch bản Bash:

#!/bin/bash

#Assigning variables
a=10
b=20

#Adding variables using let
let c=a+b
echo "c = $c"

Trong ví dụ này, chúng ta khởi tạo hai biến a và b với các giá trị tương ứng là 10 và 20. Sau đó, chúng ta sử dụng lệnh let để tính tổng của hai biến và gán kết quả cho biến c. Cuối cùng, chúng ta in kết quả bằng cách sử dụng lệnh echo. Kết quả của ví dụ này là “c = 30”.

Ví dụ 2:

#!/bin/bash

x=10
y=6
z=0
echo "Addition"
let "z = $(( x + y ))"
echo "z= $z"

echo "Substraction"
let "z = $((x - y ))"
echo "z= $z"

echo "Multiplication"
let "z = $(( x * y ))"
echo "z = $z"

echo "Division"
let "z = $(( x / y ))"
echo "z = $z"

echo "Exponentiation"
let "z = $(( x ** y ))"
echo "z = $z"

echo "Modular Division"
let "z = $(( x % y ))"
echo "z = $z"

let "x += 5"
echo "Incrementing x by 5, then x= "
echo $x

let "x -= 5"
echo "Decrementing x by 5, then x= "
echo $x

let "x *=5"
echo "Multiply of x by 5, then x="
echo $x

let "x /= 5"
echo "Dividing x by 5, x= "
echo $x

let "x %= 5"
echo "Remainder of Dividing x by 5, x="
echo $x

Kết quả

image

4. Toán tử với Backticks.

Backticks là một trong những cách để thực hiện phép tính toán số học trong Bash scripting. Trong đó, một biểu thức số học được đánh giá bởi lệnh expr (được biết đến như là trình đánh giá biểu thức đa năng). expr giống như ‘let,’ nhưng nó không lưu kết quả vào một biến. Nó trực tiếp in ra kết quả. Không giống như let, chúng ta không cần phải bao quanh biểu thức trong dấu ngoặc kép. Chúng ta cần sử dụng khoảng trắng giữa các phần của biểu thức. Chúng ta cần sử dụng ‘expr’ trong các chuỗi lệnh để lưu kết quả đầu ra vào một biến.

Chúng ta cũng có thể sử dụng expr mà không cần dấu ‘backticks’, cú pháp:

`expr item1 operator item2`
or
expr item1 operator item2

Một ví dụ được cung cấp dưới đây để giải thích cách sử dụng backticks và expr trong một script Bash:

#!/bin/bash
#Basic arithmetic using expr

echo "a=10, b=3"
echo "c is the value of addition c=a+b"
a=10
b=3
echo "c= `expr $a + $b`"

Kết quả

image