シェルスクリプト入門 [演算・比較]

UNIX入門 > シェルスクリプト入門 > 演算・比較
四則演算
数値比較
文字列比較
ファイルチェック
論理結合

演算・比較

四則演算

シェルスクリプトで数値の演算を行いたい場合は、「expr」コマンドを使用します。例えは、変数に5と3を足した数値を格納したい場合、「変数=5+3」と書くことはできません。変数には「5+3」という文字列が格納されることになります。シェルスクリプトでは、「変数=`expr 5 + 3`」と書きます。
「expr」コマンドで使用できる算術演算子は以下のとおりです。

算術演算子 意味
a + b aとbの和
a - b aとbの差
a \* b aとbの積
a / b aとbの商
a % b aとbの剰余

乗算の演算子は「*」ですが、UNIXでは「*」はワイルドカードという特別な意味がありますので、エスケープ文字「\」を使用して「\*」と書きます。また、演算子の前後のスペースは省略できませんので注意してください。以下は四則演算のサンプルスクリプトです。
expr_test.sh

#!/bin/sh
a=`expr 5 + 3`
b=`expr 5 - 3`
ab=`expr $a + $b`
c=`expr 5 \* 3`
d=`expr 5 / 3`
e=`expr 5 % 3`
echo "a=$a"
echo "b=$b"
echo "ab=$ab"
echo "c=$c"
echo "d=$d"
echo "e=$e"

それでは実際に上記スクリプトを実行してみます。以下のような結果となります。

$ expr_test.sh
a=8
b=2
ab=10
c=15
d=1
e=2
$

↑先頭へ

数値比較

if文やwhile文の条件で、変数等を数値として評価して比較を行いたい場合は、以下のように記述します。

数値評価演算子 意味
数値1 -eq 数値2 数値1と数値2が等しい場合に真
数値1 -ne 数値2 数値1と数値2が等しくない場合に真
数値1 -gt 数値2 数値1が数値2より大きい場合に真
数値1 -lt 数値2 数値1が数値2より小さい場合に真
数値1 -ge 数値2 数値1が数値2より大きいか等しい場合に真
数値1 -le 数値2 数値1が数値2より小さいか等しい場合に真

↑先頭へ

文字列比較

if文やwhile文の条件で、変数等を文字列として評価して比較を行いたい場合は、以下のように記述します。

文字列評価演算子 意味
文字列 文字列の長さが0より大きければ真
-n 文字列 文字列の長さが0より大きければ真
! 文字列 文字列の長さが0であれば真
-z 文字列 文字列の長さが0であれば真
文字列1 = 文字列2 2つの文字列が等しければ真
文字列1 != 文字列2 2つの文字列が等しくなければ真

↑先頭へ

ファイルチェック

if文やwhile文の条件で、ファイルの形式・パーミッション・特性で評価したい場合、以下のように記述します。

ファイルチェック演算子 意味
-d ファイル名 ディレクトリなら真
-f ファイル名 通常ファイルなら真
-L ファイル名 シンボリックリンクなら真
-r ファイル名 読み取り可能ファイルなら真
-w ファイル名 書き込み可能ファイルなら真
-x ファイル名 実行可能ファイルなら真
-s ファイル名 サイズが0より大きければ真
ファイル1 -nt ファイル2 ファイル1がファイル2より新しければ真
ファイル1 -ot ファイル2 ファイル1がファイル2より古ければ真

↑先頭へ

論理結合

if文やwhile文で、複数の条件を結合(AND,OR)して評価したい場合は、以下のように記述します。

論理結合演算子 意味
! 条件 条件が偽であれば真
条件1 -a 条件2 条件1が真、かつ、条件2が真であれば真
条件1 -o 条件2 条件1が真、または、条件2が真であれば真

↑先頭へ