本記事では、bashでのtestコマンドの使い方を説明します。testコマンドには様々なオプションがあり、その中で主要なものを紹介します。また、testコマンドを使う上での注意点についても説明します。
testコマンドとは
testコマンドはbashシェルにおいて条件式を評価するための基本的なコマンドです。主にシェルスクリプト内で条件分岐を行う際に使用され、ファイルタイプの確認、文字列比較、数値比較などの様々な条件判定が可能です。testコマンドは、条件が真であれば終了ステータス0を、偽であれば1を返します。
構文
testコマンドの基本的な構文は以下のとおりです。
test 条件式
または、より一般的な形式として、角括弧を使って次のように記述します。
[ 条件式 ]
注意点として、角括弧の内側には必ずスペースが必要です。
例
以下は基本的な条件判定の例です。
# 変数が空かどうかを確認
if test -z "$variable"; then
echo "変数は空です"
fi
# 同じことを角括弧で
if [ -z "$variable" ]; then
echo "変数は空です"
fi
# ファイルが存在するかを確認
if [ -f "/path/to/file" ]; then
echo "ファイルが存在します"
fi
主なオプション
ファイル関連のオプション
testコマンドでは、ファイル操作に関連する様々なオプションが用意されています。
# ファイルが存在するか
[ -e ファイル名 ]
# 通常のファイルか
[ -f ファイル名 ]
# ディレクトリか
[ -d ディレクトリ名 ]
# 実行可能ファイルか
[ -x ファイル名 ]
# 読み取り可能か
[ -r ファイル名 ]
# 書き込み可能か
[ -w ファイル名 ]
# ファイルサイズが0より大きいか
[ -s ファイル名 ]
ディレクトリの存在を確認する例です。
if [ -d "/home/user/documents" ]; then
echo "ディレクトリが存在します"
fi
文字列関連のオプション
文字列の比較や確認に関するオプションです。
# 文字列が空かどうか
[ -z 文字列 ]
# 文字列が空でないか
[ -n 文字列 ]
# 文字列が等しいか
[ 文字列1 = 文字列2 ]
# 文字列が等しくないか
[ 文字列1 != 文字列2 ]
名前の変数を確認する例です。
name="John"
if [ -n "$name" ]; then
echo "名前が設定されています: $name"
fi
if [ "$name" = "John" ]; then
echo "名前はJohnです"
fi
数値関連のオプション
数値の比較に関するオプションです。
# 等しい
[ 数値1 -eq 数値2 ]
# 等しくない
[ 数値1 -ne 数値2 ]
# より大きい
[ 数値1 -gt 数値2 ]
# より大きいか等しい
[ 数値1 -ge 数値2 ]
# より小さい
[ 数値1 -lt 数値2 ]
# より小さいか等しい
[ 数値1 -le 数値2 ]
年齢による条件分岐の例です。
age=25
if [ $age -ge 18 ]; then
echo "成人です"
else
echo "未成年です"
fi
論理演算のオプション
複数の条件を組み合わせる論理演算です。
# AND(かつ)
[ 条件1 -a 条件2 ]
# OR(または)
[ 条件1 -o 条件2 ]
# NOT(否定)
[ ! 条件 ]
複数条件を組み合わせた例です。
if [ $age -ge 18 -a $age -le 65 ]; then
echo "就労年齢です"
fi
testコマンドと[と[[の違い
bashには、testコマンドの他に[コマンドと[[コマンドがあります。これらの違いを理解することが重要です。
testと[の関係
実は[はtestコマンドの別名(シンボリックリンク)です。そのため、以下の2つの命令は同等です。
test -f file.txt
[ -f file.txt ]
[[の特徴
[[はbashの拡張機能で、testや[よりも柔軟な構文を持っています。
# 正規表現によるパターンマッチング
[[ "string" =~ pattern ]]
# &&や||による論理演算
[[ -f file.txt && -r file.txt ]]
# 文字列比較での引用符省略が可能
[[ $name = John ]] # 引用符がなくても動作する
拡張構文を使った例です。
# [[を使った例
if [[ $name == "J"* ]]; then
echo "名前はJで始まります"
fi
if [[ -f "$file" && -x "$file" ]]; then
echo "実行可能なファイルです"
fi
注意点
testコマンドを使用する際の主な注意点は以下の通りです。
空白の取り扱い
角括弧の内側には必ずスペースが必要です。
# 正しい
[ -f file.txt ]
# 誤り
[-f file.txt]
変数の引用
変数は常に引用符で囲むことをお勧めします。引用符がないと、変数が空の場合に構文エラーになる可能性があります。
# 安全な方法
[ -n "$variable" ]
# 危険な方法($variableが空の場合エラー)
[ -n $variable ]
数値比較の注意
文字列比較と数値比較を混同しないようにしましょう。
# 数値比較(正しい)
[ $num -eq 10 ]
# 文字列比較(意図しない結果になることがある)
[ $num = 10 ]
論理演算子の違い
[ではaとoを使いますが、[[では&&と||を使います。
# [での論理AND
[ condition1 -a condition2 ]
# [[での論理AND
[[ condition1 && condition2 ]]
まとめ
bashのtestコマンドは、条件式を評価するための強力なツールです。主な特徴をまとめると、
- testコマンドは条件式が真なら0、偽なら1の終了ステータスを返す
- [はtestコマンドの別名で、同じ機能を持つ
- [[はbashの拡張機能で、より柔軟な構文を提供する
- ファイル確認、文字列比較、数値比較など、様々な条件判定が可能
- 角括弧内部のスペースや変数の引用など、構文上の注意点がある
testコマンドを適切に使用することで、より堅牢なシェルスクリプトを作成することができます。状況に応じて適切なオプションを選択し、効率的なスクリプトを書きましょう。