5.1.4. シェルのif文やfor文/if and for statements in shell

5.1.4.1. シェルのif文/if statements of the shell

シェルのif文は次のような構文をしています:

IF statements for the shell looks like this

if [ -f $HOME/.bashrc ]
then
    source $HOME/.bashrc
fi

この if 文は、$HOME/.bashrcというファイルが存在するか?という条件を判定しています。

if, then, fi がキーワードです。 開きブラケット “[” は、キーワードや特殊な記号ではなくて、コマンドで、ブラケットコマンドと呼びます。 “[“がコマンド名で、その引数は “-f”,”$HOME/.bashrc”,”]”です。

ブラケットコマンドは、”]” までの間に書かれた引数からなる条件式を評価して、 「真」なら正常終了(終了ステータス0)「偽」ならばエラー終了(終了ステータス1)します。 if は、コマンドの終了ステータスを見て、正常終了ならば then の中身を実行します。 つまり、条件式が真であれば、thenの中身を実行します。

上の例に登場する”-f パス名” の -f は、ファイルの存在を調べる演算子で、 これに続くパス名がファイルとして存在すれば、「真」になります。

This if statement checks whether if the file $HOME/.bashrc exists or not.

“if”, “then”, “fi” are keywords. The open bracket “[” is not a keyword or some special symbol. It is a command; the bracket command.

The bracket command tests the condition expression written upto the closing bracket “]”, and if the condition is true, the command will exit with a success status (exit status 0). If the condition is false, then the command will exit with an error status (exit status 1). The “if” statement checks the exit status of the command, and when the status is a success, the commands inside the “then” clause will be executed.

シェルでは改行が区切りとしての意味を持つので、C++言語のように行を単純につなぐと構文エラーになります。 複数の行に書いてあるものを一行にまとめて書くには、区切りとして “;” を書きます。

In shell syntax, the end of line has a meaning as a separator, so if you join multiple lines into a single line, you will get a syntax error. To join multiple lines, you can use the semicolon “;” as a separator.

セミコロンを使うと先程の例は、次のように書くこともできます

Using semicolons, the previous example could be written like this:

if [ -f $HOME/.bashrc ] ; then ; source $HOME/.bashrc ; fi

if文全部をこのように一行にまとめると見にくくなるので、実際には次のスタイルがよく用いられます。

Putting an entire if statement in one line like this often makes it hard to read. In practice, the following style is often used:

if [ -f $HOME/.bashrc ]; then
    source $HOME/.bashrc
fi

See also

if文についての正式なドキュメントはこちらを参照:

For the official documentation of if statements see:

“[“コマンドについて知りたければ、こちらを参照:

If you are curious about the bracket command, see:

5.1.4.2. シェルのfor文/for statements of the shell