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 = string2và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ớitest[. - Sử dụng toán tử
==với[[để khớp mẫu.
- Sử dụng toán tử
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.
