testコマンド:ファイルや文字列の状態をチェックする基本ツール

Linuxを操作していると、ファイルの存在確認やディレクトリの状態チェック、文字列の比較など、さまざまな場面で条件を判断する必要が出てきます。そのようなときに活躍するのが、testコマンドです。このコマンドは、シェルスクリプトやコマンドラインで条件分岐を実装する際に非常に強力で汎用性の高いツールです。

この記事では、Linux初心者から中級者の方々に向け、testコマンドの基礎的な使い方から応用的な使用例までを分かりやすく解説します。これを読むことで、効率的な条件分岐の実現やスクリプトの作成に必要な知識を身につけることができるでしょう。


testコマンドの基本的な使い方

testコマンドは、指定した条件を評価し、その結果に応じて終了ステータスを返します。終了ステータスはスクリプトの中で条件分岐(if文など)の判断材料として利用されます。

基本構文

test 条件式

または、[] を使った形式でも同じ動作をします([testコマンドの別名として動作しています)。

[ 条件式 ]

testコマンドの終了ステータスは以下のように動作します:

  • 条件式がの場合:終了ステータスは0(成功)
  • 条件式がの場合:終了ステータスは1(失敗)

簡単な例

ファイルの存在確認

test -e /path/to/file && echo "ファイルが存在します" || echo "ファイルが存在しません"

数値の比較

[ 5 -eq 5 ] && echo "等しい" || echo "等しくない"

これらの例は、条件が満たされる場合にメッセージを表示し、そうでない場合に代わりのメッセージを表示する流れを示しています。


testコマンドの主要なオプション

testコマンドは、さまざまな条件を評価するための多くのオプションを提供します。以下では、ファイル関連、文字列関連、数値関連のオプションに分けて説明します。

ファイル関連のオプション

ファイルやディレクトリの状態を確認するために使用します。

オプション説明
-e fileファイルが存在するかを確認
-f fileファイルが通常のファイルかを確認
-d fileファイルがディレクトリかを確認
-r fileファイルが読み取り可能かを確認
-w fileファイルが書き込み可能かを確認
-x fileファイルが実行可能かを確認
-s fileファイルが空でない(サイズが0でない)かを確認
-L fileファイルがシンボリックリンクかを確認

使用例:ファイルの存在と種類をチェック

if [ -d /home/user ]; then
  echo "ディレクトリが存在します"
else
  echo "ディレクトリが存在しません"
fi

この例では、指定したパスがディレクトリであるかどうかを確認し、結果に応じたメッセージを表示します。


文字列関連のオプション

文字列の長さや内容を比較するためのオプションです。

オプション説明
-z string文字列が空(長さが0)かを確認
-n string文字列が空でないかを確認
string1 = string22つの文字列が等しいかを確認
string1 != string22つの文字列が等しくないかを確認

使用例:文字列の比較

str="hello"
if [ "$str" = "hello" ]; then
  echo "文字列はhelloです"
else
  echo "文字列はhelloではありません"
fi

この例では、変数strの値が特定の文字列と一致するかどうかを評価しています。


数値関連のオプション

数値の大小や等しいかどうかを比較するために使用します。

オプション説明
num1 -eq num2数値が等しい
num1 -ne num2数値が等しくない
num1 -gt num2数値が大きい
num1 -lt num2数値が小さい
num1 -ge num2数値が大きいか等しい
num1 -le num2数値が小さいか等しい

使用例:数値の比較

a=10
b=20
if [ $a -lt $b ]; then
  echo "$a は $b より小さい"
else
  echo "$a は $b 以上です"
fi

複数条件の評価

複数の条件を同時に評価したい場合は、論理演算子を使用します。

演算子説明
-aAND(条件の両方が真)
-oOR(いずれかの条件が真)

使用例:複数条件の評価

if [ -e /tmp/file -a -w /tmp/file ]; then
  echo "ファイルは存在し、書き込み可能です"
else
  echo "条件を満たしていません"
fi

testコマンドの応用

ここでは、testコマンドを使った実践的なシナリオをいくつか紹介します。

シェルスクリプトで条件分岐を実装

ファイルの存在確認スクリプト

以下のスクリプトは、指定したファイルが存在するかどうかをチェックします。

#!/bin/bash

file="/path/to/file"

if [ -e "$file" ]; then
  echo "ファイル $file は存在します"
else
  echo "ファイル $file は存在しません"
fi

数値の大小を比較するスクリプト

#!/bin/bash

a=$1
b=$2

if [ $a -gt $b ]; then
  echo "$a は $b より大きい"
else
  echo "$a は $b 以下です"
fi

条件付きでコマンドを実行

ファイルが存在する場合のみ削除

[ -e /tmp/testfile ] && rm /tmp/testfile && echo "ファイルを削除しました"

サービスが実行中か確認

以下の例では、nginxというサービスが稼働しているかを確認します。

if [ -n "$(pgrep nginx)" ]; then
  echo "nginxは実行中です"
else
  echo "nginxは停止しています"
fi

まとめ

testコマンドは、Linuxの条件分岐を支える基礎的なツールであり、シェルスクリプト作成の際には欠かせない存在です。この記事では、その基本的な使い方から主要なオプション、さらに実践的な応用例までを網羅して解説しました。

この知識を活用すれば、効率的で柔軟なスクリプトを作成することが可能になります。

コメント

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