【Shell】条件分岐:if文の使い方

■if-elif-else文の使い方

▼if文の基礎

if文は条件分岐を行うための制御構造であり、条件が真の時、処理が実行される。

if 条件; then
    条件が真の時に行う処理
fi

また、elif句を使用することで複数の条件に分岐させることが可能である。
※elif句は複数指定することが可能

if 条件1; then
    条件1が真の時に行う処理
elif 条件2; then
    条件2が真の時に行う処理
elif 条件3; then
    条件3が真の時に行う処理
elif 条件4; then
    条件4が真の時に行う処理
elif 条件5; then
    条件5が真の時に行う処理
fi

さらに、else句を使用することで、指定した条件が偽の時の処理も実行できる。

if 条件1; then
    条件1が真の時に行う処理
else
    条件1が偽の時に行う処理
fi

もちろん、elif句とも併用可能。

if 条件1; then
    条件1が真の時に行う処理
elif 条件2; then
    条件2が真の時に行う処理
else
    条件1、条件2が偽の時に行う処理
fi

▼サンプルコード

・処理概要
シェル実行時の引数についてif文を作成し、判定処理を行う。

・コード(sample.sh)

#!/bin/bash

# yes/no判定処理
if [ "$1" = yes ]; then
    echo "yesが入力されました"
elif [ "$1" = no ]; then
    echo "noが入力されました"
else
    echo "yesかnoを入力してください"
    echo "入力値:$1"
fi

▼実行結果

実行コマンド:./sample.sh yes

yesが入力されました

実行コマンド:./sample.sh no

noが入力されました

実行コマンド:./sample.sh hoge

yesかnoを入力してください
入力値:hoge

■エラーコードで判定処理

ひとつ前の処理に対するエラーコードを使用して判定処理を行うことができる。
エラーコードによる判定処理はバッチ処理等にもよく使われている。
→バッチ処理が成功したら〇〇の処理を行い、失敗したら××の処理を行うなど・・・。

▼サンプルコード

・処理概要
変数にディレクトリ名をセットし、指定のディレクトリへ移動する。
→移動できれば「移動しました」と表示し、移動できなければ「移動に失敗しました」と表示する。

・コード

#!/bin/bash

# エラーレベルよる判定処理
# 成功バージョン(ディレクトリが存在している)
tmp_dir1=/work/tmp
cd ${tmp_dir1}
if [ $? = 0 ]; then
    echo "移動しました"
    pwd
else
    echo "移動に失敗しました"
    pwd
fi

# 失敗バージョン(ディレクトリが存在していない)
tmp_dir2=/hogehoge
cd ${tmp_dir2}
if [ $? = 0 ]; then
    echo "移動しました"
    pwd
else
    echo "移動に失敗しました"
    pwd
fi

▼実行結果

・成功バージョン(ディレクトリが存在)

移動しました
/work/tmp

・失敗バージョン(ディレクトリが存在していない)

cd: /hogehoge: そのようなファイルやディレクトリはありません
移動に失敗しました
/work/tmp

■複数条件を指定する【&&(AND)と||(OR)】

▼AND演算(&&)

複数(2つ以上)の条件を指定して、いずれも真である場合、処理を実行するような判定処理を行いたい場合は、AND演算を使用する。

・サンプルコード

・処理概要
任意の変数「tmp_num」について、4 < tmp_num < 10 の場合(4より大きい、かつ、10より小さい場合)メッセージを出力

・コード

#!/bin/bash

# 初期値
tmp_num=6

# &&(and)の使い方
# 4 < tmp_num < 10 の場合メッセージを出力
if [ "$tmp_num" -lt 10 ] && [ "$tmp_num" -gt 4 ]; then
    echo ${tmp_num}"は4より大きい、かつ、10より小さい"
fi

・実行結果

6は4より大きい、かつ、10より小さい

▼OR演算(||)

複数(2つ以上)の条件を指定して、いずれかひとつでも真である場合、処理を実行するような判定処理を行いたい場合は、OR演算を使用する。

・サンプルコード

・処理概要
任意の変数「tmp_num」について、8 ≦ tmp_num もしくは tmp_num ≦ 10 の場合メッセージを出力

・コード

#!/bin/bash

# 初期値
tmp_num=6

# &&(and)の使い方
# 4 < tmp_num < 10 の場合メッセージを出力
if [ "$tmp_num" -ge 8 ] || [ "$tmp_num" -le 10 ]; then
    echo ${tmp_num}"は8以上、もしくは、10以下"
fi

・実行結果

6は8以上、もしくは、10以下
タイトルとURLをコピーしました