LoginSignup
2

More than 3 years have passed since last update.

posted at

updated at

ShellScript【 if 】

書式

if【条件】
then
  【実行されるコマンド等】
elif【条件】
then
  【実行されるコマンド等】
else
  【実行されるコマンド等】
fi

# if ~ then を1行に書く場合は then の前に ; が必要
if【条件】; then
  【実行されるコマンド等】
elif【条件】; then
  【実行されるコマンド等】
else
  【実行されるコマンド等】
fi

多くの場合 if 直後には test コマンドを意味する [] が記述される

a と b の比較

if [ a -eq b ]; then echo 'a と b は等しいです (a = b)' # equal
elif [ a -ne b ]; then echo 'a と b は等しくありません (a ≠ b)' # not equal
elif [ a -lt b ]; then echo 'a は b よりも小さいです (a < b)' # less than
elif [ a -le b ]; then echo 'a は b 以下です (a ≦ b)' # less than or equal
elif [ a -gt b ]; then echo 'a は b よりも大きいです (a > b)' # greater than
elif [ a -ge b ]; then echo 'a は b 以上です (a ≧ b)' # greater than or equal
fi

ディレクトリが存在すれば真

if [ -d /home/user ]; then echo 'ホームディレクトリ以下に user というディレクトリがあります'
fi

ファイルが存在し、かつ通常ファイルならば真

if [ -f /home/test.txt ]; then echo 'ホームディレクトリに test.txt ファイルがあります'
fi

AND / OR 条件

オプションを利用

AND条件

if【条件1】 -a 【条件2】; then
  【実行されるコマンド等】
fi

# ex. x=0, y=1 の場合
if [ x -lt y -a x -le y ]; then echo 'x は y よりも小さく、かつ x は y 以下です'
fi

OR条件

if【条件1】 -o 【条件2】; then
  【実行されるコマンド等】
fi

# ex. x=0, y=1 の場合
if [ x -lt y -o x -le y ]; then echo 'x は y よりも小さい、または x は y 以下です'
fi

リスト演算子を利用

AND条件

if【条件1】 && 【条件2】; then
  【実行されるコマンド等】
fi

# ex. x=0, y=1 の場合
if [ x -lt y ] && [ x -le y ]; then echo 'x は y よりも小さく、かつ x は y 以下です'
fi

OR条件


if【条件1】 || 【条件2】; then
  【実行されるコマンド等】
fi

# ex. x=0, y=1 の場合
if [ x -lt y ] || [ x -le y ]; then echo 'x は y よりも小さい、または x は y 以下です'
fi

オプションの場合【条件1】と【条件2】を合わせて評価するが、リスト演算子の場合、

AND&& は【条件1】の結果が「真」の場合に【条件2】を判断
OR|| は【条件1】の結果が「偽」の場合に【条件2】を判断

という評価処理になる点に注意。

【参考】
https://shellscript.sunone.me/if_and_test.html
https://qiita.com/toshihirock/items/461da0f60f975f6acb10

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
What you can do with signing up
2