Linuxの「[ ]」とは?testコマンド条件式を初心者向けにわかりやすく解説【bash・zsh・シェルスクリプト入門】
生徒
「Linuxのシェルスクリプトでよく見る [ ] って何ですか?」
先生
「それは条件をチェックするための書き方で、実は test コマンドなんです。」
生徒
「えっ、コマンドなんですか?記号だと思ってました!」
先生
「見た目は記号ですが、中身はコマンドです。ファイルの存在確認や文字列比較などでよく使います。」
生徒
「シェルスクリプトを書くなら必須ですか?」
先生
「はい、とても重要です。基本からゆっくり覚えていきましょう。」
1. Linuxの「[ ]」とは?testコマンドの基本
Linuxの「[ ]」は、条件式を評価するための書き方で、正式には test コマンドの別の表現です。読み方はtest(テスト)コマンドといいます。
つまり、次の2つは同じ意味になります。
test 1 -eq 1
true
[ 1 -eq 1 ]
true
Linuxのシェルであるbash(バッシュ)やzsh(ゼットシェル)では、このように条件判定を行い、処理を分岐させることができます。プログラミングでいうif文の条件に使われる重要な機能です。
2. なぜ「[ ]」が使われるのか
初心者の方は、なぜわざわざ角括弧を使うのか疑問に思うかもしれません。これはシェルスクリプトを読みやすくするための工夫です。
例えば、条件式が長くなったときに [ ] で囲むことで、どこが条件なのか一目で分かります。また、他のプログラミング言語と似た見た目になるため、理解しやすくなります。
ただし注意点として、角括弧の前後には必ずスペースが必要です。これを忘れるとエラーになります。
3. 数値比較の条件式
Linuxのtestコマンドでは、数値の比較ができます。よく使う比較演算子は次の通りです。
- -eq 等しい
- -ne 等しくない
- -gt より大きい
- -lt より小さい
a=10
if [ $a -gt 5 ]; then
echo "5より大きい"
fi
5より大きい
このように数値を比較して条件分岐することで、処理を柔軟に変えることができます。Linuxのシェルスクリプトでは非常によく使われる基本操作です。
4. 文字列比較の条件式
文字列の比較も簡単に行えます。文字列とはテキストのことです。
name="linux"
if [ "$name" = "linux" ]; then
echo "一致しました"
fi
一致しました
文字列を扱うときは、ダブルクォーテーションで囲むのがポイントです。これにより空白や特殊文字があっても安全に比較できます。
5. ファイルの存在チェック
Linuxのtestコマンドは、ファイルの状態を確認するのにも使われます。例えば、ファイルが存在するかどうかをチェックできます。
if [ -f test.txt ]; then
echo "ファイルが存在します"
fi
ファイルが存在します
主なオプションは以下の通りです。
- -f 通常ファイルか確認
- -d ディレクトリか確認
- -e 存在するか確認
シェルスクリプトでは、ファイルの有無によって処理を変えることが多いため、非常に重要な使い方です。
6. 論理演算子で条件を組み合わせる
複数の条件を組み合わせることもできます。これを論理演算といいます。
a=10
if [ $a -gt 5 ] && [ $a -lt 20 ]; then
echo "範囲内です"
fi
範囲内です
よく使う論理演算子は次の通りです。
- && かつ
- || または
これにより、より複雑な条件を作ることができます。
7. 「[[ ]]」との違い
Linuxでは [ ] の他に [[ ]] という書き方もあります。これはbashやzshで使える拡張機能です。
[[ ]] の方がエラーになりにくく、安全に条件を書けるため、最近はこちらがよく使われます。
name="linux"
if [[ $name == linux ]]; then
echo "OK"
fi
OK
初心者の方はまず [ ] を理解し、その後に [[ ]] を覚えるとスムーズです。
8. よくあるエラーと注意点
初心者がつまずきやすいポイントを紹介します。
- スペースを忘れるとエラーになる
- 変数はダブルクォーテーションで囲む
- 条件式の書き方を間違えやすい
# NG例
if [ $a-gt 5 ]; then
echo "エラー"
fi
bash: [: missing `]'
このようなエラーはスペース不足が原因です。Linuxコマンドはスペースが非常に重要なので注意しましょう。
まとめ
Linuxのシェルスクリプトにおける角括弧は、単なる記号ではなく、条件判定を行うための重要な仕組みであり、testコマンドの別表現として機能します。bashやzshといったシェル環境では、この書き方を用いることで、数値比較や文字列比較、さらにはファイルの存在確認など、多くの処理を柔軟に制御することができます。特にLinux初心者やシェルスクリプト入門者にとっては、この角括弧の理解が基本であり、ここをしっかりと押さえることで、より高度なスクリプト作成へとステップアップすることが可能になります。
まず基本として押さえておきたいのは、角括弧はtestコマンドと同じ意味を持つという点です。つまり、条件式を評価し、その結果によって処理の分岐を行う役割を担っています。例えばif文と組み合わせることで、条件に応じた処理を実現できます。このような条件分岐は、プログラミングにおいて非常に重要な概念であり、Linuxのシェルスクリプトでも頻繁に利用されます。
また、角括弧を使う際にはスペースの扱いが非常に重要です。角括弧の内側や外側には必ずスペースを入れる必要があり、これを怠るとエラーが発生します。Linuxコマンドはスペースによって構文が区切られるため、このルールを守ることが正しく動作させるための基本となります。
数値比較では、等しいや大きい小さいといった条件を指定することができ、シェルスクリプトのロジック構築に欠かせません。さらに文字列比較では、変数の内容が一致しているかどうかを確認することができ、ユーザー入力の判定や設定値の確認などに活用されます。ここで重要なのは、文字列をダブルクォーテーションで囲むことで、安全に比較できるという点です。
ファイルの存在チェックも実務で非常に重要な処理です。指定したファイルが存在するかどうかによって処理を分岐することで、エラーを防いだり、適切な処理を実行することができます。特にシステム運用や自動化スクリプトでは、この機能が頻繁に利用されます。
さらに論理演算子を使うことで、複数の条件を組み合わせることが可能になります。これにより、より複雑で実用的な条件分岐を実現できます。例えば、ある数値が特定の範囲内にあるかどうかを判定する場合などに役立ちます。
近年では、より安全で高機能な書き方として二重角括弧も利用されています。これはbashやzshで使える拡張構文であり、エラーを減らしつつ柔軟な条件式を書くことができます。ただし、まずは基本となる角括弧の使い方を理解することが重要です。
初心者がよくつまずくポイントとしては、スペースの不足や条件式の書き間違いが挙げられます。これらは一見小さなミスに見えますが、実行時エラーの原因となるため注意が必要です。正しい構文を身につけることで、安定したスクリプトを作成できるようになります。
サンプルプログラムで理解を深める
a=15
name="linux"
file="test.txt"
if [ $a -gt 10 ] && [ "$name" = "linux" ] && [ -f $file ]; then
echo "すべての条件を満たしています"
else
echo "条件を満たしていません"
fi
すべての条件を満たしています
このサンプルでは、数値比較、文字列比較、ファイル存在確認を組み合わせて条件判定を行っています。このように複数の条件を組み合わせることで、実務で役立つ高度なシェルスクリプトを作成することが可能になります。
生徒
Linuxの角括弧は記号ではなくてコマンドの一種なんですね。今までただの書き方だと思っていました。
先生
その通りです。testコマンドとして条件を評価しているので、シェルスクリプトの基本中の基本になります。
生徒
数値比較や文字列比較だけでなく、ファイルの存在確認までできるのは便利ですね。
先生
はい。実際の開発や運用ではファイルチェックはとても重要なので、しっかり覚えておきましょう。
生徒
スペースを忘れるとエラーになるのが少し怖いですが、慣れれば大丈夫そうです。
先生
最初は誰でも間違えますが、正しい書き方を繰り返し使うことで自然と身につきます。
生徒
二重角括弧もあると聞いたので、次はそれも学びたいです。
先生
いいですね。基本を理解した上で応用に進むことで、より安全で効率的なスクリプトが書けるようになります。