シェルプログラミング - 引数が無い場合
あらためて…
引数の取得
$ cat ./01.sh
echo 0-$0
echo 1-$1
echo 2-$2
echo 3-$3
$ ./01.sh
0-./01.sh
1-
2-
3-
$ ./01.sh AAA BBB
0-./01.sh
1-AAA
2-BBB
引数がない場合 多分やり方が間違ってる ← やっぱあり
引数が与えられなかった場合は何になるのか?
$ cat ./03.sh
echo 0-$0
if [ $1 = "" ]
then
echo "S1 is NULL?"
elif [ $1 = "AAA" ]
then
echo "S1 is AAA"
else
echo "$1="$1
fi
if [ $2 = "" ]
then
echo "S2 is NULL?"
else
echo "$2="$2
fi
if [ $3 = "" ]
then
echo "S3 is NULL?"
else
echo "$3="$3
fi
エラーになりました。
$ ./03.sh AAA1 BCB
0-./03.sh
AAA1=AAA1
BCB=BCB
./03.sh: line 23: [: =: unary operator expected
=
原因は引数がない場合の比較になります。
これでエラーになる場合はどうしたらいいんだろう?
一回変数に入れ込めばいいのかなぁ
【NG】以下のようにしても同じエラーがでます。
変数の比較方法はあってるんだけど…
PARAM3=$3
if [ ${PARAM3} = "" ]
then
echo "S3 is NULL?"
else
echo "$3="$3
fi
以下のようにすればやりたいことが出来ました。
これは正しいのだろうか?
「"」で囲って文字列になるので、その時に""になるってことなのかな。
$ cat ./03.sh
echo 0-$0
if [ $1 = "" ]
then
echo "S1 is NULL?"
elif [ $1 = "AAA" ]
then
echo "S1 is AAA"
else
echo "$1="$1
fi
if [ $2 = "" ]
then
echo "S2 is NULL?"
else
echo "$2="$2
fi
PARAM3=$3
if [ "${PARAM3}" = "" ]
then
echo "S3 is NULL?"
else
echo "$3="$3
fi
$ ./03.sh AAA1 BCB
0-./03.sh
AAA1=AAA1
BCB=BCB
S3 is NULL?
引数がない場合 もう一度確認
【確認】変数に文字列がある場合の比較は
VAL1="Hello"
if [ ${VAL1}="Hello" ]
then
echo VAL1 is '"Hello"'
else
echo VAL1=${VAL1}
fi
-----OUTPUT-----
VAL1 is "Hello"
【確認】変数を空文字にしてみる
VAL2=""
if [ ${VAL2}="" ]
then
echo VAL2 is '""'
else
echo VAL2=${VAL2}
fi
-----OUTPUT -----
VAL2 is ""
【NG】引数が無い場合
よく考えたら「引数無し」を空文字と比べていること自体おかしいきがしてきた
if [ $1 = "" ]
then
echo PARAM1 is NULL?
else
echo PARAM1=$1
fi
-----OUTPUT -----
$ ./03.sh
./03.sh: line 1: [: =: unary operator expected
PARAM1=
とりあえず進みます。
【NG】一旦変数に入れても結果は同じ
PARAM1=$1
if [ ${PARAM1} = "" ]
then
echo PARAM1 is NULL?
else
echo PARAM1=$1
fi
$ ./03.sh
./03.sh: line 3: [: =: unary operator expected
PARAM1=
【OKだけど】「"」で囲って文字列にしてみる。
これで意図したことが出来ましたが…いいんだろうか?
PARAM1=$1
if [ "${PARAM1}" = "" ]
then
echo PARAM1 is NULL?
else
echo PARAM1=$1
fi
-----OUTPUT -----
$ ./03.sh
PARAM1 is NULL?
少し立ち戻ってエラーの原因を調べます。「unary operator expected」で調べてみると結構見つかります。
「"」で囲うということは? こちらも調べます。
以下のページわかりやすいし勉強になります。
このあたりも、ふわっとしたままだったな。
となると、この書き方も正解だな
引数の場合は別の方法があり、これが正解
引数が無い場合のチェックについてしらべると…
いろいろ見つかりました。
やっぱり、定形がありました。
引数の場合は以下が正解らしいです。
そもそも、引数の数を確認するのが先かもしれませんが…
# パラメータ1が空文字か判定
if [ -z "${1}" ]; then
echo "blank"
else
echo "param1 = ${1}"
fi
----OUTPUT -----
blank
この記事が気に入ったらサポートをしてみませんか?