Bash nếu đầu ra lệnh lớn hơn

Là người dùng Linux, sẽ có lúc chúng ta cần viết một đoạn script để thực hiện một tác vụ nào đó và lặp lại đoạn script dựa trên các điều kiện số nhất định. Trong những trường hợp như vậy, chúng tôi sử dụng các toán tử so sánh số nguyên trong Bash. Cụ thể, có hai bộ toán tử so sánh số nguyên. dấu ngoặc vuông và dấu ngoặc kép. Thật không may, Bash không hỗ trợ số học dấu phẩy động

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về các toán tử này và cách so sánh các biến với số trong Bash

2. Dấu ngoặc vuông

Dấu ngoặc vuông có thể được sử dụng làm dấu ngoặc vuông đơn hoặc dấu ngoặc vuông kép

Dấu ngoặc vuông đơn, [, là tên gọi khác của lệnh kiểm tra. Lệnh kiểm tra là một lệnh tích hợp của Bash shell. Nó kiểm tra các thuộc tính tệp và thực hiện so sánh chuỗi và số học. Ngoài ra, lệnh kiểm tra không cung cấp đầu ra, nhưng nó trả về trạng thái thoát là 0 nếu biểu thức ước tính là đúng. Mặt khác, nó trả về giá trị khác 0 cho false

Mặt khác, dấu ngoặc vuông kép, [[, là một phần mở rộng Bash lấy cảm hứng từ vỏ Korn. Dấu ngoặc vuông kép là một từ khóa. Từ khóa là đặc biệt và hoạt động theo các bộ quy tắc khác nhau dưới dạng lệnh. Tuy nhiên, không có quy tắc chung cho các từ khóa và mỗi từ khóa là một trường hợp đặc biệt

Chúng ta nên lưu ý rằng các từ khóa [[ và ]] không hỗ trợ mở rộng tên đường dẫn hoặc tách từ

Khi Bash phân tích cú pháp một tập lệnh hoặc lệnh trên thiết bị đầu cuối và nhận thấy một từ khóa có từ khóa đóng, nó sẽ phát hiện mọi thứ nằm giữa hai từ khóa đó. Sau đó, Bash áp dụng cách đối xử đặc biệt với chúng tùy thuộc vào các quy tắc được hỗ trợ bởi các từ khóa. Hơn nữa, từ khóa ngoặc vuông cũng hỗ trợ shell globing

Mặc dù dấu ngoặc đơn và dấu ngoặc vuông khác nhau nhưng chúng có cùng cú pháp để so sánh số

2. 1. Kiểm tra xem các số có bằng nhau không

Chúng ta sử dụng biểu thức điều kiện -eq, nghĩa là “bằng”, để kiểm tra xem các số có bằng nhau không. Thao tác này so sánh toán hạng thứ nhất và thứ hai để kiểm tra xem các toán hạng có bằng nhau không. Sau đó, nó trả về true nếu cả hai toán hạng được so sánh bằng nhau

#!/bin/bash
# Script for equal to numeric comparison
x=2
y=2
if [[ $x -eq $y ]]
   then
       echo "x and y are equal!"
   else
       echo "x and y are not equal!"
fi

Sau khi chúng tôi thực thi tập lệnh, điều kiện trong tập lệnh sẽ đánh giá là đúng và in ra rằng x và y bằng nhau

2. 2. Kiểm tra xem các số không bằng nhau

Chúng tôi cũng sử dụng biểu thức điều kiện, -ne, để xem liệu hai số không bằng nhau. -ne là viết tắt của “không bằng”. Theo cách tương tự, biểu thức này so sánh toán hạng thứ nhất và thứ hai để kiểm tra xem các toán hạng có bằng nhau không

#!/bin/bash
# Script for not equal numeric comparison
x=2
y=3
if [[ $x -ne $y ]]
   then
       echo "x and y are not equal!"
   else
       echo "x and y are equal!"
fi

Biểu thức đánh giá là đúng vì các giá trị trong các biến x và y không bằng nhau

2. 3. Kiểm tra xem số có lớn hơn số khác không

Một biểu thức điều kiện khác mà chúng ta có là -gt. Điều này là viết tắt của "lớn hơn". -gt kiểm tra xem toán hạng thứ nhất có lớn hơn toán hạng thứ hai không. Nó trả về true nếu toán hạng đầu tiên lớn hơn toán hạng thứ hai. Nếu không, nó trả về false

#!/bin/bash
# Script for greater than numeric comparison
x=3
y=1
if [[ $x -gt $y ]]
   then
       echo "x is greater than y!"
   else
       echo "x less than or equal to y!"
fi

Thực thi thành công tập lệnh in ra rằng x lớn hơn y vì biểu thức ước tính là đúng

2. 4. Thêm toán tử

Sau đây là danh sách đầy đủ các biểu thức điều kiện để so sánh số trong cả hai dấu ngoặc vuông đơn và kép

Cú pháp toán tử so sánh
Giải thích
bằng
[[ $x -eq $y ]] hoặc [ $x -eq $y ]          
This returns true if both the integers in comparison are equal.is not equal to[[ $x -ne $y ]] or [ $x -ne $y ]  This evaluates to true if both the integers in comparison are not equal.is greater than[[ $x -gt $y ]] or [ $x -gt $y ]  This returns true if the integer value in the variable x is greater than the integer value in the variable y.is less than[[ $x -lt $y ]] or [ $x -lt $y ]  This returns true if the integer value in the variable x is less than the integer value in the variable y.is greater than or equal to
[[ $x -ge $y ]] hoặc [ $x -ge $y ]  Điều này trả về true nếu giá trị số nguyên trong biến x lớn hơn hoặc bằng . nhỏ hơn hoặc bằng
[[ $x -le $y ]] hoặc [ $x -le $y ]  Điều này trả về true nếu giá trị số nguyên trong biến x nhỏ hơn hoặc bằng .

3. Dấu ngoặc kép

Dấu ngoặc kép là một tính năng số học tích hợp cho trình bao Bash. Nó được sử dụng để thực hiện các phép toán số học số nguyên

Vì dấu ngoặc kép được tích hợp sẵn nên hiệu quả hơn. Tuy nhiên, với sức mạnh tính toán mà chúng ta có hiện nay, sự khác biệt về hiệu năng là không đáng kể

Cú pháp của dấu ngoặc kép là linh hoạt. Chẳng hạn, chúng tôi bao gồm hoặc loại bỏ khoảng cách bên trong dấu ngoặc đơn, nhưng nó vẫn hoạt động như cũ. Trong trường hợp biến, chúng ta không cần thêm $ trước tên biến một cách rõ ràng vì nó không ảnh hưởng đến biểu thức

Hơn nữa, các biểu thức so sánh bên trong dấu ngoặc đơn trả về 1 cho giá trị đúng hoặc 0 cho giá trị sai

3. 1. Kiểm tra xem các số có bằng nhau không

Chúng tôi sử dụng toán tử, ==, để kiểm tra xem các số bên trong dấu ngoặc kép có bằng nhau không. Toán tử so sánh toán hạng thứ nhất và toán hạng thứ hai. Nó trả về 1 cho true và 0 cho false

#!/bin/bash
# Script for equal to numeric comparison
x=1
y=1
if (( $x == $y ))
   then
       echo "x is equal to y!"
   else
       echo "x is not equal to y!"
fi

Biểu thức đánh giá là true vì các giá trị trong cả hai biến x và y đều bằng nhau

3. 2. Kiểm tra xem các số không bằng nhau

Trong ngoặc kép, chúng tôi cũng sử dụng. = toán tử để so sánh các số nếu chúng không bằng nhau. Toán tử so sánh toán hạng bên trái và toán hạng bên phải. Biểu thức đánh giá đúng hoặc sai

#!/bin/bash
# Script for not equal to numeric comparison
x=2
y=1
if (( $x != $y ))
   then
       echo "x is not equal to y!"
   else
       echo "x is equal to y!"
fi

Điều này được đánh giá là đúng vì toán hạng bên trái và bên phải không bằng nhau

3. 3. Thêm toán tử

Bảng sau đây phác thảo danh sách các toán tử so sánh số nguyên cho dấu ngoặc kép

Cú pháp toán tử so sánh
Giải thích
bằng
(( $x == $y ))          
This returns true if both the integers in comparison are equal.is not equal to(( $x != $y ))
Điều này cho kết quả đúng nếu cả hai số nguyên được so sánh không bằng nhau. lớn hơn(( $x > $y ))
Điều này trả về true nếu giá trị nguyên trong biến x lớn hơn giá trị nguyên trong biến y. nhỏ hơn(( $x < $y ))
Điều này trả về true nếu giá trị nguyên trong biến x nhỏ hơn giá trị nguyên trong biến y. lớn hơn hoặc bằng
(( $x >= $y ))Điều này trả về true nếu giá trị nguyên trong biến x lớn hơn hoặc bằng giá trị nguyên trong biến y. nhỏ hơn hoặc bằng
(( $x
Điều này trả về true nếu giá trị số nguyên trong biến x nhỏ hơn hoặc bằng .

4. Phần kết luận

Trong bài viết này, chúng ta đã tìm hiểu về dấu ngoặc vuông và toán tử so sánh dấu ngoặc kép trong Bash. Chúng tôi cũng đã xem xét so sánh các số nguyên trong cả hai trường hợp

tác giả dưới cùng

Nếu bạn có một vài năm kinh nghiệm trong hệ sinh thái Linux và bạn muốn chia sẻ trải nghiệm đó với cộng đồng, hãy xem Nguyên tắc đóng góp của chúng tôi

Làm cách nào để kiểm tra xem kích thước của tệp có lớn hơn một giá trị nhất định trong bash không?

Tốt nhất nên sử dụng lệnh stat và các lệnh khác trong Linux để kiểm tra kích thước tệp . Lệnh stat hiển thị thông tin về tệp bao gồm kích thước của nó. Một tùy chọn khác là sử dụng lệnh wc, lệnh này có thể đếm số byte trong mỗi tệp đã cho.

Làm thế nào để sử dụng lệnh if trong bash?

Câu lệnh if bao gồm từ khóa if, cụm từ điều kiện và từ khóa then . Từ khóa fi được sử dụng ở cuối câu lệnh. LỆNH được thực thi nếu ĐIỀU KIỆN đánh giá là Đúng. Không có gì xảy ra nếu CONDITION trả về Sai; .

Làm cách nào để kiểm tra xem lệnh cuối cùng có thành công trong shell script không?

Sử dụng biến đặc biệt $? . $? . Bằng cách so sánh giá trị đó với giá trị dự kiến, chúng ta có thể kiểm tra xem lệnh đã được thực hiện thành công hay chưa.

có nghĩa là gì. trong bash?

Giống như && ,. là toán tử điều khiển bash. && có nghĩa là thực thi câu lệnh theo sau chỉ khi câu lệnh trước được thực thi thành công (mã thoát trả về 0). . có nghĩa là chỉ thực hiện câu lệnh theo sau nếu câu lệnh trước không thành công (trả về mã thoát khác không).