【シェルスクリプト】条件分岐させるifの使い方!

  • このエントリーをはてなブックマークに追加
  • Pocket

このページではシェルスクリプトでのifの使い方についてご紹介した。

プログラミング経験者であれば、ifが条件分岐に使うことはご存知だと思うが、シェルスクリプトの書き方は少し特殊だ。確認をしてみていただきたい。

簡単に、ifとは?

プログラミングの制御文における「条件分岐」にあたる。文章的にすると「もしこの条件にあてはまるなら、この処理をしてほしい」となる。つまり特定の「条件のもと」に「分岐」するのである。また条件に合致しない場合は処理がおこなわれない。

if文

例えば、次のようになる。

if(年齢が20以上であれば)  //ifはもし○○であれば
 あなたは成人です
else //そうでない場合には
 あなたは未成年です
fi

というような形だ。

多くの場合条件式には条件判定専用の「test」コマンドを使用することになる。

しかし、基本的には意識しない。testコマンドを書かなくとも、「[ 条件式 ]」という記述で済んでしまう。

分岐をおこなう制御文にはほかにも「case」も存在する。ほかのページで記述するがこれは、ifよりも単純な分岐である。今回はifについて記述する。

シェルスクリプトのif

ifの文法基本

ifの書式は次の様になる。

となる。もし「条件1」に当てはまれば、「処理1」を実行するという意味だ。

条件1に当てはまらない場合には処理2を実行したいとき、次の様にする。

もし「条件1」に当てはまるなら、「処理1」を実行する。それ以外は「処理2」を実行するという意味だ。

さらに分岐を分けたいときにはelifを使う。「else if」の省略だ。

もし「条件1」に当てはまるなら、「処理1」を実行する。それ以外で「条件2」に当てはまるなら「処理2」を実行する。それ以外は「処理3」を実行するという意味だ。

全体的に、スペースの位置とセミコロンに気をつけよう。

条件式を判定するtestコマンドについて

条件式を判定するための専用コマンドである。単体のコマンドとして存在している。Unix Like Systemであればほぼ確実にインストールされているコマンドだ。

下記ページで「演算子」について触れたがこれはtestコマンドのなかで多用されているものを列挙したのである。このコマンドは条件式を評価0ならば真、0以外ならば偽となる。

詳しい条件式は下記ページを参照していただきたい。

基本的にプログラムは真と判定されるとその処理が実行される。通常のプログラム言語の場合多くは0が偽、1以上が真となることが多いがtestコマンドはそうではないところに注意しよう。

基本的に「[ 条件式 ]」として記述されるので意識することは少ない。一応お伝えしておくと、

$ test 1 -eq 1 ; echo $?

とすると値がたしかめられる。

サンプルプログラムを確認

サンプルプログラムを確認して、どのように動くのか見てみてほしい。

出力結果

if文のサンプル

詳細解説

なんとなくイメージはできただろうか? これ以降、詳細をご説明していく。

なぜ「;」(セミコロン)がついているのか?「:」は何?

実際のところ上記の方法でも記述は許されている。

しかし「行」が増えてしまうため、可読性(コードの読みやすさ)に影響がでる。なので「;」をつけて一行にifとthenをまとめている。

「:」は書式上ifはなにかしらの処理が記述されてないと怒られてしまうので、無害なコードをはさむことによって、「なにもしない」状態をつくりだしている。

ちなみに「:」の終了コードは「0」つまり「真」となるので、後のページで紹介する「while」のループ条件に使うことがしばしある。

orやandやnot

スクリプトの例でさりげなく「or」を表わす「-o」を使用している。ほか「and」を表わす「-a」「not」を表わす「!」などがある。

orは「または」、andは「かつ」、notは「反転」とすると覚えやすいだろう。

今回の例だと「or」なのでTEST_VARが0と等しい「-o」ここで、もしくは TEST_VARは1と等しい場合、「真」となる。

ネスト(入れ子)について

基本的にプログラムはやスクリプトの制御文は「ネスト」入れ子が可能である。「ifのなかでifを記述する」できる。

ネストはいくらでも出来る。しかし例にあげているコードをみてもらえるとわかるが、可読性が下がる。

もしネストが多用されてしまうような状態ならば、一回条件式をみなおしてみよう。条件にだぶりがあることが多い。

ifは条件式の結果が0であれば実行される

じつはtestをつかわなくても、条件式の部分が0になればそれは「真」となり実行されるということも覚えておくと便利だ。

vi if-ex2.sh

出力結果

$ ./if-ex2.sh

if サンプル2

まとめ 

if文の使い方は一通りわかっただろうか?

ifはシェルスクリプトを使っていく上で、必ず必要になる。使い方がわかっていないとシェルスクリプトを書く意味がほとんどないと言っていい。

ぜひマスターしていただければと思う。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できる。

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

SNSでもご購読できます。

コメントを残す

*