【bash】if else文の使い方【初心者向け】

Linuxを勉強したい人向け シェル/bash

こんにちは。

普段はIT業界についてのブログを執筆してるエンジニアです。
» 参考:プログラマーの年収は200万円以下です【IT業界の残酷な成功法則】
» 参考:【一生使える本です】bashの解説書 厳選3選【おすすめ】

今回は、bashについての解説記事です。

bashのif else文について調べる人

bashのif else文について調べる人
「bashで条件文の使い方をマスターしたいので、まずはif文の使い方について知りたいです。条件文を書くとき、文字列の比較と数字の比較方法の違いについても知りたいです。またelse文は省略できますか?」

こんな疑問を解決します。

本記事の内容

この記事を書いている私は金融エンジニア歴12年。IRIXやSolarisなどのUnixやCygwin、mac、Linuxなど様々な環境でbashによるスクリプティングを行ってきました。

bashは極めて簡単なプログラミング言語ですが、空白の有無などで構文エラーとなること、javaなど一般的なプログラミング言語に慣れている方にとっては直感的ではない構文であることから、今回はbashの条件文(if else文)を記事にしました。

本記事では、細かい構文に迷ったら、例からコピー&ペーストして使えることを目指しました。少しでもお役に立てますと幸いです。

1.bashにおけるif else文の使い方

bashにおけるif else文の書き方

bashでif文を使う場合、最も基本的な構文は以下の通りです

if [ 《条件文》 ]; then
《コマンド1》
else
《コマンド2》
fi
if [ 《条件文》 ]; then
《コマンド》
fi

具体例

具体例として、以下に文字列同士(str1とstr2)を比較する例を示します。

 
str1="string"
str2="string"
if [ "$str1" = "$str2" ]; then
 echo "同じ文字列です"
else
 echo "異なる文字列です"
fi
 

否定文

条件文では、=の代わりに!=を用いることで否定の条件文になります。

具体例

 
str1="string"
str2="string"
if [ "$str1" != "$str2" ]; then
 echo "異なる文字列です"
else
 echo "同じ文字列です"
fi
 

if文のよくある構文エラー

if文を使うとき、次のように記述するとエラーとなってしまいます。

 
if [ "$str1" = "$str2" ]; then
if ["$str1" = "$str2" ]; then #構文エラー:[と"$str1"の間に空白がない
if [ "$str1" = "$str2"]; then #構文エラー:"$str2"と]の間に空白がない
if [ "$str1" = "$str2" ] then #構文エラー:]の後に;がない

2.数字の比較でif else文を使う

数字同士の比較では=の代わりに-eqを用います。

具体例

 
num1=100
num2=200
if [ $num1 -eq $num2 ]; then
 echo "同じ数です"
else
 echo "異なる数です"
fi
 

もちろん数字の比較演算子は-eq以外にもあり、以下を用いて様々な大小比較が可能です。

演算子 意味
数値1 -eq 数値2 数値1と数値2が等しければ真
数値1 -ne 数値2 数値1と数値2が等しくなければ真
数値1 -gt 数値2 数値1が数値2より大きければ真
数値1 -lt 数値2 数値1が数値2より小さければ真
数値1 -ge 数値2 数値1が数値2以上であれば真
数値1 -le 数値2 数値1が数値2以下であれば真

3.if文中でファイル状態を条件にする

ファイル状態を条件にif文を使う

bashでは文字列や数字の比較だけでなく、ファイルに関する演算子も提供されています。

具体例

 
file1="filename.txt"
if [ -f $file1 ]; then
 echo "$file1は存在します"
else
 echo "$file1は存在しません"
fi
 
演算子 意味
-d ファイル名 ファイル名がディレクトリであれば真
-f ファイル名 ファイルであれば真
-e ファイル名 ファイルがあれば真
-L ファイル名 シンボリックリンクであれば真
-r ファイル名 読み取り可能であれば真
-w ファイル名 書き込み可能であれば真
-x ファイル名 実行可能であれば真
-s ファイル名 ファイルが存在し、空でなければ真
-S ファイル名 ファイルがソケットならば真
ファイルA -nt ファイルB ファイルAがファイルBより新しければ真
ファイルA -ot ファイルB ファイルAがファイルBより古ければ真

4.else文を省略する方法

else文を省略する方法

bashでif文を使う場合、else文を省略することが可能です

if [ 《条件文》 ]; then
《コマンド1》
fi

この場合、条件文にマッチしない場合には何も処理を行いません。

具体例

具体例として、以下に文字列同士(str1とstr2)を比較する例を示します。

 
str1="string"
str2="string"
if [ "$str1" = "$str2" ]; then
 echo "同じ文字列です"
fi
 

5.if else文を省略する方法

if else文を省略する方法

if文は、次のように省略して記載することも可能です

[ 《条件文》 ] && 《コマンド1》 || 《コマンド2》

具体例

 
str1="string"
str2="string"
[ "$str1" = "$str2" ] && echo "同じ文字列です" || echo "異なる文字列です"
 

書き方は異なりますが、if else文と全く同じ意味、同じ結果になります。

今回は以上です。構文エラーにならないよう、コピー&ペーストして使っていただければと思います。

bashでのif else文の使い方の参考になりますと幸いです。

Blog TOP  シェルスクリプトを勉強したい人向け|bashの使い方 記事まとめ

bashの使い方 - もくじ

bashの使い方 - もくじ

シェルとは

 - シェルとは
 - シェルはOSと会話するための言語
 - シェルの種類(bash以外のシェル)
 - シェルスクリプトとは
 - シェルスクリプトの書き方

条件式

 - if else文
 - 文字列の比較
 - &&と||の使い方
 - case文

文字列操作

 - 文字列の連結
 - 文字列の一部を切り出す

繰り返し

 - for文
 - while文
 - while文でリストから1つ要素ずつ処理する

定数

 - 定数の定義

関数

 - 関数の定義

デバッグ

 - デバッグオプション(-x)

実行権限

 - 実行権限のないシェルスクリプトファイルを実行する

 - シェルスクリプトの書籍3選