いつもなんとなく使ってて、あれどうだっけと検索して
if 文と test コマンド - UNIX & Linux コマンド・シェルスクリプト リファレンス
このページにたどり着いて「ああそうだった」となるので、自分でまとめておく。
条件判定にはよく"test"コマンドを使う。testは与えられた条件式の評価結果に応じて0もしくは1を返すコマンド。ファイル形式やパーミッションを判定に使うことができる(man test)が、単純にファイルの存在をみる-eオプションで例を書く。
$ test -e /etc/init.d/syslog-ng; echo $?
0
$ test -e /etc/init.d/hahahaha; echo $?
1
$?の中に直前のtestコマンドのステータスコードが入ってる。
そして、[と]はtestコマンドのaliasである。
$ [ -e /etc/init.d/syslog-ng ]; echo $?
0
$ [ -e /etc/init.d/hahahaha ]; echo $?
1
[と]はコマンドなのでスペースを空けないといけない。
$ [-e /etc/init.d/syslog-ng]; echo $?
-bash: [-e: コマンドが見つかりません
127
if文と組み合わせる
$ if true ; then echo "ok"; else echo "ng"; fi
ok
$ if false ; then echo "ok"; else echo "ng"; fi
ng
true/falseはそれぞれ終了ステータスとして0/1を返す"だけ"のコマンド。
$ if [ -e /etc/init.d/syslog-ng ] ; then echo "ok"; else echo "ng"; fi
ok
$ if [ -e /etc/init.d/hahaha ] ; then echo "ok"; else echo "ng"; fi
ng