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コマンドでハマりやすいポイント
- スペースの省略はNG
[5 -gt 3]
はエラーになります。必ず[ 5 -gt 3 ]
のようにスペースを入れましょう。 - 未定義の変数を使うとエラーになる可能性
変数が未定義のままだと、test
が予期せぬ挙動をすることがあります。変数は必ず"
で囲むと安全です。 =
と==
の混同test
コマンドでは=
を使います。==
は[[ ... ]]
で使用します。
まとめ
Linuxのtest
コマンドは、シェルスクリプトにおける条件式評価の基本です。数値や文字列の比較、ファイルの存在確認など、さまざまな場面で活用できます。
特に初心者の方は、[ 条件 ]
の形式に慣れることで、より複雑なスクリプトを組み立てられるようになります。慣れてくると、test
の代わりに[[ ... ]]
などのより高機能な構文にステップアップすることもできます。
まずは基本をしっかり身につけて、安定したスクリプト作成を目指しましょう。