GNU/Linux >> Linux の 問題 >  >> Linux

Bashで文字列を比較する方法

Bashスクリプトを作成するときは、2つの文字列を比較して、それらが等しいかどうかを確認する必要があります。 2つの文字列は、同じ長さで同じ文字シーケンスが含まれている場合は同じです。

このチュートリアルでは、Bashで文字列を比較する方法について説明します。

比較演算子#

比較演算子は、値を比較してtrueまたはfalseを返す演算子です。 Bashで文字列を比較するときは、次の演算子を使用できます。

  • string1 =string2 およびstring1==string2 -オペランドが等しい場合、等式演算子はtrueを返します。
    • =を使用します testの演算子 [ コマンド。
    • ==を使用します [[を使用した演算子 パターンマッチングのコマンド。
  • string1!=string2 -オペランドが等しくない場合、不等演算子はtrueを返します。
  • string1 =〜regex -左のオペランドが右の拡張正規表現と一致する場合、regex演算子はtrueを返します。
  • string1> string2 -大なり記号演算子は、左のオペランドが辞書式(アルファベット順)でソートされた右のオペランドよりも大きい場合にtrueを返します。
  • string1 -右のオペランドが辞書式(アルファベット順)でソートされた右よりも大きい場合、lessよりも演算子はtrueを返します。
  • -z文字列 -文字列の長さがゼロの場合はTrue。
  • -n文字列 -文字列の長さがゼロ以外の場合はTrue。

文字列を比較する際の注意点は次のとおりです。

  • 二項演算子とオペランドの間には空白を使用する必要があります。
  • 単語の分割やグロブの問題を回避するために、変数名は常に二重引用符で囲んでください。
  • Bashは変数を「型」で分離せず、変数はコンテキストに応じて整数または文字列として扱われます。

2つの文字列が等しいかどうかを確認します#

ほとんどの場合、文字列を比較するときは、文字列が等しいかどうかを確認する必要があります。

次のスクリプトは、ifステートメントとテスト[を使用します 文字列が=と等しいかどうかを確認するコマンド 演算子:

#!/bin/bash

VAR1="Linuxize"
VAR2="Linuxize"

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

スクリプトを実行すると、次の出力が出力されます。

Strings are equal.

これは、ユーザーからの入力を受け取り、指定された文字列を比較する別のスクリプトです。この例では、[[を使用します コマンドと== オペレーター。

#!/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

スクリプトを実行し、プロンプトが表示されたら文字列を入力します:

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

論理および&&を使用することもできます およびまたは|| 文字列を比較するには:

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

文字列に部分文字列が含まれているかどうかを確認します#

文字列に部分文字列が含まれているかどうかを確認する方法は複数あります。

1つのアプローチは、サブストリングをアスタリスク記号で囲む *を使用することです。 つまり、すべての文字に一致します。

#!/bin/bash

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

スクリプトは次のようにエコーします:

It's there.

別のオプションは、正規表現演算子 =〜を使用することです。 以下に示すように:

#!/bin/bash

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

アスタリスクが続くピリオド。* 改行文字を除くすべての文字の0回以上の出現に一致します。

文字列が空かどうかを確認します#

多くの場合、変数が空の文字列であるかどうかも確認する必要があります。これは、 -nを使用して行うことができます および-z 演算子。

#!/bin/bash

VAR=''
if [[ -z $VAR ]]; then
  echo "String is empty."
fi
String is empty.
#!/bin/bash

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

文字列とケース演算子の比較#

テスト演算子を使用する代わりに、caseステートメントを使用して文字列を比較することもできます。

#!/bin/bash

VAR="Arch Linux"

case $VAR in

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

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

辞書式比較#

辞書式比較は、文字列内の文字を左から右に順番に比較することにより、2つの文字列をアルファベット順に比較する操作です。この種の比較はめったに使用されません。

次のスクリプトは、2つの文字列を辞書式に比較します。

#!/bin/bash

VAR1="Linuxize"
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

スクリプトは次を出力します:

Ubuntu is lexicographically greater than Linuxize.

結論#

文字列の比較は、Bashスクリプトで最も基本的で頻繁に使用される操作の1つです。このチュートリアルを読んだ後は、Bashで文字列を比較する方法をよく理解しているはずです。文字列の連結に関するガイドも確認できます。

ご質問やご意見がございましたら、お気軽にコメントをお寄せください。


Linux
  1. LinuxでBashプロンプトを短縮する方法は?

  2. バッシュを検出する方法>=4.0?

  3. Bashシェルスクリプトで文字列を比較する方法

  1. Bash履歴コマンドの使用方法

  2. Bashで文字列を数値として評価する方法

  3. Bashでドット区切りバージョン形式の2つの文字列を比較するには?

  1. Bashでループを作成する方法

  2. Linuxシェルスクリプトで数値と文字列を比較する方法

  3. Bashスクリプトをデバッグする方法は?