本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。
第9回 条件式とtestコマンドを使いこなそう:[ ]と比較演算子の基本 | はじめてのシェルスクリプト
![第9回 条件式とtestコマンドを使いこなそう:[ ]と比較演算子の基本 | はじめてのシェルスクリプト](https://pc-fan.net/wp/wp-content/uploads/2026/04/eyecatch_ep09-1-800x436.webp)
はじめに
この連載では、macOS のターミナルで sh を使いながら、シェルスクリプトの基本を順番に学んでいきます。
前回(第8回)では、if 文を使って条件によって処理を分ける方法を学びました。「条件が成り立つとき」と「成り立たないとき」で異なる処理を実行できることが分かりましたね。
しかし、if 文の中に書く [ ] の意味や、どんな条件が書けるのかについては、まだ詳しく見ていませんでした。この [ ] の正体が test コマンドであることを知ると、シェルスクリプトの動きがぐっと明確になります。
第9回では、[ ] と test コマンドの関係を整理しながら、文字列比較・数値比較・ファイルの存在確認といった条件式の基本を学びます。「なぜこの書き方なのか」を理解することで、自信を持って条件分岐を書けるようになりますよ。
この回で学ぶこと
[]の意味testコマンドとの関係- 文字列比較の基本
- 数値比較の基本
- ファイルの存在確認
- 真と偽の判定
if文と組み合わせる方法
[ ] と test コマンド
[ ] は条件を判定する書き方
シェルスクリプトでは、条件を調べるときに [ ] を使います。
たとえば、次のように書きます。
[ "$name" = "Taro" ]これは、「name の値が Taro と同じか」を判定しています。
test コマンドと同じ考え方
[ ] は、test コマンドとほぼ同じ役割を持っています。
次の2つは同じ考え方です。
test "$name" = "Taro"[ "$name" = "Taro" ]初学者向けの例では、[ ] を使う形をよく見かけます。
文字列比較
文字列が同じかどうかを調べるには、= を使います。
[ "$name" = "Taro" ]同じなら真、違えば偽になります。
数値比較
数値を比較するときは、文字列比較とは別の書き方を使います。
たとえば、5 と 3 を比較するなら次のように書きます。
[ "$number" -gt 3 ]-gt は「より大きい」という意味です。
ファイルの存在確認
ファイルが存在するかどうかを調べることもできます。
[ -f "README.md" ]この例では、README.md というファイルが存在するかを確認しています。
サンプルコード
test_sample.sh に次の内容を保存します。
#!/bin/sh
name="Taro"
number=5
if [ "$name" = "Taro" ]; then
echo "Name matched"
fi
if [ "$number" -gt 3 ]; then
echo "Number is greater than 3"
fi
if [ -f "README.md" ]; then
echo "README.md exists"
fi実行手順
1. ファイルを作成して保存する
エディタで test_sample.sh という名前のファイルを作成し、次の内容を保存します。
#!/bin/sh
name="Taro"
number=5
if [ "$name" = "Taro" ]; then
echo "Name matched"
fi
if [ "$number" -gt 3 ]; then
echo "Number is greater than 3"
fi
if [ -f "README.md" ]; then
echo "README.md exists"
fi2. スクリプトを実行する
次のコマンドを実行します。
sh test_sample.sh実行結果は次のようになります。
Name matched
Number is greater than 3
README.md exists3. 値を変えて試す
name="Hanako" や number=2 に変更して、もう一度実行してみてください。
条件が成り立たなくなると、対応する行は表示されなくなります。
コードの読み方
[ “$name” = “Taro” ]
文字列比較です。
name の値が Taro と同じなら真になります。
[ “$number” -gt 3 ]
数値比較です。
number が 3 より大きいときに真になります。
[ -f “README.md” ]
ファイル確認です。
指定した名前の通常ファイルが存在するときに真になります。
真と偽の判定
条件式は、結果として真または偽になります。
if 文は、その判定結果を使って処理を分けています。
真なら then の中を実行し、偽なら実行しません。
else がある場合は、偽のときに else 側を実行します。
初学者がつまずきやすい点
文字列比較と数値比較を混同する
文字列には = を使い、数値には -gt などを使います。
同じ書き方ではありません。
[ ] の前後に空白を入れ忘れる
条件式では、[ や ] の周りにも空白が必要です。
[ "$name" = "Taro" ]のように書いてください。
ファイル確認の記号を覚えにくい
今回は -f だけを扱います。
まずは「通常ファイルが存在するかを確認する」と覚えれば十分です。
よくあるエラー
[: missing ]
閉じる ] を書き忘れている可能性があります。
[ と ] はセットで書いてください。
条件が思った通りに真にならない
比較している値や記号が合っているか確認してください。
文字列比較なのに数値比較の記号を使っていないか、逆になっていないかを見直します。
ファイル確認が偽になる
今いるディレクトリにそのファイルがあるか確認してください。
pwd や ls を使って、現在地とファイルの有無を確認すると分かりやすいです。
練習用コード
次の内容で check_values.sh を作成して実行してみてください。
#!/bin/sh
text="apple"
count=10
if [ "$text" = "apple" ]; then
echo "text matched"
fi
if [ "$count" -gt 5 ]; then
echo "count is greater than 5"
fi
if [ -f "next_task.txt" ]; then
echo "next_task.txt exists"
fi値を変えながら、どの条件が真になるか確認してください。
この回で理解しておくこと
[]は条件判定のための書き方であるtestコマンドとほぼ同じ考え方で使える- 文字列比較と数値比較では使う記号が異なる
-fでファイルの存在確認ができる- 条件式は真または偽を返す
if文はその結果を使って処理を分ける
まとめ
今回は、条件式と test コマンドの基本として、文字列比較、数値比較、ファイル確認を学びました。
条件を正しく書けるようになると、if 文を使った分岐をより正確に書けるようになります。
次回は、終了ステータスの考え方を確認します。
次回予告
次回は「終了ステータスを理解しよう」です。
コマンドが成功したか失敗したかを、どのように数値で表しているかを確認します。








