首頁 > 軟體

Bash Shell字串比較入門

2020-06-16 16:36:06

在編寫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中的字串。

如果您有任何問題或反饋,請隨時發表評論。


IT145.com E-mail:sddin#qq.com