【Bash】シェルスクリプトで文字列比較するには?評価演算子を紹介

Linux_文字列評価 オペレーティングシステム

プログラミングをすると頻繁に条件式を使いますよね.
様々な評価式がありますが,文字列同士を比較する機会は多いはずです.

シェルスクリプトでも文字列の比較ができます.

今回はBashを使って文字列を比較する演算子を紹介します.

= 比較する文字列が等しい

文字列が等しいことを確かめるときは = を使います.

str1 = str2

文字列と = の間はそれぞれスペースを空けましょう.

サンプルコード

引数が月曜日であればベンチプレスと表示するコードを作成しました.

文字列を比較して条件式がTRUEのとき|クリックして拡大できます
day=$1
if [ $day = '月曜日' ];then
    echo 'ベンチプレス'
fi 

条件式が一致しているのでベンチプレスと表示されました.

月曜日以外を入れると表示されないことも確かめておきましょう.

文字列を比較して条件式がFALSEのとき|クリックして拡大できます

日曜日では表示されません.
評価演算子が正しく処理されていることが分かりました.

!= 比較する文字列が等しくない

文字列が等しくないことを判定したいときは != を使います.
! は反対という意味があります.

str1 != str2

さきほどと同じように文字列と = の間は1つスペースを空けましょう.

サンプルコード

引数が月曜日でなければベンチプレスと表示します.

文字列を比較して条件式がFALSEのとき|クリックして拡大できます
day=$1
if [ $day != '月曜日' ];then
    echo 'ベンチプレス'
fi 

月曜日以外であればベンチプレスと表示したいので正しく処理されていそうです.

-z 文字列が空文字どうか確かめる

文字列が空文字かどうか確かめる場合は -z を使います.

-z str1

空文字を判定するときプログラミングでは -z を使わないので少し戸惑うかもしれません.

サンプルコード

引数がないときにベンチプレスと表示します.

変数が空で条件機がTRUEのとき|クリックして拡大できます
day=$1
if [ -z $day ];then 
    echo 'ベンチプレス'
fi 

なにか引数を渡すと空文字でなくなるため表示されません.

変数が文字列が入り条件機がFALSEのとき|クリックして拡大できます

-n 文字列が空文字でないと確かめる

文字列が空文字でないことを確かめるときは -n を使います.

-n str1

文字列になにか値が入っていれば条件式は真となります.

サンプルコード

引数を渡すと空文字でなくなるため,ベンチプレスと表示されます.

変数に文字列が入り条件機がTRUEのとき|クリックして拡大できます
day=$1
if [ -n $day ];then 
    echo 'ベンチプレス'
fi 

まとめ

今回はシェルスクリプトの文字列に関する評価演算子を紹介しました.

文字列を比較する演算子はプログラミング言語と変わらないので覚えやすかったですね.

空文字を判定する演算子は初めて見ると戸惑うかもしれません.
私も初めて見たときはただのオプションとしか認知せず処理の意味をスルーしていました.

  • -z:空文字かどうかを判定する(空文字であれば真)
  • -n:空文字でないか判定する(空文字でなければ真)

特徴的な演算子だからこそ1度覚えると忘れないことでしょう!