【シェルスクリプト】条件分岐させる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

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

IT講師に興味はありませんか?

・「今までIT講師をやってきたが、更に多くの講義を行いたい」

・「エンジニアとしてやってきたが講師業に魅力を感じている」

・「講師として活躍するためにベースとなる知識を知りたい」

・「様々な分野や言語の講師にチャレンジしてみたい」


という方はぜひIT講師募集のページをご覧ください。


リスキルテクノロジーでは「受講している方々にITを好きになってもらう」ことを目標に、同じ目標に向かって歩んで行ける講師の方を常に探しています。


システム開発やインフラ構築などのエンジニアリング経験を活かし、新入社員などの未経験者や経験の浅い初学者の方々に対してITトレーニングを行っていただくことになります。


テキストやカリキュラムは事前に用意されており、それらを元に講義を進めていくため、IT講師をはじめて実施する方でも安心してトレーニングを実施できます。


IT講師募集のページを見る

SNSでもご購読できます。

コメント

コメントを残す

*

未経験からの育成制度も充実
IT講師に興味はありませんか?

リスキルテクノロジーでIT講師の積極募集を開始! 経験・未経験問わずご応募可能。育成制度で講師スキル向上も目指せます

IT講師に応募する