Linuxシェルスクリプトを学び始めると、必ず登場するのが「条件式の評価」です。その中でもよく使われるのが test コマンドです。test コマンドは、数値の比較や文字列の一致、ファイルの存在確認など、さまざまな条件を評価するために使われます。
この記事では、test コマンドの基本的な使い方から、応用的な条件式まで、実例を交えながら詳しく解説します。シェルスクリプトを理解するうえで欠かせない基礎知識として、ぜひ活用してください。
testコマンドとは?
test コマンドは、条件式を評価して、真なら0(成功)、偽なら1(失敗)の終了ステータスを返すコマンドです。
これは、シェルスクリプトで if 文と組み合わせて使うことで、条件分岐を実現するために非常に重要です。
たとえば、次のように使います:
if test 5 -gt 3; then
echo "5は3より大きい"
fi
このコードでは、5が3より大きいかを test で確認し、条件が真ならメッセージを表示します。
testの基本的な書式
test コマンドは以下のように書くのが基本です:
test 条件式
または、角カッコを使って以下のように書くこともできます(こちらの方が一般的に多く見かけます):
[ 条件式 ]
注意点:[と]の間にはスペースが必要です。これは構文上とても重要なので、忘れないようにしましょう。
数値の比較で使える演算子
test コマンドで数値の比較をするときは、以下の演算子を使用します。
| 比較 | 意味 |
|---|---|
| -eq | 等しい |
| -ne | 等しくない |
| -gt | より大きい |
| -ge | 以上 |
| -lt | より小さい |
| -le | 以下 |
例:数値比較のスクリプト
a=10
b=5
if [ $a -gt $b ]; then
echo "$a は $b より大きいです"
else
echo "$a は $b より大きくありません"
fi
このように、-gt や -lt を使って、整数の比較が簡単にできます。
文字列の比較方法
文字列の比較をするには、以下の演算子を使います。
| 比較 | 意味 |
|---|---|
| = | 等しい |
| != | 等しくない |
| -z | 文字列が空 |
| -n | 文字列が空でない |
例:文字列比較のスクリプト
name="taro"
if [ "$name" = "taro" ]; then
echo "名前はtaroです"
else
echo "名前はtaroではありません"
fi
文字列を比較するときには、変数を引用符で囲むのがベストプラクティスです。引用符がないと、変数が空のときにエラーになる可能性があります。
ファイルの存在確認と属性チェック
ファイルの有無や属性(読み取り可能か、ディレクトリか、など)を確認することもできます。
| オプション | 意味 |
|---|---|
| -e | 存在する |
| -f | 通常のファイルである |
| -d | ディレクトリである |
| -r | 読み取り可能 |
| -w | 書き込み可能 |
| -x | 実行可能 |
例:ファイルの存在チェック
file="./data.txt"
if [ -f "$file" ]; then
echo "$file は存在します"
else
echo "$file は存在しません"
fi
このようにすれば、スクリプト内でファイルの存在確認を簡単に行えます。
複数条件の評価(AND / OR)
複数の条件を組み合わせたいときは、以下のようにします。
AND(かつ)
if [ $a -gt 0 ] && [ $b -gt 0 ]; then
echo "どちらも正の数です"
fi
または:
if test $a -gt 0 -a $b -gt 0; then
echo "どちらも正の数です"
fi
OR(または)
if [ $a -lt 0 ] || [ $b -lt 0 ]; then
echo "どちらかが負の数です"
fi
または:
if test $a -lt 0 -o $b -lt 0; then
echo "どちらかが負の数です"
fi
-a や -o を使った書き方は、古い書式ではありますが今でも動作します。ただし、最近のスクリプトでは && や || を使うのが推奨されることが多いです。
拡張構文:[[ ... ]] との違い
test コマンドや [ の代わりに、Bashでは [[ ... ]] という構文も利用できます。
if [[ "$name" == "taro" ]]; then
echo "名前はtaroです"
fi
この構文は、パターンマッチ(ワイルドカード)や論理演算などに対応しており、より柔軟な条件式が書けます。ただし、[[ ... ]] はBash固有の機能なので、POSIX互換のシェルでは使えない点に注意が必要です。
testコマンドでハマりやすいポイント
- スペースの省略はNG
[5 -gt 3]はエラーになります。必ず[ 5 -gt 3 ]のようにスペースを入れましょう。 - 未定義の変数を使うとエラーになる可能性
変数が未定義のままだと、testが予期せぬ挙動をすることがあります。変数は必ず"で囲むと安全です。 =と==の混同testコマンドでは=を使います。==は[[ ... ]]で使用します。
まとめ
Linuxのtestコマンドは、シェルスクリプトにおける条件式評価の基本です。数値や文字列の比較、ファイルの存在確認など、さまざまな場面で活用できます。
特に初心者の方は、[ 条件 ] の形式に慣れることで、より複雑なスクリプトを組み立てられるようになります。慣れてくると、testの代わりに[[ ... ]]などのより高機能な構文にステップアップすることもできます。
まずは基本をしっかり身につけて、安定したスクリプト作成を目指しましょう。
