2021-05-12 14:32:11
Bash Shell字串比較入門
在編寫Bash指令碼時,您通常需要比較兩個字串以檢查它們是否相等。 當兩個字串具有相同的長度並且包含相同的字元序列時,它們是相等的。
本教學描述了如何比較Bash中的字串。
比較運算子
比較運算子是比較值並返回true或false的運算子。 在比較Bash中的字串時,您可以使用以下運算子:
string1 = string2
和string1 == string2
- 相等運算子,如果字串相等,則返回true。- 將=運算子與test [命令一起使用。
- 將==運算子與[[模式匹配命令]一起使用。
string1 != string2
- 不等式運算子,如果字串不相等,則返回true。string1 =~ regex
- 正規表示式運算子,如果左邊字串數與右側的擴充套件正規表示式匹配,則返回true。string1 > string2
- 大於運算子,按字典順序(字母順序)排序,如果左邊字串大於右邊字串,則返回true。string1 < string2
- 小於運算子,按字典順序(字母順序)排序,如果右邊邊字串大於左邊字串,則返回true。-z string
- 如果字串長度為零,則為True。-n string
- 如果字串長度不為零,則為True。
以下是比較字串時需要注意的幾點:
- 必須在二元運算子和運算元之間使用空格。
- 始終在變數名稱周圍使用雙引號以避免任何單詞拆分或通配問題。
- Bash不按“型別”隔離變數,變數根據上下文被視為整數或字串。
檢查兩個字串是否相等
在大多數情況下,在比較字串時,您需要檢查字串是否相等。
以下指令碼使用test [命令檢查字串是否與=運算子相等:
#!/bin/bash
VAR1="Linuxidc.com"
VAR2="Linuxidc.com"
if [ "$VAR1" = "$VAR2" ]; then
echo "字串是相等的。"
else
echo "字串是不相等的。"
fi
執行指令碼時,它將列印以下輸出。
linuxidc@linuxidc:~/linuxidc.com$ ./linuxidc.com.sh
字串是相等的。
這是另一個指令碼,它接受使用者的輸入並比較給定的字串。 在這個例子中,我們將使用[[command and == operator]。
再輸入字串
請輸入第一二個字串
#!/bin/bash
read -p "請輸入第一個字串: " VAR1
read -p "請輸入第二個字串: " VAR2
if [[ "$VAR1" == "$VAR2" ]]; then
echo "字串是相等的。"
else
echo "字串是不相等的。"
fi
執行指令碼並在提示時輸入字串:
linuxidc@linuxidc:~/linuxidc.com$ ./linuxidc.com.sh
請輸入第一個字串: www.linuxidc.com
請輸入第二個字串: linuxidc.com
字串是不相等的。
您還可以使用邏輯和&&和或|| 比較字串:
[[ "string1" == "string2" ]] && echo "linuxidc.com" || echo "linuxidc"
linuxidc
檢查String是否包含子字串
有多種方法可以檢查字串是否包含子字串。
一種方法是使用星號符號*來環繞子串,這意味著匹配所有字元。
#!/bin/bash
VAR='GNU/Linux 是一個作業系統'
if [[ $VAR == *"Linux"* ]]; then
echo "它在那裡。"
fi
該指令碼將回顯以下內容:
它在那裡。
另一種選擇是使用正規表示式運算子=?,如下所示:
#!/bin/bash
VAR='GNU/Linux 是一個作業系統'
if [[ $VAR =~ .*Linux.* ]]; then
echo "它在那裡。"
fi
後跟星號.*的句點匹配除了換行符之外的任何字元零次或多次出現。
檢查String是否為空
通常,您還需要檢查變數是否為空字串。 您可以使用-n和-z運算子來完成此操作
#!/bin/bash
VAR=''
if [[ -z $VAR ]]; then
echo "字串為空。"
fi
輸出:
字串為空。
#!/bin/bash
VAR=='linuxidc.com'
if [[ -n $VAR ]]; then
echo "字串不為空。"
fi
輸出:
字串不為空。
使用ase操作符比較字串
您也可以使用case語句來比較字串,而不是使用測試運算子:
#!/bin/bash
VAR="Arch Linux"
case $VAR in
"Arch Linux")
echo -n -e "Linuxidc 匹配n"
;;
Fedora | CentOS)
echo -n "Red Hat"
;;
esac
輸出:
Linuxidc 匹配
字典比較
詞法比較是通過從左到右順序比較字串中的字元,按字母順序比較兩個字串的操作。這種比較很少使用。
下面的指令碼從詞彙上比較了兩個字串:
#! /bin/bash
value1=linuxidc
value2=linuxidc.com
if [ $value1 > $value2 ]
then
echo "$value1 大於 $value2"
elif [ $value1 < $value2 ]
then
echo "$value1 小於 $value2"
else
echo "$value1 等於 $value2"
fi
該指令碼將輸出以下內容:
linuxidc 小於 linuxidc.com
總結
比較字串是Bash指令碼中最基本和最常用的操作之一。 閱讀本教學後,您應該很好地理解如何比較Bash中的字串。
如果您有任何問題或反饋,請隨時發表評論。
相關文章