takau-0celtis’s diary

大学1年留年→卒業後ニート→2年フリーター→25歳ニート就活→25歳ニートIT企業に就職

シェルスクリプト〜if文で引数の有無判別

if文がなんか上手く動かなかったのだが解決した。

原因はシンプルにスペースのシンタックスエラー。バッチファイルもめんどいなぁと思ったがシェルスクリプトも中々めんどいな…

やりたかったことは第一引数がある時とない時の出力結果の条件分け。
if文の初歩。
以下、解決した手順。


  • 動かなかった例
if[-z $1]; then

おわかり頂けるだろうか…スペースを極限まで詰めていることが。
私はどの言語でもスペースを詰めて書くことに拘っていたのが、それが裏目に出た瞬間である。これはシェルスクリプトではシンタックスエラーとして扱われる

  • 動いたわ
if [ -z $1 ]; then

"if"と"["の間にスペース、
"["と演算子"-z"の間にスペース、
もちろん演算子"-z"と変数"$1"の間にはスペース(これは納得できる)、
変数"$1"と"]"の間にスペース…

これが正当な書式である。めんどくさいw
エラーも何言ってるかよくわからないし、つまずくかもって言われた理由が少しだけわかった。



以下、完成文。

  • こんな感じ
#!/bin/sh

if [ -z $1 ]; then
    echo "引数がありません"
    exit 99
fi

echo "入力された引数は$1です"

elseを使わない理由は、ネストすることを想定すると見づらくなっちゃうからみたい。
引数貰わなかったら特に何もしないプログラムなら、最初の方に判定して貰わないなら即終了させりゃええやんって先輩に言われた。
exitの戻り値はなんでもいいけど、現場で指定される場合があるんだって。
演算子は"-z"使うか"!"使うかは違いがわからないからとりあえずはスルーする。