■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以下
コメント