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 = string2 | 2つの文字列が等しいかを確認 |
string1 != string2 | 2つの文字列が等しくないかを確認 |
使用例:文字列の比較
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
複数条件の評価
複数の条件を同時に評価したい場合は、論理演算子を使用します。
演算子 | 説明 |
---|---|
-a | AND(条件の両方が真) |
-o | OR(いずれかの条件が真) |
使用例:複数条件の評価
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の条件分岐を支える基礎的なツールであり、シェルスクリプト作成の際には欠かせない存在です。この記事では、その基本的な使い方から主要なオプション、さらに実践的な応用例までを網羅して解説しました。
この知識を活用すれば、効率的で柔軟なスクリプトを作成することが可能になります。
コメント