シェルスクリプトで変数が空文字であるか調べる

2022-03-23

シェルスクリプトで変数が空かどうかを調べる

シェルスクリプトで変数に値が入っているか調べるには、testコマンドやif分で変数の値を比較して調べることができます。

testコマンドで変数が空文字であるか調べる

testコマンドで「-n」を使えば、変数に値が入っているかを判断して、値が入っていると「真」を返します。
変数に値が入っている場合に、処理をしたい場合は以下のようになります

#!/bin/bash

str="123"

if [ -n "$str" ]; then
  echo "str: $str に値が入っています"
else
  echo "str は値は入っていません"
fi

$ sh test.sh
str: 123 の値が入っています

変数に値が入っていない場合は、「偽」となり以下のようになります

#!/bin/bash

str=""

if [ -n "$str" ]; then
  echo "str: $str の値が入っています"
else
  echo "str は値は入っていません"
fi

$ sh test.sh
str は値は入っていません

変数に値が入っていない場合に処理を実行したい場合は、「-z」を使えば変数が空の場合の処理ができます

#!/bin/bash

str=""

if [ -z "$str" ]; then
  echo "str に値は入っていません"
else
  echo "str: $str の値が入っています"
fi


$ sh test.sh
str に値は入っていません

if分で変数が空文字かどうか判定する

if分の方が見た感じでは分かりやすいような気がします、変数の値の空白かどうかを「"$str" = “"」で比較して処理します
変数に値が入っていない場合に処理をしたい場合は、以下となります

#!/bin/bash

str=""

if [ "$str" = "" ]; then
  echo "str に値は入っていません"
else
  echo "str: $str の値が入っています"
fi

$ sh test.sh
str に値は入っていません

また、変数に値が入っている場合に処理をしたい場合は、以下となります

$ cat test.sh 
#!/bin/bash

str="test"

if [ "$str" != "" ]; then
  echo "str: $str の値が入っています"
else
  echo "str に値は入っていません"
fi

$ sh test.sh
str: test の値が入っています