28
28

More than 5 years have passed since last update.

LINUX testコマンドについて

Posted at

概要

一言で言うと条件を判定するコマンドです。
記法としては以下のように書くことができます。

test 条件

条件の部分には判定したい条件を書き

真の場合: 0
偽の場合: 1

を返します。
(※ 一般的なプログラミング言語の判定と逆になっていますが、これはUNIXプログラムが正常終了なら0、異常終了なら1を返す慣例を持っているため)

例として特定のファイル名のファイルが存在するかどうかは以下のようになります。

test -e exist.text; echo $status #=> 0
test -e not_exist.text; echo $status #=> 1

[]を用いた書式

上記の書き方とは別にtest文は以下のように書くことが出来ます。

[条件]

この記法を用いると先程の例は以下のようになります

[ -e exist.text ]; echo $status #=> 0
[ -e not_exist.text ]; echo $status #=> 1

このとき注意点として[]の中は必ず1スペース空ける必要があります。

ifとともに利用する

これまでの例ではecho $statusとして結果を出力していましたが、実際にはifと一緒に使われる事が多いです。
試しにこれでFizzBuzzを書いてみるとこのようになります。

for i in `seq 1 15`
do
if [ $(($i%3)) -eq 0 ] && [ $(($i%5)) -eq 0 ]; then
  echo 'FizzBuzz'
elif [ $(($i%3)) -eq 0 ]; then
  echo 'Fizz'
elif [ $(($i%5)) -eq 0 ]; then
  echo 'Buzz'
else
  echo $i
fi
done

様々な条件判定

testコマンドで使えるオプションは以下です。

ファイル処理

条件 判定
-d file fileがディレクトリであれば真 
-e file fileが存在すれば真
-f file fileが通常ファイル(ディレクトリなどでない)なら真
-L file fileがシンボリックリンクであれば真
-r file fileが読み取り可能であれば真
-s file fileのサイズが0でなければ真
-w file fileが書き込み可能であれば真
-x file fileが実行可能であれば真

文字列処理

条件 判定
-z str strの長さが0なら真
-n str strの長さが0より大きければ真
str1 == str2 文字列が等しければ真
str1 != str2 文字列が等しくなければ真

数値処理

条件 判定
int1 -eq int2 int1とint2が等しければ真
int1 -ne int2 int1とint2が等しくなければ真
int1 -lt int2 int1がint2より小さければb真
int1 -le int2 int1がint2が等しいか小さければ真
int1 -gt int2 int1がint2より大きければ真
int1 -ge int2 int1がint2より等しいか大きければ真

論理条件

条件 判定
! 条件 条件が偽であれば真
条件1 -a 条件2 条件1と条件2がともに真であれば真
条件1 -o 条件2 条件1か条件2のどちらかが真であれば真

&& と ||を用いた条件判定

command1 && command2 # command1が正しく実行されたとき、command2を実行
command1 || command2 # command1でエラーが起きたとき、command2を実行

の記法を用いてif文をより簡潔に書ける場合があります

例えば

if cat $1; then
  echo OK
fi

cat $1 && echo OK
if ! [ $((1%3)) -eq 0 ]; then
  echo NG
fi

[ $((1%3)) -eq 0 ] || echo NG

のように書くことが出来ます。

今まで何気なく
if [hogehoge]
と書いてきましたが知らないうちにtestコマンドを使っていたんですね。
複雑なshellを書くときに無くてはならない便利なコマンドです。

参考 新Linux/UNIX入門

28
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
28