bashでのtestコマンドの使い方を説明

Bash

本記事では、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コマンドを適切に使用することで、より堅牢なシェルスクリプトを作成することができます。状況に応じて適切なオプションを選択し、効率的なスクリプトを書きましょう。

タイトルとURLをコピーしました