Shell プログラミング

シェルスクリプトのif文の基本構文と条件分岐オプションの書き方

投稿日:

こんにちは!シミダイ(@shimidai2100)です。

この記事を読めばシェルスクリプトで開発時に必要なif文の基本構文条件分岐オプションの書き方マスターすることができます。

シェルスクリプトでもif文(条件分岐文)を利用する時には、比較対象が文字列なのか?数値型なのか?を意識する必要があります。

またファイルやディレクトリが存在するか?ファイルの権限はどんな状態か?などシェルスクリプト独特の条件分岐も存在します。

この記事で習得できること

  • シェルスクリプトの基本構文
  • シェルスクリプトの文字列比較・数値比較のやり方
  • オプションを利用した条件分岐
  • 上記の条件を論理和・論理積・論理否定で使用する方法

if文の基本構文

まずはif文の基本構文を学びましょう。

シェルスクリプトも通常のプログラミング言語と同様に「if-then」で書きます。

if文

下が最も単純なif文です。「[] : square brackets」の間の条件に半角スペースを忘れないようにしましょう。

if-else文

次がif-else文です。条件以外ならばelse文の処理が実行されます。

if-elseif-else文

次がif-elseif-else文です。elseif文はシェルスクリプトでは「elif」と書くので注意してください。

文字列を比較する方法

↓が文字列を比較方法の一覧です。

オプション意味
文字列A = 文字列B文字列Aと文字列Bが等しければ真
文字列A != 文字列B文字列Aと文字列Bが等しくなければ真
文字列文字列の長さが0より大きければ真
-n 文字列
-z 文字列文字列の長さが0であれば真

↓がサンプルスクリプトになります。

数値を比較する方法

数値を比較の一覧は↓になります。覚え方も載せておきますので暗記しましょう。

オプション意味覚え方
数値A -eq 数値B数値ABが等しければ真となる。equal => -eq
数値A -ne 数値B数値ABが等しくなければ真となる。not equal => -ne
数値A -lt 数値B数値A<数値Bならば真となる。less than => -lt
数値A -le 数値B数値A ≦ 数値Bならば真となる。less than or equal => -le
数値A -gt 数値B数値A > 数値Bならば真となる。greater than => -gt
数値A -ge 数値B数値A ≧ 数値Bならば真となる。greater than or equal => -ge

↓がサンプルスクリプトになります。

ファイル・ディレクトリの確認

ファイル・ディレクトリが存在するか?権限の設定はどうなっているか?を確認するかは、

シェルスクリプトを書く上でマストで覚えるべき条件文になります。

↓がファイル・ディレクトリ確認関連のオプションになります。

オプション意味
-e ファイル名 or ディレクトリ名ファイルが存在するならば真
-f ファイル名ファイルが普通のファイルならば真
-s ファイル名ファイルが 0 より大きいサイズならば真
-L シンボリックリンクファイルがシンボリックリンクならば真
-ef シンボリックリンクファイルがハードリンクならば真
-d ディレクトリ名ディレクトリ名がディレクトリならば真
-r ファイル or ディレクトリ名ファイルやディレクトリが読み取り可能ならば真
-w ファイル or ディレクトリ名ファイルやディレクトリが書き込み可能ならば真
-x ファイル or ディレクトリ名ファイルやディレクトリが実行可能ならば真
-O ファイル or ディレクトリ名ファイルやディレクトリが実行ユーザの所有者ならば真
-G ファイル or ディレクトリ名ファイルやディレクトリが実行ユーザのグループならば真
ファイルA -ot ファイルBファイルAがファイルBよりファイル更新が古ければ真
ファイルA -nt ファイルBファイルAがファイルBよりファイル更新が新しければ真

これらのオプションは「test」コマンドが省略されていることも頭の片隅に入れておいてください。

↓がサンプルスクリプトです。

複数の条件(OR・AND・NOT)を利用

前述で紹介した条件を、複数の条件で利用する方法を紹介します。

オプション意味
条件A -o 条件B条件Aまたは条件Bの場合は真
条件A || 条件B
条件A -a 条件B条件Aかつ条件Bの場合は真
条件A && 条件B
! 条件条件が偽の時は真

OR条件(論理和)AND条件(論理積)は2つ利用できますが、

||」や「&&」を利用するとシェルスクリプトを使ったことがない人にも分かりやすくなります。

また一般的なプログラミング同様に、論理積と論理和が複合される演算では論理和から処理がされる点に注意しましょう。

↓がサンプルスクリプトになります。

おまけ:その他覚えておくこと

その他私が知らなかったものがあったので備忘録のため載せておきます。

「help test」コマンドで利用できるオプションを確認することができます。

オプション意味
-b ファイル名ファイルがブロック型デバイスならば真
-c ファイル名ファイルがキャラクタ型デバイスならば真
-u ファイル名ファイルにuidビットが立っていたら真
-g ファイル名ファイルにgidビットが立っていたら真
-k ファイル名ファイルにstickyビットが立っていたら真
-S ファイル名ファイルがソケットならば真
-p ファイル名ファイルが名前付きパイプ(FIFO)ならば真
-t numファイルディスクリプタnumが端末ならば真
-t 0標準入力が端末であれば真
-t 1標準出力が端末であれば真
-t 2標準エラー出力が端末であれば真

参考シェルスクリプトの条件式や演算子におけるメモ

スポンサードリンク

関連記事

-Shell, プログラミング

Translate »

Copyright© shimidai2100 , 2018 All Rights Reserved.