シェルスクリプトで変数が空文字列かを判断する

こんにちは、さるまりんです。

今回はシェルです。シェルスクリプトです。

文字列が空かどうかで処理を切り替えるスクリプトを書く必要があったのでメモです。

空文字列かどうかをテストするには-zを使います。

反対に空文字列ではないテストをするには-nを使います。

簡単にプログラムにしてみました。

checkifempty.sh

#!/bin/sh
  
PARAM=$1

echo "[$PARAM]"

if [ -z "$PARAM" ]; then
   # 変数PARAMが空文字列の時
   echo nothing given
fi
if [ -n "$PARAM" ]; then
   # 変数PARAMが空文字列じゃない時
   echo some string given
fi

まずはPARAM=$1でコマンドライン引数の1つ目を変数PARAMに代入します。

そして空文字列かのテストです。

if [ -z $PARAM ]; then

上の条件はPARAMの持つ文字列が空文字列(長さが0)のときに真と評価され、if文内が実行されます。

if [ -n $PARAM ]; then

反対にこちらの条件ではPARAMの文字列の長さが1以上の時に真と評価され、if文内が実行されます。

実行例です。

$ ./checkifempty.sh abc
[abc]
some string given
$ ./checkifempty.sh   
[]
nothing given

スクリプトにabcの文字列を与えて実行したときはsome string givenが表示されて、何も与えず実行したときはnothing givenが表示されています。

ifだけでなくelseにも対応することで、テストはひとつにすることもできます

if [ -z "$PARAM" ]; then
   echo nothing given
else
   echo some string given
fi

! を使って結果を否定することもできます。

if [ ! -z "$PARAM" ]; then
   echo some string given
fi

同じことをするのでもいろんな方法がありますね。

読んでくださってありがとうございます。

それではまた!