はじめに#
こんにちは!今回はtestコマンドについて解説します。
testは条件式を評価するコマンドです。実はif文で使う[ ]の正体がこのtestコマンドなんです。知らなかった人も多いんじゃないですかね。僕も最初知りませんでした。
testコマンドとは#
testは、条件式を評価して、真(true)か偽(false)かを判定するコマンドです。
評価結果は終了ステータスで返されます。真なら0、偽なら1です(普通の成功・失敗と同じですね)。
基本構文#
test コマンドを使う#
[ ] を使う(こっちの方が一般的)#
実は[もtestのエイリアスみたいなもんです。
[[ ]] を使う(bash拡張)#
こっちの方が機能が多いです(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コマンドで評価#
実行結果:
5は3より大きいので、真(0)が返ります。
例2: [ ] で評価#
実行結果:
さっきと同じです。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
|
実行結果:
例6: 数値の比較#
1
2
3
4
5
|
score=85
if [ $score -ge 80 ]; then
echo "合格です"
fi
|
実行結果:
例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
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コマンドの学習を続けていきましょう!