Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2815

シェルスクリプトの「if」は条件式の「コマンド」の実行結果を判定している

$
0
0
シェルスクリプトで条件式を書く場合、一般的なプログラミング言語と同じように if と記述することで判定処理を行うことができます。 例えば、ホームディレクトリ配下に「 .profile 」が存在するかをチェックする場合はこんな感じです。 if [ -e $HOME/.profile ] ; then echo ".profile is exists" fi つい最近まで「シェルスクリプトの if は test コマンドの実行結果を判定している」という意味がよくわかっていませんでした。 if に記述している条件式はこのようにコマンドラインで直接実行できるということを知り、ようやく理解できました。 if というのは条件式に記述している test コマンドを実行した際の終了ステータスを判定しているんですね。 $ [ -e $HOME/.profile ] $ echo $? 0 [ ] は  test コマンドのエイリアスなので、↑の if の条件式は test コマンドでこのように書き換えることができます。 if test -e $HOME/.profile ; then echo ".profile is exists" fi 当然、コマンドラインでもこのように実行することができます。 $ test -e $HOME/.profile $ echo $? 0 man test を見てみると、「使い方」としてこのような記述があるので、 test と [ ] は同義であることがわかります。 SYNOPSIS test EXPRESSION test [ EXPRESSION ] [ ] [ OPTION もう一点、最近知ったことがあって、 if は test コマンドでしか判定できないわけではなくて、条件式の部分に test 以外のコマンドを記述することも可能だということです。 つまり、このように ls や grep といったコマンドを書くことができます。 if ls $HOME/.profile 1>/dev/null 2>&1 ; then echo ".profile is exists" fi if grep -q 'BASH_VERSION' $HOME/.profile ; then echo "BASH_VERSION found" fi 結論としては、こんな感じですかね。 シェルスクリプトの if は条件式のコマンドを実行した際の終了ステータスを判定している。 シェルスクリプトの if は一般的に test コマンドで判定を行うが、 test 以外のコマンドを利用することも可能。 おまけ man builtins を見ると、 SYNOPSIS に test 、 [ が記載されているので、それぞれBashのビルトインコマンドだということがわかりますが、 SYNOPSIS bash defines the following built-in commands: :, ., [, alias, bg, bind, break, builtin, case, cd, command, compgen, complete, continue, declare, dirs, disown, echo, enable, eval, exec, exit, export, fc, fg, getopts, hash, help, history, if, jobs, kill, let, local, logout, popd, printf, pushd, pwd, read, readonly, return, set, shift, shopt, source, suspend, test, times, trap, type, typeset, ulimit, umask, unalias, unset, until, wait, while. which で見てみると、それぞれ単体のコマンドとしても存在していることがわかります。 /usr/bin/[ ってなんだよって感じですね。 $ which test /usr/bin/test $ which [ /usr/bin/[ 参考URL Man page of TEST if 文と test コマンド シェルスクリプト(bash)のif文とtestコマンド([])自分メモ Bash の if 文(test文)のオプションを整理してみた [Bash] testと[と[[ 【 if 】コマンド――条件が成立したときコマンドを実行する

Viewing all articles
Browse latest Browse all 2815

Trending Articles