Lệnh let trong Linux giúp bạn thực hiện các phép tính toán học như cộng, trừ, nhân, chia và thực hiện các phép tính bit khác nhau. Kết quả của phép tính có thể được lưu vào một biến để sử dụng sau đó. Trong bài viết này, Vietnix sẽ giới thiệu đến bạn một số cách sử dụng let thông qua các ví dụ cụ thể.
Những điểm chính
- Hiểu rõ lệnh let trong Linux: Bạn sẽ nắm được định nghĩa, mục đích và cách sử dụng lệnh
let
. Ngoài ra, bài viết cũng cung cấp cú pháp cơ bản và các toán tử số học hỗ trợ. - Khám phá cách áp dụng lệnh let trong các tình huống thực tế: Bạn sẽ biết cách áp dụng
let
trong thực tế thông qua các trường hợp sử dụng cụ thể. - Hiểu được trạng thái thoát của lệnh let: Bạn sẽ hiểu cách kiểm tra kết quả của phép tính và xử lý lỗi, từ đó viết các script bash tốt hơn, kiểm soát được luồng thực thi.
- Nắm được các lựa chọn thay thế cho lệnh let: Bạn sẽ được tìm hiểu thêm các lựa chọn khác để thực hiện phép toán số học trong shell.
- Vietnix – Giải pháp công nghệ tối ưu, đồng hành cùng doanh nghiệp.
Lệnh let trong Linux là gì?
Lệnh let
là một lệnh được tích hợp sẵn trong Linux, giúp bạn thực hiện các phép tính toán ngay trong terminal. Bạn có thể cộng (+), trừ (-), nhân (*), chia (/) và thực hiện nhiều phép toán khác một cách dễ dàng. Lệnh let
còn hỗ trợ cả các phép toán bit như AND, OR, XOR để mở rộng khả năng tính toán. Điểm đặc biệt của lệnh let
là khả năng gán kết quả tính toán trực tiếp vào một biến, giúp bạn lưu trữ và sử dụng lại giá trị này sau đó.
Cú pháp của lệnh let
trong Linux như sau:
let arg [arg ...]
Trong đó:
- let là tên lệnh.
- arg là biểu thức số học bắt buộc phải có.
- [arg …] là các biểu thức số học bổ sung. arg nằm trong dấu ngoặc vuông [] là các đối số tùy chọn. Ba dấu chấm … sau arg cho biết có thể thêm nhiều biểu thức, cách nhau bởi dấu cách. Lệnh let sẽ tính toán tất cả các biểu thức này.
Các toán tử số học sử dụng với lệnh let
Lệnh let
hỗ trợ nhiều toán tử khác nhau, cho phép bạn thực hiện các phép tính số học và bit. Dưới đây là bảng liệt kê các toán tử phổ biến:
Toán tử | Mô tả |
---|---|
id++, id-- | Tăng/giảm biến sau: Lấy giá trị biến id, sau đó cộng/trừ 1 vào nó. |
++id, --id | Tăng/giảm biến trước: Cộng/trừ 1 vào biến id, sau đó lấy giá trị mới. |
-expr, +expr | Toán tử âm/dương: Nhân giá trị biểu thức với -1 hoặc +1. |
+, – | Phép cộng, phép trừ. |
** | Phép lũy thừa. |
<<, >> | Dịch bit trái/phải. |
& | Toán tử AND bit. |
^ | Toán tử XOR bit. |
| | Toán tử OR bit. |
Để xem tất cả các toán tử có sẵn, bạn có thể xem trang trợ giúp của lệnh let bằng lệnh help let.
5 ví dụ sử dụng lệnh let trong Linux
Ví dụ 1: Sử dụng lệnh let để thực hiện các phép toán số học
Để thực hiện các phép tính, đầu tiên chúng ta sẽ gán giá trị cho hai biến, sau đó thực hiện phép toán và hiển thị kết quả. Bạn có thể gõ các lệnh sau vào terminal:
let "num1 = 9" "num2 = 5" "num3=num1+num2"; echo $num3
let "num1 = 9" "num2 = 5" "num3=num1-num2"; echo $num3
let "num1 = 9" "num2 = 5" "num3=num1*num2"; echo $num3
let "num1 = 9" "num2 = 5" "num3=num1/num2"; echo $num3
let "num1 = 9" "num2 = 5" "num3=num1%num2"; echo $num3
Kết quả: Các lệnh trên sẽ lần lượt gán giá trị 9 và 5 cho các biến num1
và num2
, sau đó thực hiện các phép toán cộng, trừ, nhân, chia và chia lấy dư, rồi lưu kết quả vào biến num3. Cuối cùng, lệnh echo sẽ hiển thị giá trị của num3
. Như bạn thấy trong các kết quả trên, lệnh let
giúp thực hiện các phép tính cơ bản một cách dễ dàng.
Bạn nên sử dụng dấu ngoặc kép cho mỗi biểu thức và sử dụng dấu chấm phẩy ở cuối mỗi phép toán.
Ví dụ 2: Sử dụng lệnh let để thực hiện các phép toán đơn vị âm và dương
Bạn cũng có thể sử dụng dấu trừ (-) phía trước một biến để đổi dấu giá trị của biến đó. Ví dụ:
let "num1 = 9" "num1 = -num1"; echo $num1
Kết quả: Lệnh này sẽ gán giá trị 9 cho num1
, sau đó đổi dấu của num1
thành -9 và hiển thị kết quả.
Dấu cộng (+) phía trước biến sẽ không thay đổi giá trị, nhưng đôi khi giúp code dễ đọc hơn, đặc biệt trong các script dài.
Ví dụ 3: Sử dụng lệnh let với toán tử lũy thừa (**)
Để tính lũy thừa (số mũ) của một số, bạn có thể dùng toán tử ** với lệnh let
. Ví dụ, để tính 9 lũy thừa 2 (hay 9 bình phương), hãy dùng lệnh:
let "num1 = 9 ** 2" ; echo $num1
Kết quả: Lệnh này sẽ tính 9 mũ 2 và in ra kết quả là 81.
Ví dụ 4: Sử dụng toán tử tăng/giảm với lệnh let
Các toán tử tăng/giảm (++, –) cho phép bạn tăng hoặc giảm giá trị của biến trước hoặc sau khi sử dụng.
Trường hợp 1: Toán tử hậu tố tăng (id++) và hậu tố giảm (id–)
Để tăng/giảm giá trị của biến sau khi thực hiện, dùng num++
hoặc num--
. Ví dụ:
let "num1 = 5" "num2=num1++"; echo $num1 $num2
let "num1 = 5" "num2=num1--"; echo $num1 $num2
Kết quả: Bạn có thể thấy, ban đầu num1
và num2
đều có giá trị là 5. Sau khi thực hiện num1++
, giá trị của num1
sẽ tăng lên 6. Tương tự, sau khi num1--
, giá trị của num1
giảm xuống 4.
Khi bạn gán một giá trị mới cho biến đã được định nghĩa trước đó, giá trị cũ sẽ bị ghi đè.
Trường hợp 2: Toán tử tiền tố tăng (++id) và tiền tố giảm (–id)
Để tăng/giảm giá trị của biến trước khi thực hiện, dùng ++num
hoặc --num
. Ví dụ:
let "num1 = 5" "num2=++num1"; echo $num1 $num2
let "num1 = 5" "num2=--num1"; echo $num1 $num2
Kết quả: Ở dòng đầu, num1
tăng lên 6 trước khi gán cho num2
. Tương tự ở dòng hai, num1
giảm xuống 4 trước khi gán cho num2
. Vậy, cả num1
và num2
đều có giá trị giống nhau sau các phép tăng/giảm trước.
Ví dụ 5: Sử dụng lệnh let cho các phép toán bit
Để thực hiện các phép toán bit như AND, OR, XOR,… bạn có thể sử dụng lệnh let
theo các ví dụ sau đây:
Trường hợp 1: Sử dụng toán tử AND bit
Phép toán AND bit (ký hiệu &) so sánh từng cặp bit tương ứng của hai số. Kết quả bit sẽ là 1 nếu cả hai bit tương ứng đều là 1; ngược lại là 0. Ví dụ:
let "num1 = 5" "num2 = 6" "num3=num1&num2"; echo $num3
Kết quả là 4. Vì:
- Số 5 ở dạng nhị phân là 101
- Số 6 ở dạng nhị phân là 110
So sánh từng bit:
- 1 & 1 = 1
- 0 & 1 = 0
- 1 & 0 = 0
Vậy kết quả nhị phân là 100, tương ứng với số 4 trong hệ thập phân.
Trường hợp 2: Sử dụng toán tử OR bit
Phép toán OR bit (ký hiệu |
) so sánh các bit tương ứng của hai số. Kết quả bit sẽ là 1 nếu ít nhất một trong hai bit tương ứng là 1; ngược lại là 0. Thử lệnh sau:
let "num1 = 5" "num2 = 6" "num3=num1|num2"; echo $num3
Kết quả là 7, vì:
- Số 5 ở dạng nhị phân là 101
- Số 6 ở dạng nhị phân là 110
So sánh từng bit:
- 1 | 1 = 1
- 0 | 1 = 1
- 1 | 0 = 1
Vậy kết quả nhị phân là 111, tương ứng với số 7 trong hệ thập phân.
Trường hợp 3: Sử dụng toán tử XOR bit
Phép toán XOR bit (ký hiệu ^) so sánh các bit tương ứng. Kết quả bit là 0 nếu hai bit giống nhau; là 1 nếu hai bit khác nhau. Ví dụ:
let "num1 = 5" "num2 = 6" "num3=num1^num2"; echo $num3
Kết quả là 3, vì:.
- Số 5 ở dạng nhị phân là 101
- Số 6 ở dạng nhị phân là 110
So sánh từng bit:
- 1 ^ 1 = 0
- 0 ^ 1 = 1
- 1 ^ 0 = 1
Vậy kết quả nhị phân là 011, tương ứng với số 3 trong hệ thập phân.
Trường hợp 4: Sử dụng toán tử NOT bit
Phép toán NOT bit (ký hiệu ~) sẽ đảo ngược các bit của một số. Tức là 1 thành 0 và 0 thành 1. Ví dụ:
let "num1 = 5" "num1 = ~num1"; echo $num1
Kết quả sẽ là -6. Trong máy tính, số 5 được biểu diễn dưới dạng nhị phân 32-bit là 000…0101 (có 29 số 0 ở trước). Phép đảo bit sẽ biến nó thành 111…1010, đây là biểu diễn bù hai của số -6.
Trường hợp 5: Sử dụng phép dịch bit trái / phải
Bạn có thể dịch chuyển các bit của một số sang trái hoặc phải bằng toán tử <<
và >>
theo số vị trí nhất định. Ví dụ:
let "num1 = 4 << 1"; echo $num1
let "num1 = 4 >> 1"; echo $num1
- Dịch trái: số 4 có dạng nhị phân 100. Khi dịch trái 1 bit (4 << 1), nó thành 1000, tương ứng với số 8 trong hệ thập phân.
- Dịch phải: số 4 có dạng nhị phân 100. Khi dịch phải 1 bit (4 >> 1), nó thành 10, tương ứng với số 2 trong hệ thập phân.
Trạng thái thoát (Exit Status) của lệnh let
Trạng thái thoát (exit status) của lệnh let
phụ thuộc vào kết quả của biểu thức cuối cùng. Nếu kết quả cuối cùng khác 0, trạng thái thoát là 0; ngược lại (kết quả cuối cùng là 0), trạng thái thoát là 1. Xem các ví dụ sau:
let “num1 = 9” “num2 = 5”; echo $?
let “num1 = 9” “num2 = 0”; echo $?
let “num1 = 9” “num2 = -5”; echo $?
Như trong hình minh họa ở trên, trạng thái thoát của lệnh let
phụ thuộc vào kết quả của biểu thức ngoài cùng bên phải. Khi biểu thức ngoài cùng bên phải (giá trị của biến num2 trong ví dụ này) khác 0, trạng thái thoát là 0. Ngược lại, khi biểu thức ngoài cùng bên phải là 0, trạng thái thoát trở thành 1.
Bạn có thể sử dụng trạng thái kết thúc của let để gỡ lỗi, kiểm tra xem phép tính đã thành công hay không hoặc để điều khiển các vòng lặp trong script.
Các lựa chọn thay thế cho lệnh let
Mặc dù lệnh let
khá hữu ích để thực hiện các phép toán số học, nhưng có một số lựa chọn thay thế cho lệnh này.
Trường hợp 1: Sử dụng mở rộng số học (arithmetic expansion) hoặc đánh giá số học (arithmetic evaluation)
Bạn có thể dùng mở rộng số học (cú pháp $((…))) hoặc đánh giá số học (cú pháp ((…))) thay cho lệnh let
. Ví dụ, thay vì dùng let để cộng hai số, bạn có thể viết như sau:
num1=9; num2=5; num3=$((num1+num2)); echo $num3
num1=9; num2=5; ((num3=num1+num2)); echo $num3
- Dòng đầu sử dụng mở rộng số học, $((num1+num2)) sẽ tính tổng của num1 và num2, gán vào num3.
- Dòng thứ hai là một ví dụ của việc đánh giá số học, ((num3=num1+num2)) cũng thực hiện tương tự, tính tổng và gán giá trị.
Cả hai cách trên đều cho ra kết quả tương tự nhau.
Trường hợp 2: Sử dụng lệnh expr thay thế cho lệnh let
Bạn cũng có thể sử dụng lệnh expr
để tính toán tương tự như let. Để thực hiện các phép toán cộng, trừ, nhân, chia như ở ví dụ 1, bạn dùng các lệnh sau:
num1=9; num2=5; num3=$(expr $num1 + $num2); echo $num3
num1=9; num2=5; num3=$(expr $num1 - $num2); echo $num3
num1=9; num2=5; num3=$(expr $num1 \* $num2); echo $num3
num1=9; num2=5; num3=$(expr $num1 \/ $num2); echo $num3
Ở đây, lệnh expr
sẽ tính toán biểu thức sau đó lệnh $(…) sẽ lấy kết quả của expr và gán cho num3.
Khi làm việc với số nguyên, bạn không nhất thiết phải khai báo kiểu biến (ví dụ: declare -i).
Vietnix – Giải pháp công nghệ tối ưu, đồng hành cùng doanh nghiệp
Với hơn 100.000 dịch vụ được kích hoạt, Vietnix đã khẳng định vị thế trong ngành công nghệ tại Việt Nam. Hoạt động dựa trên giá trị cốt lõi lấy thành công của khách hàng làm mục tiêu, Vietnix mang đến các giải pháp công nghệ hiệu quả, giúp doanh nghiệp tối ưu hóa vận hành và nâng cao hiệu quả kinh doanh.
Dịch vụ VPS AMD của Vietnix được thiết kế nhằm đáp ứng nhu cầu về hiệu suất và độ ổn định cao cho các doanh nghiệp. Với CPU AMD EPYC và băng thông lớn, khả năng truyền tải ổn định, dịch vụ VPS phù hợp cho các ứng dụng đòi hỏi tài nguyên mạnh mẽ. Đội ngũ kỹ thuật viên hỗ trợ 24/7, đảm bảo dịch vụ vận hành liên tục và hiệu quả.
Thông tin liên hệ:
- Hotline: 18001093
- Email: sales@vietnix.com.vn
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
- Website: https://vietnix.vn/
Bài viết này đã trình bày chi tiết về cú pháp, cách sử dụng cũng như các ví dụ minh họa về let trong Linux. Nắm vững lệnh let và các phương pháp tương đương sẽ giúp bạn viết script shell hiệu quả hơn, từ việc thực hiện các phép tính đơn giản đến việc xây dựng các logic phức tạp. Hy vọng bài viết này đã cung cấp cho bạn những kiến thức cần thiết để tận dụng tối đa sức mạnh của let trong công việc hàng ngày với Linux.