Khi viết các tập lệnh Bash, bạn thường cần so sánh hai chuỗi để kiểm tra xem chúng có bằng nhau hay không. Hai chuỗi bằng nhau khi chúng có cùng độ dài và chứa cùng một dãy ký tự.

Hướng dẫn này mô tả cách so sánh các chuỗi trong Bash.

Toán tử so sánh

Toán tử so sánh là toán tử so sánh các giá trị và trả về true hoặc false. Khi so sánh các chuỗi trong Bash, bạn có thể sử dụng các toán tử sau:

  • string1 = string2 và string1 == string2 – Toán tử bình đẳng trả về true nếu các toán hạng bằng nhau.
    • Sử dụng toán tử = với test [.
    • Sử dụng toán tử == với [[ để khớp mẫu.
  • string1 != string2 – Toán tử bất đẳng thức trả về true nếu các toán hạng không bằng nhau.
  • string1 =~ regex– Toán tử regex trả về true nếu toán hạng bên trái khớp với biểu thức chính quy mở rộng ở bên phải.
  • string1 > string2 – Toán tử lớn hơn trả về true nếu toán hạng bên trái lớn hơn toán hạng bên phải được sắp xếp theo thứ tự từ vựng (bảng chữ cái).
  • string1 < string2 – Toán tử nhỏ hơn trả về true nếu toán hạng bên phải lớn hơn bên phải được sắp xếp theo thứ tự từ vựng (theo bảng chữ cái).
  • -z string – Đúng nếu độ dài chuỗi bằng 0.
  • -n string – Đúng nếu độ dài chuỗi khác 0.

Sau đây là một số điểm cần lưu ý khi so sánh các chuỗi:

  • Một khoảng trống phải được sử dụng giữa toán tử nhị phân và các toán hạng.
  • Luôn sử dụng dấu ngoặc kép xung quanh tên biến để tránh bất kỳ vấn đề tách từ hoặc lặp lại.
  • Bash không phân tách các biến theo “kiểu”, các biến được coi là số nguyên hoặc chuỗi tùy thuộc vào ngữ cảnh.

Kiểm tra xem hai chuỗi có bằng nhau không

Trong hầu hết các trường hợp, khi so sánh các chuỗi, bạn muốn kiểm tra xem các chuỗi có bằng nhau hay không.

Tập lệnh sau sử dụng câu lệnh if và [ để kiểm tra xem các chuỗi có bằng nhau hay không với toán tử =:

#!/bin/bash

VAR1="Hocdevops"
VAR2="Hocdevops"

if [ "$VAR1" = "$VAR2" ]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

Khi script được thực thi, nó sẽ in ra kết quả sau.

Strings are equal.

Đây là một tập lệnh khác lấy đầu vào từ người dùng và so sánh các chuỗi đã cho. Trong ví dụ này, chúng ta sẽ sử dụng [[ và toán tử ==.

#!/bin/bash

read -p "Enter first string: " VAR1
read -p "Enter second string: " VAR2

if [[ "$VAR1" == "$VAR2" ]]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

Chạy tập lệnh và nhập các chuỗi khi được nhắc:

Enter first string: Hocdevops
Enter second string: Ubuntu
Strings are not equal.

Bạn cũng có thể sử dụng logic và && và hoặc || để so sánh các chuỗi:

[[ "string1" == "string2" ]] && echo "Equal" || echo "Not equal"

Output:

Not equal

Kiểm tra xem một chuỗi có chứa một chuỗi con không

Có nhiều cách để kiểm tra xem một chuỗi có chứa chuỗi con hay không.

Một cách tiếp cận là sử dụng bao quanh chuỗi con bằng các biểu tượng dấu hoa thị *có nghĩa là khớp với tất cả các ký tự.

#!/bin/bash

VAR='GNU/Linux is an operating system'
if [[ $VAR == *"Linux"* ]]; then
  echo "It's there."
fi

Sao chép

Tập lệnh sẽ lặp lại như sau:

It's there.

Một tùy chọn khác là sử dụng toán tử regex =~ như hình dưới đây:

#!/bin/bash

VAR='GNU/Linux is an operating system'
if [[ $VAR =~ .*Linux.* ]]; then
  echo "It's there."
fi

Dấu chấm theo sau dấu hoa thị .*khớp với không hoặc nhiều lần xuất hiện bất kỳ ký tự nào ngoại trừ ký tự dòng mới.

Kiểm tra xem một chuỗi có trống không

Thông thường, bạn cũng sẽ cần phải kiểm tra xem một biến có phải là một chuỗi rỗng hay không. Bạn có thể làm điều này bằng cách sử dụng toán tử -n và -z.

#!/bin/bash

VAR=''
if [[ -z $VAR ]]; then
  echo "String is empty."
fi

Output:

String is empty.
#!/bin/bash

VAR='Hocdevops'
if [[ -n $VAR ]]; then
  echo "String is not empty."
fi

Output:

String is not empty.

So sánh chuỗi với toán tử trường hợp

Thay vì sử dụng các toán tử kiểm tra, bạn cũng có thể sử dụng câu lệnh trường hợp để so sánh các chuỗi:

#!/bin/bash

VAR="Arch Linux"

case $VAR in

  "Arch Linux")
    echo -n "Hocdevops matched"
    ;;

  Fedora | CentOS)
    echo -n "Red Hat"
    ;;
esac

Output:

Hocdevops matched.

So sánh từ vựng

So sánh từ vựng là một phép toán trong đó hai chuỗi được so sánh theo thứ tự bảng chữ cái bằng cách so sánh các ký tự trong chuỗi theo thứ tự từ trái sang phải. Kiểu so sánh này hiếm khi được sử dụng.

Các đoạn mã sau đây so sánh hai chuỗi về mặt từ vựng:

#!/bin/bash

VAR1="Hocdevops"
VAR2="Ubuntu"

if [[ "$VAR1" > "$VAR2" ]]; then
    echo "${VAR1} is lexicographically greater then ${VAR2}."
elif [[ "$VAR1" < "$VAR2" ]]; then
    echo "${VAR2} is lexicographically greater than ${VAR1}."
else
    echo "Strings are equal"
fi

Tập lệnh sẽ xuất như sau:

Ubuntu is lexicographically greater than Hocdevops.

Phần kết luận

So sánh chuỗi là một trong những thao tác cơ bản và được sử dụng thường xuyên nhất trong Bash scripting. Sau khi đọc hướng dẫn này, bạn sẽ hiểu rõ về cách so sánh các chuỗi trong Bash. Bạn cũng có thể xem hướng dẫn của chúng tôi về cách nối chuỗi .

Nếu bạn có bất kỳ câu hỏi hoặc phản hồi nào, hãy để lại bình luận.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments