Linuxのシェルスクリプトif文の使い方!条件分岐させる方法など解りやすく解説!

Linux if文を作成する方法を 条件分岐の違いやパターン別・演算子別で表を交えながら分かりやすくまとめました。基本的な書式ルールもありますが、Linux ifを使用する上で理解して置いたら助かる情報をお届けします。

Linuxのシェルスクリプトif文の使い方!条件分岐させる方法など解りやすく解説!のイメージ

目次

  1. 1Linuxのシェルスクリプト(bash)のif文について
  2. if文って何?
  3. if文の書式について
  4. 文字列を比較する演算子
  5. 数値を比較する演算子
  6. ファイルチェックできる演算子
  7. 2Linuxのif文のパターン別の使い方
  8. 文字列を比べる場合
  9. 数値を比べる場合
  10. コマンド実行NOT(否定)条件について
  11. 3Linuxのif文でファイルをチェックしよう
  12. -eオプションを使ってファイル探し
  13. ファイルの比較条件
  14. AND・OR条件を使う
  15. 4Linuxのif文で条件分岐させてみよう!

Linuxのシェルスクリプト(bash)のif文について

Linuxとはパソコンを動かしているOS(オペレーションシステム)の一つです。有名なOSとして良く耳にするのがWindowsや、MacOSがあります。携帯電話のOSではiosやAndroidがあります。

LinuxはUnix系OSの為、シェルスクリプト言語を使用します。Unixとは、コンピューター用のマルチタスク(複数のプログラムを切り替えて実行できるシステム)・マルチユーザー(1台のパソコンを同時に複数の人が利用できるOS)のOSの一種です。

シェルスクリプトとは、コマンドを書いて何かの処理をさせるプログラムです。またLinuxシェルスクリプトはbashですbashとは、シェルの一種です。シェルとはコマンドを受けて意図した処理を実行するプログラムの事を言います。

ThumbWindows10でLinuxを使う方法!WSLをインストールする方法を解説!
Windows10ではLinuxを正式に使うことができるようになりました。インストール方法は...

if文って何?

Linuxのif文とは、処理を分岐させる事ができる機能です。まさしく「if=もし~ならば」という条件で処理を分岐させたい時に使えます。「AがBなら処理を分岐したい」「Aを含む場合処理を分岐したい」「Aが~なら処理を分岐したい」という様な感じです。

if文の書式について

if文の書式は分岐したい条件に応じたシェルスクリプト(bash)を作成していきます。if文には3パターンの書式があります。

条件が真の場合の書式 if then fi
条件に該当しない場合の書式 if then else fi
分岐条件が複数の場合の書式 if then elif then else fi
また、ただ単に条件を分岐させる事から、文字列や数値を比べたり、ファイルチェックを行うプログラムを作成する事が可能です。

条件分岐の方法

「Aが~なら分岐処理を行う」という様な、条件を付けた処理を行いたい時にif文を使用します。

  1. if[条件式];then
  2.  分岐処理1
  3. fi

該当しない場合はelse

上記の分岐条件を基準としたシェルスクリプトに「該当しない場合は~」という分岐条件を追加したい場合は「else」コマンドを入れます。

  1. if[条件式];then
  2.  分岐処理1
  3. else
  4.  分岐処理2
  5. fi

分岐処理が複数の場合はelif

Linuxのif文は「if条件式」「then」1行で記入していく必要がありますただし、複数の条件分岐がある場合に「then」の記入だけで1行消費すると可読性が低下します。その為、複数の条件分岐がある場合は、if文を記入するときに;(セミコロン)を活用し、1行でif条件式と「then」を記入していく方が良いです。

また、分岐処理が複数になる場合には「else」ではなく「elif」を追加して分岐処理していきます。

  1. if[条件式];then
  2.  分岐処理1
  3. elif
  4.  分岐処理2
  5. else
  6.  分岐処理3
  7. fi

文字列を比較する演算子

Linuxのif文では文字列を比較する事が可能です。比較内容によってシェルスクリプト(bash)に記載するときの演算子は5種類あります。
 

    文字列   文字列の長さが1以上だったら真
 -n文字列   文字列の長さが1以上だったら真
 -Z文字列  文字列の長だ0だったら真 
 文字列1=文字列2   2つの文字列が等しい場合は真
 文字列1!=文字列2   2つの文字列が等しくない場合は真 

数値を比較する演算子

Linuxのif文で数値を比較する時は、数値を計算して比較するのではなく、数値を条件で比較する演算子を使用します。

数値1 -eq数値2 数値1と数値2が等しければ真
数値1 -ne数値2 数値1と数値2が等しくなければ真 
数値1 -gt数値2 数値1が数値2より大きければ真
数値1 -ge数値2 数値1が数値2と等しい、もしくは大きければ真
数値1 -lt数値2 数値1が数値2より小さければ真
数値1 -le数値2  数値1が数値2と等しい、もしくは小さければ真

ファイルチェックできる演算子

Linuxのif文でファイルチェックを行う為の演算子は下記の10種類があります。

 -aファイル名 ファイルがあれば真
 -bファイル名 ブロックス特殊ファイルなら真
 -cファイル名  キャラクター特殊ファイルなら真 
 -dファイル名 ファイル名がディレクトリなら真 
 -eファイル名  ファイルが存在するなら真
 -fファイル名 通常ファイルの場合は真 
 -gファイル名 SGID(特殊なアクセス権)なら真
 -Gファイル名 実行グループIDによる所有者なら真
  -hファイル名 シンボクリックなら真(-Lでも可能)
 -kファイル名 ステッキービットが設定されていれば真
 -Lファイル名 シンボリックリンクなら真(-hでも可能)
 -oファイル名 実行グループIDによる所有者なら真
 -pファイル名 名前付きパイプなら真
 -rファイル名  読み取り可能ファイルなら真
 -sファイル名 ファイルサイズが0より大きければ真
 -Sファイル名 ソケットであれば真
 -t FD FDが端末でオープンされていたら真
 -uファイル名 SUID(特殊なアクセス権)なら真
 -wファイル名 書き込み可能ファイルなら真
 -xファイル名  実行可能ファイルなら真
 -zファイル名 文字列長が0なら真
 ファイルA-ntファイルB  ファイルAがファイルBより新しければ真
 ファイルA-otファイルB ファイルAがファイルBより古い場合は真 

Linuxのif文のパターン別の使い方

Linuxのif文では「文字列の比較演算子」「数値の比較演算子」「ファイルの比較演算子」でパターン別の使い方があります。上記で紹介した演算子を活用し、if文をシェルスクリプト(bash)で作成する方法を見ていきす。

文字列を比べる場合

Linuxのif文で文字列を比較したい場合は、分岐させたい条件にあてはまる演算子を使用します。今回は「=」を使用し、2つの文字列が等しいかどうかを確認するif文を作成します。

  1. ”!/bin/bash
  2. STR1=hana
  3. STR2=mizu
  4.  
  5. if[$STR1 =STR2];then
  6.  echo '文字列は等しいです。'
  7. fi

数値を比べる場合

Linuxのif文で数値を比べていく場合は「test」コマンドが便利です。「test」コマンドは2つの数値を比較し、評価してくれます。評価内容はオプションから設定する事が可能です。画面上には、評価結果に従い真(0)か偽(1)かのみを表示するのが特徴です。「test」コマンドは[]を代用して記入する事が出来ます。数値を比べる場合は、分岐条件に該当する演算子を使用していきます。

シェルスクリプト(bash)への記入は下記の様に「if testの後の(条件式)」の所には条件分岐させたい数値の演算子を記入します。

  1. if test(条件式);then
  2. echo(分岐処理1)
  3. fi

testコマンドを[]で代用してシェルスクリプトへ記入する事もできます。

  1. if[ 条件式 ];then
  2. echo(分岐処理1)
  3. fi
[]使い方の注意として、[の最初と、最後の]の文字列との間に半角スペースを必ず入れて下さい。

値は等しいかどうか

Linuxのif文で、数値の値が等しいかを調べる時は演算子「数値1-eq数値2」を使用して、シェルスクリプト(bash)を記入していきます。

  1. #!/usr/bin/bash
  2. NUM1=10
  3. NUM2=20
  4. NUM3=10
  5.  
  6. if[$NUM-eq$NUM2];then
  7. echo'NUM1とNUM2は等しくない’
  8. elif[$NUM1-eq$NUM3]:then
  9. echo'NUM1とNUM3は等しい'
  10. else
  11. echo'どちらにも当てはまらない’
  12. fi

上記のシェルスクリプト(bash)を「test」コマンドを使用して作成する場合。

  1. test数値1-eq数値2
  2. $test1-eq1;echo$?
  3. 0
  4. $test1-eq2:echo$?
  5. 1

大小比較

Linuxのif文で、数値の大小を比べる場合は演算子「-gt・-lt・-ge・-le」の中から分岐条件に当てはまる演算子を使用します。今回は演算子「数値1 -gt数値2 数値1が数値2より大きければ真」を使用します。

  1. test 数値1-gt数値2
  2. $test1-gt2;echo$?
  3. 1
  4. $test2-gt1;echo$?
  5. 0

上記3.の1と言う数字は(偽)を表しているので数値1が数値2より、大きくないという結果です。5.の0と言う数字は(真)を表しているので数値2が数値1より、大きいという結果が読み取れます。

コマンド実行NOT(否定)条件について

Linuxのif文で、コマンド実行をNOT(否定)する分岐条件を行うシェルスクリプト(bash)を作成する方法は、逆転の発送です。否定する条件を分岐処理するというのではなく「!=」を使用し「!=」の後に続くコマンドの終了した結果を反転するという使い方をします。「反転=問いかけに関する否定」という解釈です。

文字列比較の場合

文字列のコマンド実行をNOT(否定)で比較を行うif文を作成する場合は、「!=」を使います。「文字列が等しいなら真」という比較を行う時に使用した「=」と反対の意味になるため「=!」は等しくない場合は真、という否定の意味で使用します。

  1. test 文字列1 != 文字列2
  2. $[ ”hana" != ”hana” ];echo
  3. 1
  4. $[ ”hana" != ”mizu” ];echo
  5. 0

 

数値比較の場合

Linuxのif文で、数値のコマンド実行をNOT(否定)で比較する場合は、数値のNOT(否定)処理を行う為の演算子「-ne」を使用します。

Linuxのif文でファイルをチェックしよう

Linuxのif文ではファイルを「探す・比較する・様々な分岐条件で比較する」と言った事が可能です。それぞれ使い方と演算子が異なるので使い分けを覚えてしまえば簡単です。

-eオプションを使ってファイル探し

ファイルを探す場合は「-e」の演算子で確認することが出来ます。「-e」は本来ファイルが存在するかどうかの条件分岐ですので、「探したいファイルが存在すれば有る」という解釈になるのです。試しに”シェルスクリプト”というファイルが存在するかを検証してみます。
check_file_1.sh

  1. #!/bin/basH
  2.  
  3. FILE=”シェルスクリプト”
  4. if [ -e $シェルスクリプト ];then
  5.  echo "ファイルが存在します”
  6. fi

ThumbLinuxでファイル検索のfindコマンドを使ってファイルを探す方法を解説!
Linuxではファイルの検索はコマンドを使って検索します。今回はLinuxでファイル検索を行...

ファイルの比較条件

Linuxのif文で、ファイルを比較する場合には、最初の方で紹介した(ファイルチェック出来る演算子)「ファイル名-ntファイル名」「ファイル名-otファイル名」のどちらか条件に当てはまる演算子を使います。使い方は下記の様に「test」コマンドを活用します。 

test ファイル1-ntファイル2
test ファイル1-otファイル1 

 

AND・OR条件を使う

Linuxのif文でファイルを複数の条件式から比較したい場合は、AND・ORを使用します。

 AND   条件式1-a条件式2   条件式1と条件式2のどちらも真なら真
 OR  条件式1-b条件式2   条件式1か条件式2のどちらかが真なら真 

Linuxのif文で条件分岐させてみよう!

難しい様に思えるLinuxのif文で条件分岐させる方法ですが、それぞれの条件分岐に当てはまる演算子と、シェルスクリプトを記入する時の書式の基本ルールを覚えてしまえば意外に難しくありません。是非一度Linux if文を活用してみましょう。

ThumbGoogleChromeをLinux(Ubuntu)にインストールする方法!
Linuxは初心者向けに推奨される人気のOSですが、既存のブラウザはFirefoxに設定され...

関連するまとめ

関連するキーワード

Original
この記事のライター
SNOW.6
誰が読んでも読みやすく、分かりやすい記事作成を心がけています。