Linux test コマンド

Linux コマンド大全


testLinux/Unix システムにおける条件判定用の組み込みコマンドで、主にシェルスクリプト内でさまざまなテストや比較操作を行うために使用されます。ファイルの属性を確認したり、文字列や数値を比較したりすることができ、シェルスクリプトを作成する際に欠かせないツールです。


基本構文

test EXPRESSION
# 或者使用方括号格式(更常用)
[ EXPRESSION ]

注意:角括弧形式を使用する場合、式と角括弧の間にスペースが必要です。つまり、[空格EXPRESSION空格]


主な機能分類

1. ファイルテスト

ファイルまたはディレクトリのさまざまな属性を確認します:

式 意味
-e 文件 ファイルが存在するか
-f 文件 通常のファイルである(ディレクトリやデバイスファイルではない)
-d 文件 ディレクトリである
-s 文件 ファイルサイズが空でない
-r 文件 ファイルが読み取り可能
-w 文件 ファイルが書き込み可能
-x 文件 ファイルが実行可能
-L 文件 ファイルがシンボリックリンクである

例:

例

if [ -f "/etc/passwd" ]; then
    echo "これは通常のファイルです"
fi

2. 文字列比較

2つの文字列の関係を比較します:

式 意味
-z "字符串" 文字列の長さが0
-n "字符串" 文字列の長さが0でない
"串1" = "串2" 文字列が等しい
"串1" != "串2" 文字列が等しくない

例:

例

read -p "ユーザー名を入力: " username
if [ -z "$username" ]; then
    echo "ユーザー名は空にできません"
fi

3. 数値比較

2つの整数の大小関係を比較します:

式 意味
n1 -eq n2 等しい (equal)
n1 -ne n2 等しくない (not equal)
n1 -gt n2 より大きい (greater than)
n1 -ge n2 以上
n1 -lt n2 より小さい (less than)
n1 -le n2 以下

例:

例

if [ $(id -u) -eq 0 ]; then
    echo 現在はrootユーザーです
fi

4. 論理演算子

複数のテスト条件を組み合わせます:

演算子 意味 例
! 論理否定 (NOT) [ ! -f file ]
-a 論理積 (AND) [ -f file -a -r file ]
-o 論理和 (OR) [ -d dir -o -f file ]

現代的な推奨記法(使用する&&と||):

例

[ -f file ] && [ -r file ]  # ファイルが存在し、読み取り可能
[ -d dir ] || [ -f file ]   # ディレクトリまたはファイルである

応用的な使い方

1. 複合条件判定

例

if [ -f "/etc/passwd" -a -r "/etc/passwd" ]; then
    echo "ファイルが存在し、読み取り可能"
fi

2. if 文との組み合わせ

例

if [ "$1" = "start" ]; then
    echo "サービスを起動しています..."
elif [ "$1" = "stop" ]; then
    echo "サービスを停止しています..."
else
    echo "無効な引数"
fi

3. 変数代入での使用

例

[ -z "$PATH" ] && PATH="/usr/bin:/bin"  # PATHが空の場合はデフォルト値を設定

よくあるエラーと注意点

スペースの問題:

例

[ "$var" = "value" ]  # 正しい
[ "$var"="value" ]    # 間違い、スペース不足

文字列変数の引用符:

例

[ -n "$var" ]  # 正しい、変数が空のときのエラーを防ぐ
[ -n $var ]    # $varが空のときにエラーになる

数値比較と文字列比較:

例

[ "10" -gt "2" ]  # 正しい、数値比較
[ "10" > "2" ]    # 間違い、これは文字列比較(辞書順)

ファイルテストのパス:

例

[ -f "$file" ]    # 正しい、変数を引用符で囲む
[ -f $file ]      # パスにスペースが含まれるとエラーになる

実際の応用例

例1:バックアップディレクトリが存在するか確認

例

backup_dir="/var/backups"
if [ ! -d "$backup_dir" ]; then
    mkdir -p "$backup_dir"
    echo "バックアップディレクトリを作成:$backup_dir"
fi

例2:ユーザー入力を検証

例

read -p "年齢を入力してください: " age
if [ "$age" -lt 0 -o "$age" -gt 120 ]; then
    echo "無効な年齢入力"
    exit 1
fi

例3:サービス起動スクリプト

例

#!/bin/bash

if [ "$1" = "start" ]; then
    if [ -f "/var/run/service.pid" ]; then
        echo "サービスはすでに実行中です"
    else
        echo "サービスを起動しています..."
        # 起動コマンド
    fi
elif [ "$1" = "stop" ]; then
    # 停止ロジック
else
    echo "使用方法: $0 {start|stop}"
fi

まとめ

testこのコマンドはシェルスクリプトプログラミングにおける基本的なツールであり、これを習得すると以下のことができます:

  • 条件分岐ロジックの実装
  • ファイルとディレクトリの状態の検証
  • 文字列と数値の比較
  • 複雑な判定条件の構築

重要なポイントを覚えておきましょう:

  1. 角括弧形式がより一般的だが、スペースに注意
  2. 変数を参照するときはダブルクォートで囲む
  3. 文字列比較と数値比較の演算子を区別する
  4. 現代的な&&と||を使用して置き換える-aと-o

Linux コマンド大全

その他の拡張