はじめに

こんにちは!今回はtestコマンドについて解説します。

testは条件式を評価するコマンドです。実はif文で使う[ ]の正体がこのtestコマンドなんです。知らなかった人も多いんじゃないですかね。僕も最初知りませんでした。

testコマンドとは

testは、条件式を評価して、真(true)か偽(false)かを判定するコマンドです。

評価結果は終了ステータスで返されます。真なら0、偽なら1です(普通の成功・失敗と同じですね)。

基本構文

test コマンドを使う

1
test 条件式

[ ] を使う(こっちの方が一般的)

1
[ 条件式 ]

実は[testのエイリアスみたいなもんです。

[[ ]] を使う(bash拡張)

1
[[ 条件式 ]]

こっちの方が機能が多いです(bash限定ですけど)。

主な条件式

文字列のテスト

条件式 意味
[ "$a" = "$b" ] 文字列が等しい
[ "$a" != "$b" ] 文字列が等しくない
[ -z "$a" ] 文字列が空
[ -n "$a" ] 文字列が空でない

数値のテスト

条件式 意味
[ $a -eq $b ] 等しい
[ $a -ne $b ] 等しくない
[ $a -gt $b ] より大きい
[ $a -lt $b ] より小さい
[ $a -ge $b ] 以上
[ $a -le $b ] 以下

ファイルのテスト

条件式 意味
[ -e "$file" ] ファイルまたはディレクトリが存在
[ -f "$file" ] 通常ファイルが存在
[ -d "$dir" ] ディレクトリが存在
[ -r "$file" ] 読み取り可能
[ -w "$file" ] 書き込み可能
[ -x "$file" ] 実行可能
[ -s "$file" ] ファイルサイズが0より大きい
[ -L "$file" ] シンボリックリンク

使用例

例1: testコマンドで評価

1
2
test 5 -gt 3
echo $?

実行結果:

1
0

5は3より大きいので、真(0)が返ります。

例2: [ ] で評価

1
2
[ 5 -gt 3 ]
echo $?

実行結果:

1
0

さっきと同じです。test[ ]は同じ意味です。

例3: if文と組み合わせる

1
2
3
4
5
6
7
file="test.txt"

if [ -f "$file" ]; then
    echo "$file は存在します"
else
    echo "$file は存在しません"
fi

if文の中で使うのが一般的ですね。

例4: && と || で使う

1
[ -f "test.txt" ] && echo "ファイルあり" || echo "ファイルなし"

真なら左側、偽なら右側が実行されます。簡潔に書けて便利です。

例5: 文字列が空かチェック

1
2
3
4
5
name=""

if [ -z "$name" ]; then
    echo "名前が入力されていません"
fi

実行結果:

1
名前が入力されていません

例6: 数値の比較

1
2
3
4
5
score=85

if [ $score -ge 80 ]; then
    echo "合格です"
fi

実行結果:

1
合格です

例7: 複数条件(AND)

1
2
3
4
5
age=25

if [ $age -ge 18 ] && [ $age -lt 65 ]; then
    echo "成人かつ現役世代です"
fi

例8: 複数条件(OR)

1
2
3
4
5
ext="jpg"

if [ "$ext" = "jpg" ] || [ "$ext" = "png" ]; then
    echo "画像ファイルです"
fi

例9: 否定

1
2
3
if [ ! -f "config.txt" ]; then
    echo "設定ファイルがありません"
fi

!で条件を反転できます。

Tips・注意点

  • [ ]の前後にスペース必須: これよく間違えます

    1
    2
    
    [ $a -eq 1 ]   # 正しい
    [$a -eq 1]     # エラー!
    
  • 変数はクォートで囲む: 空文字や空白対策

    1
    2
    
    [ "$var" = "test" ]  # 安全
    [ $var = "test" ]    # 変数が空だとエラー
    
  • 終了ステータスで判定: $?で確認できます

    1
    2
    3
    4
    5
    
    [ 5 -gt 3 ]
    echo $?  # 0(真)
    
    [ 5 -lt 3 ]
    echo $?  # 1(偽)
    
  • test と [ の違い: 基本的に同じですが、[の場合は最後に]が必要

    1
    2
    
    test -f file.txt   # OK
    [ -f file.txt ]    # OK(]が必要)
    
  • [[ ]] の方が高機能: bash使ってるならこっちがおすすめ

    1
    2
    3
    4
    5
    
    # [[ ]] だと正規表現が使える
    [[ "hello" =~ ^h ]] && echo "hで始まる"
    
    # パターンマッチング
    [[ "test.txt" == *.txt ]] && echo "txtファイル"
    

実践的な使い方

ファイルの存在確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash

config="/etc/myapp/config.conf"

if [ ! -f "$config" ]; then
    echo "エラー: 設定ファイルが見つかりません: $config"
    exit 1
fi

echo "設定ファイルを読み込みます: $config"

引数のチェック

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/bash

if [ $# -eq 0 ]; then
    echo "使い方: $0 <ファイル名>"
    exit 1
fi

if [ ! -f "$1" ]; then
    echo "エラー: ファイルが存在しません: $1"
    exit 1
fi

echo "処理を開始: $1"

ディレクトリの作成(存在しない場合のみ)

1
2
3
4
5
6
7
#!/bin/bash

backup_dir="./backup"

[ ! -d "$backup_dir" ] && mkdir -p "$backup_dir"

echo "バックアップディレクトリ: $backup_dir"

複数条件のチェック

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash

file="data.txt"

if [ -f "$file" ] && [ -r "$file" ] && [ -s "$file" ]; then
    echo "ファイルは存在し、読み取り可能で、空ではありません"
    cat "$file"
else
    echo "ファイルに問題があります"
fi

環境変数のチェック

1
2
3
4
5
6
7
8
#!/bin/bash

if [ -z "$HOME" ]; then
    echo "エラー: HOME環境変数が設定されていません"
    exit 1
fi

echo "ホームディレクトリ: $HOME"

数値の範囲チェック

1
2
3
4
5
6
7
8
9
#!/bin/bash

read -p "1〜10の数字を入力: " num

if [ $num -ge 1 ] && [ $num -le 10 ]; then
    echo "正しい範囲です"
else
    echo "範囲外です"
fi

まとめ

今回はtestコマンドについて解説しました。

ポイント:

  • testは条件式を評価するコマンド
  • [ ]testと同じ意味
  • 文字列、数値、ファイルなど色々な条件をテストできる
  • if文や&&/||と組み合わせて使う

実は普段if文で使ってる[ ]がこのtestコマンドだったって知ると、なんかスッキリしますよね。条件判定の基本なので、色々な条件式を覚えておくと便利です。

次回もLinuxコマンドの学習を続けていきましょう!