Linuxのtestコマンドで条件式を評価する方法

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実行可能

例:ファイルの存在チェック

bashコピーする編集する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コマンドでハマりやすいポイント

  1. スペースの省略はNG
    [5 -gt 3] はエラーになります。必ず [ 5 -gt 3 ] のようにスペースを入れましょう。
  2. 未定義の変数を使うとエラーになる可能性
    変数が未定義のままだと、test が予期せぬ挙動をすることがあります。変数は必ず " で囲むと安全です。
  3. ===の混同
    test コマンドでは = を使います。==[[ ... ]] で使用します。

まとめ

Linuxのtestコマンドは、シェルスクリプトにおける条件式評価の基本です。数値や文字列の比較、ファイルの存在確認など、さまざまな場面で活用できます。

特に初心者の方は、[ 条件 ] の形式に慣れることで、より複雑なスクリプトを組み立てられるようになります。慣れてくると、testの代わりに[[ ... ]]などのより高機能な構文にステップアップすることもできます。

まずは基本をしっかり身につけて、安定したスクリプト作成を目指しましょう。

タイトルとURLをコピーしました