Linuxのシェルスクリプトには他のプログラミング言語同様if文による条件分岐が可能です。
ここではシェルスクリプトで使用するif文について以下の内容で解説していきます。
・if文とは
・if文で使用できる演算子
・if文で文字列の比較
・if文で数値の比較
・if文でファイルのチェック
この記事ではif文ついてわかりやすく解説していますので、ぜひ使い方を覚えておきましょう!
if文とは
if文とはプログラムにおいて、処理を分岐するために使用する機能になります。
たとえば、
「文字列が一致しているかどうかで処理を分岐したい。」
「年齢が20歳以上と以下で処理を分岐したい。」
「ファイルの存在チェックを行い、存在するならファイルを読み込みたい。」
などの用途でif文はよく使用されます。
シェルスクリプトでのif文の書式は以下となります。
if [条件式]; then 分岐処理1 fi
また、分岐処理1に該当しない場合の処理を実行したい場合は「else」を指定します。
if [条件式]; then 分岐処理1 else 分岐処理2 fi
分岐処理を複数に分けたい場合は「elif」を指定します。通常のプログラミング言語では「else if」ですが、シェルスクリプトの場合は省略されています。
if [条件式1]; then 分岐処理1 elif [条件式2]; then 分岐処理2 else 分岐処理3 fi
if文で使用できる演算子
ここでは、if文で使用できる演算子を紹介します。
文字列の比較
演算子 | 説明 |
---|---|
文字列 | 文字列の長さが1以上だったら真 |
-n 文字列 | 文字列の長さが1以上だったら真 |
-z 文字列 | 文字列の長さが0の場合は真 |
文字列1 = 文字列2 | 2つの文字列が等しい場合は真 |
文字列1 != 文字列2 | 2つの文字列が等しくない場合は真 |
数値の比較
演算子 | 説明 |
---|---|
数値1 -eq 数値2 | 数値1と数値2が等しい場合は真 |
数値1 -ne 数値2 | 数値1と数値2が等しくなければ真 |
数値1 -ge 数値2 | 数値1が数値2と等しい、又は大きい場合は真 |
数値1 -gt 数値2 | 数値1が数値2より大きい場合は真 |
数値1 -lt 数値2 | 数値1が数値2より小さい場合は真 |
数値2 -le 数値2 | 数値1と数値2が等しい又は小さい場合は真 |
ファイルチェック
演算子 | 説明 |
---|---|
-d ファイル名 | ファイル名がディレクトリ名なら真 |
-f ファイル名 | ファイルの場合は真 |
-e ファイル名 | ファイルが存在するなら真 |
-L ファイル名 | シンボリックリンクなら真 |
-r ファイル名 | 読み取り可能なら真 |
-w ファイル名 | 書き込み可能なら真 |
-x ファイル名 | 実行可能なら真 |
-s ファイル名 | ファイルサイズが0でなければ真 |
ファイルA -nt ファイルB | ファイルが等しければ真 |
ファイルA -ot ファイルB | ファイルAがファイルBより古い場合は真 |
if文を使ってみよう
文字列の比較
ここではif文で文字列同士の比較をしてみましょう。
以下では2つの文字列を比較して、一致しなければ真の処理が実行されます。
#!/usr/bin/bash STR1=samurai STR2=engineer if [ $STR1 != $STR2 ]; then echo '文字列は等しくありません。' fi
実行結果:
文字列は等しくありません。
STR1とSTR2は等しく無いので「文字列1 != 文字列2」の条件式は真となり、真の処理であるechoでの出力処理が実行されます。
数値の比較
続けて数値の比較処理を実施してみましょう。
以下の処理では変数NUM1、NUM2、NUM3の値をそれぞれ比較しています。
#!/usr/bin/bash NUM1=100 NUM2=200 NUM3=100 if [ $NUM1 -eq $NUM2 ]; then echo 'NUM1とNUM2は等しくない' elif [ $NUM1 -eq $NUM3 ]; then echo 'NUM1とNUM3は等しい' else echo 'どちらにも当てはまらない' fi
実行結果:
NUM1とNUM3は等しい
このシェルスクリプトではNUM1とNUM2、NUM3をそれぞれ比較し、数値が等しかった場合は分岐処理が実行されます。
ファイルのチェック
最後にファイルをチェックする条件分岐について見ていきましょう。
以下の処理ではファイルが存在するか確認しています。
#!/usr/bin/bash if [ ! -f /home/nao/shell/test.txt ]; then echo 'ファイルが存在しません' else echo 'ファイルが存在します' cat /home/nao/shell/test.txt fi
実行結果:
ファイルが存在します samurai engineer blog
ファイルが存在したので、echoで文字列を出力し、catでファイルの内容を表示しています。
まとめ
ここでは、Linuxのシェルスクリプトでif文による条件分岐について解説しました。
- if文とは
- if文の使い方
- if文で使用できる演算子
- if文で文字列の比較
- if文で数値の比較
- if文でファイルのチェック
シェルスクリプトの中でもif文は使用頻度が高い処理ですので、使い方はしっかりと理解しておきましょう。
もし、if文の使い方を忘れてしまったら、この記事を思い出してくださいね!