Linuxのシェルスクリプトif文の使い方!条件分岐させる方法など解りやすく解説!
Linux if文を作成する方法を 条件分岐の違いやパターン別・演算子別で表を交えながら分かりやすくまとめました。基本的な書式ルールもありますが、Linux ifを使用する上で理解して置いたら助かる情報をお届けします。
目次
Linuxのシェルスクリプト(bash)のif文について
Linuxとはパソコンを動かしているOS(オペレーションシステム)の一つです。有名なOSとして良く耳にするのがWindowsや、MacOSがあります。携帯電話のOSではiosやAndroidがあります。
LinuxはUnix系OSの為、シェルスクリプト言語を使用します。Unixとは、コンピューター用のマルチタスク(複数のプログラムを切り替えて実行できるシステム)・マルチユーザー(1台のパソコンを同時に複数の人が利用できるOS)のOSの一種です。
シェルスクリプトとは、コマンドを書いて何かの処理をさせるプログラムです。またLinuxのシェルスクリプトはbashです。bashとは、シェルの一種です。シェルとはコマンドを受けて意図した処理を実行するプログラムの事を言います。
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文を使用します。
- if[条件式];then
- 分岐処理1
- fi
該当しない場合はelse
上記の分岐条件を基準としたシェルスクリプトに「該当しない場合は~」という分岐条件を追加したい場合は「else」コマンドを入れます。
- if[条件式];then
- 分岐処理1
- else
- 分岐処理2
- fi
分岐処理が複数の場合はelif
Linuxのif文は「if条件式」と「then」を1行で記入していく必要があります。ただし、複数の条件分岐がある場合に「then」の記入だけで1行消費すると可読性が低下します。その為、複数の条件分岐がある場合は、if文を記入するときに;(セミコロン)を活用し、1行でif条件式と「then」を記入していく方が良いです。
また、分岐処理が複数になる場合には「else」ではなく「elif」を追加して分岐処理していきます。
- if[条件式];then
- 分岐処理1
- elif
- 分岐処理2
- else
- 分岐処理3
- 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文を作成します。
- ”!/bin/bash
- STR1=hana
- STR2=mizu
- if[$STR1 =STR2];then
- echo '文字列は等しいです。'
- fi
数値を比べる場合
Linuxのif文で数値を比べていく場合は「test」コマンドが便利です。「test」コマンドは2つの数値を比較し、評価してくれます。評価内容はオプションから設定する事が可能です。画面上には、評価結果に従い真(0)か偽(1)かのみを表示するのが特徴です。「test」コマンドは[]を代用して記入する事が出来ます。数値を比べる場合は、分岐条件に該当する演算子を使用していきます。
シェルスクリプト(bash)への記入は下記の様に「if testの後の(条件式)」の所には条件分岐させたい数値の演算子を記入します。
- if test(条件式);then
- echo(分岐処理1)
- fi
testコマンドを[]で代用してシェルスクリプトへ記入する事もできます。
- if[ 条件式 ];then
- echo(分岐処理1)
- fi
値は等しいかどうか
Linuxのif文で、数値の値が等しいかを調べる時は演算子「数値1-eq数値2」を使用して、シェルスクリプト(bash)を記入していきます。
- #!/usr/bin/bash
- NUM1=10
- NUM2=20
- NUM3=10
- if[$NUM-eq$NUM2];then
- echo'NUM1とNUM2は等しくない’
- elif[$NUM1-eq$NUM3]:then
- echo'NUM1とNUM3は等しい'
- else
- echo'どちらにも当てはまらない’
- fi
上記のシェルスクリプト(bash)を「test」コマンドを使用して作成する場合。
- test数値1-eq数値2
- $test1-eq1;echo$?
- 0
- $test1-eq2:echo$?
- 1
大小比較
Linuxのif文で、数値の大小を比べる場合は演算子「-gt・-lt・-ge・-le」の中から分岐条件に当てはまる演算子を使用します。今回は演算子「数値1 -gt数値2 数値1が数値2より大きければ真」を使用します。
- test 数値1-gt数値2
- $test1-gt2;echo$?
- 1
- $test2-gt1;echo$?
- 0
上記3.の1と言う数字は(偽)を表しているので数値1が数値2より、大きくないという結果です。5.の0と言う数字は(真)を表しているので数値2が数値1より、大きいという結果が読み取れます。
コマンド実行NOT(否定)条件について
Linuxのif文で、コマンド実行をNOT(否定)する分岐条件を行うシェルスクリプト(bash)を作成する方法は、逆転の発送です。否定する条件を分岐処理するというのではなく「!=」を使用し「!=」の後に続くコマンドの終了した結果を反転するという使い方をします。「反転=問いかけに関する否定」という解釈です。
文字列比較の場合
文字列のコマンド実行をNOT(否定)で比較を行うif文を作成する場合は、「!=」を使います。「文字列が等しいなら真」という比較を行う時に使用した「=」と反対の意味になるため「=!」は等しくない場合は真、という否定の意味で使用します。
- test 文字列1 != 文字列2
- $[ ”hana" != ”hana” ];echo
- 1
- $[ ”hana" != ”mizu” ];echo
- 0
数値比較の場合
Linuxのif文で、数値のコマンド実行をNOT(否定)で比較する場合は、数値のNOT(否定)処理を行う為の演算子「-ne」を使用します。
Linuxのif文でファイルをチェックしよう
Linuxのif文ではファイルを「探す・比較する・様々な分岐条件で比較する」と言った事が可能です。それぞれ使い方と演算子が異なるので使い分けを覚えてしまえば簡単です。
-eオプションを使ってファイル探し
ファイルを探す場合は「-e」の演算子で確認することが出来ます。「-e」は本来ファイルが存在するかどうかの条件分岐ですので、「探したいファイルが存在すれば有る」という解釈になるのです。試しに”シェルスクリプト”というファイルが存在するかを検証してみます。
check_file_1.sh
- #!/bin/basH
- FILE=”シェルスクリプト”
- if [ -e $シェルスクリプト ];then
- echo "ファイルが存在します”
- fi
ファイルの比較条件
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文を活用してみましょう。