シェルスクリプトに挑戦しよう(7)制御構文[その1]――ifによる条件分岐“応用力”をつけるためのLinux再入門(27)(1/2 ページ)

条件によって処理内容を変えたり、繰り返しなどを行ったりする際の書き方を「制御構文」と呼びます。代表的な制御構文としては、if文、case文、for文、while文があります。今回取り上げるのは、条件によって処理を分岐させる「if」です。

» 2018年10月24日 05時00分 公開
[西村めぐみ@IT]
「“応用力”をつけるためのLinux再入門」のインデックス

“応用力”をつけるためのLinux再入門

「if」はどんなときに使用するのか?

 「もし○○だったら、××する」のように、ある条件のときだけ何かをする、という処理を書きたい場合に「if」を使用します。ifを使って条件分岐を行う文(条件文)は「if文」とも呼ばれます。

 条件の部分は、通常「ある値が××と一致する」や「値が××より大きい(小さい)」などで示されます。これを「条件式」と呼びます。“値”には、例えば変数や引数の内容、文字列の長さ、計算結果、別のコマンドの実行結果などを使います。

 ifはコマンドラインでも使用できます。詳細については、連載『Linux基本コマンドTips』の第223回を参考にしてください。

●ifの基礎構文

 if文は「if 条件 then 〜 fi」のように、「if」から始まり「fi」で終わります。“それ以外”という場合には「else」を、別の条件を使いたい場合は「elif」を使います。

if 条件
then
  条件が成立したとき実行するコマンド
fi
▲条件に合ったときだけ実行する場合
if 条件
then
  条件が成立したとき実行するコマンド
else
  条件が成立しなかったとき実行するコマンド
fi
▲条件に合ったときと合わなかったときで実行内容を変える場合
if 条件1
then
  条件1が成立したとき実行するコマンド
elif 条件2
then
  条件1が成立せず、条件2が成立したときに実行するコマンド
elif 条件3
then
  条件1、条件2が成立せず、条件3が成立したときに実行するコマンド
else
  全ての条件が成立しなかったとき実行するコマンド
fi
▲複数の条件で実行内容を変える場合

【※】「elif」のブロックは幾つあっても構いません。


if 条件1 && 条件2
then
  条件1と条件2の両方が成立したときに実行するコマンド
else
  それ以外のときに実行するコマンド
fi
▲複数の条件を組み合わせる場合(1)ANDの関係

【※】「elif」でも同様に書くことができます。


if 条件1 || 条件2
then
  条件1と条件2のいずれかが成立したときに実行するコマンド
 else
  それ以外のとき(=条件1、条件2ともに成立しなかった場合)に実行するコマンド
fi
▲複数の条件を組み合わせる場合(2)ORの関係

【※】「elif」でも同様に書くことができます。



 なお、“あるコマンドの実行に成功したら〜”や、“失敗したら〜”という判定の場合は、ifを使わず、「&&」と「||」のみでコンパクトに書くこともできます。

コマンドA && コマンドAが成功したとき実行するコマンド
▲&&演算子による書き方
コマンドA || コマンドAが失敗したとき実行するコマンド
▲||演算子による書き方

●ifとelifを試してみる

 「if」と「elif」の使い方を簡単に試してみましょう。以下は、引数が1つだったら「one」、2つなら「two」、3つなら「three」、それ以外なら「ELSE」と表示するというスクリプトです。

#! /bin/bash
if [ $# = 1 ]
then
  echo "one"
elif [ $# = 2 ]
then
  echo "two"
elif [ $# = 3 ]
then
  echo "three"
else
  echo "ELSE"
fi
▲ifとelifの練習用スクリプト(eliftest)

【※】引用符を付けて「if [ "$#" = "1" ]」のように書くこともできます。


$ chmod +x eliftest
$ ./eliftest
ELSE		#←  引数がないので「ELSE」と表示された
$ ./eliftest aaa bbb
two		#←  引数が2つなので「two」と表示された
▲実行結果(eliftest)
       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。