【初心者向け】Bashスクリプトでif…else文を使う方法(実例つき)
Bashスクリプトは、Linux環境でのタスク自動化に欠かせない強力なツールです。
ローカルでの開発作業(デプロイ用ファイルのアップロード、アプリのコンパイル、画像の一括リサイズなど)から、サーバー側の処理(定時メールの送信、一定間隔でのデータ収集、デバイスへの通知送信)まで、幅広い用途で活用できます。
あるタスクの結果や変数の値によって、次に行う処理を変えたい場面はよくあります。そんなときに役立つのが「if … else」による条件分岐です。Bashスクリプトでは、このような判断処理を「条件分岐(conditional)」と呼びます。
本記事では、Bashにおけるif…else文の詳細と具体的な使用例を解説します。
if文の基本的な使い方
シンプルなif文は、条件が真(true)の場合にのみ、その中に記述した処理を実行します。基本構文は以下のとおりです。
if CONDITIONS; then
ACTIONS
fi
実際の例を見てみましょう。
#!/bin/bash
if [ 2 -lt 3 ]; then
echo "2 is less than 3!"
fi
この例のポイントは以下のとおりです。
- Bashスクリプトは必ず1行目に#!/bin/bash(シバン)を記述します
- -lt演算子は「左辺が右辺より小さいか」を判定します。逆に「大きいか」を調べたい場合は-gtを使います
- その他の論理演算子については、後述の一覧を参照してください
- echoコマンドでテキストをコマンドラインに出力しています
- if文は必ずfiで終了します
else文の使い方
条件が成り立つときと成り立たないときで、異なる処理を実行したい場合はelse文を使います。
#!/bin/bash
echo -n "Enter number: "
read number
if [ "$number" -lt 3 ]; then
echo "$number is less than 3!"
else
echo "$number is not less than 3!"
fi
この例のポイント:
- 値の比較やテキスト出力には、前述の要素をそのまま使っています
- readコマンドでユーザーの入力を受け付けています
- 変数を使って値を保存し、後から利用しています
elif(else if)文の使い方
複数の条件を順番に判定し、それぞれに対応する処理を行いたい場合はelif(else if)文を使用します。
#!/bin/bash
echo -n "Enter number: "
read number
if [ "$number" -lt 3 ]; then
echo "$number is less than 3!"
elif [ "$number" -eq 3 ]; then
echo "$number is equal to 3!"
else
echo "$number is not less than 3!"
fi
複数条件の組み合わせ(AND・OR)
複数の条件を同時にチェックしたい場合は、&&(AND)や||(OR)演算子を組み合わせて、処理を実行するかどうかを判断できます。
#!/bin/bash
echo -n "Enter number: "
read number
if [[ "$number" -lt 3 ]] && [[ "$number" -lt 0 ]]; then
echo "$number is less than three and is negative"
elif [[ "$number" -lt 3 ]] || [[ "$number" -gt 6 ]]; then
echo "$number is not negative, but is less than 3 or greater than 6"
else
echo "$number is greater than 3 and less than 6"
fi
if文のネスト(入れ子構造)
if文の中に、さらに別のif文を入れることもできます。
#!/bin/bash
echo -n "Enter number: "
read number
if [ "$number" -gt 3 ]; then
echo "$number is greater than 3"
if [ "$number" -gt 6 ]; then
echo "$number is also greater than 6"
else
echo "$number is not greater than 6"
fi
fi
比較演算子の一覧
これまでの例では、-lt(より小さい)、-gt(より大きい)、=(等しい)といった演算子を使用しました。ここで、よく使われる主な論理演算子を紹介します。
数値の比較
$number1 -eq $number2 : 2つの値が等しければtrueを返す $number1 -gt $number2 : $number1が$number2より大きければtrueを返す $number1 -ge $number2 : $number1が$number2以上ならtrueを返す $number1 -lt $number2 : $number1が$number2より小さければtrueを返す $number1 -le $number2 : $number1が$number2以下ならtrueを返す
文字列の比較
$string1 = $string2 : 2つの文字列が等しければtrueを返す $string1 != $string2 : 2つの文字列が等しくなければtrueを返す
比較結果を反転させたい場合は、式の前に!(NOT)演算子を付けます。たとえば!=は「等しくない(NOT EQUALS)」を意味します。
文字列を比較するときは、必ずダブルクォートで囲みましょう。スペースが含まれていても、Bashスクリプトに誤って解釈されるのを防げます。
同様に、文字列を格納する変数もクォートで囲んでおくと安全です。
#!/bin/bash
echo -n "Enter string: "
read string
if [ "$string" = "hello there!" ]; then
echo "You said hello there!"
fi
ファイルやディレクトリの状態を確認する
if文は、ファイルやディレクトリの存在・属性をチェックする際にも活用できます。
-d $filepath : $filepathが存在し、ディレクトリである場合にtrueを返す -e $filepath : $filepathが存在すれば、ファイルかディレクトリかを問わずtrueを返す -f $filepath : $filepathが存在し、通常ファイルである場合にtrueを返す -h $filepath : $filepathが存在し、シンボリックリンクである場合にtrueを返す -r $filepath : $filepathが存在し、読み取り可能な場合にtrueを返す -w $filepath : $filepathが存在し、書き込み可能な場合にtrueを返す -x $filepath : $filepathが存在し、実行可能な場合にtrueを返す
まとめ
自分でBashスクリプトを作成できるようになると、作業時間を大幅に節約できます。基本的な構成要素を押さえてしまえば、思ったよりも簡単に書けるようになるでしょう。
if…else文を使いこなせるようになれば、ユーザー入力やファイルの状態に応じて、スクリプトの動作を柔軟に制御できます。
他のBash関連記事もぜひ参考にしてみてください!
-
Linuxのwatchコマンドの使い方と実用例をわかりやすく解説
Linuxのwatchコマンドは、指定したコマンドを一定間隔で繰り返し実行し、その結果を画面に表示し続けるためのツールです。コマンドの出力が時間とともにどう変化するかをリアルタイムで監視したい場合に非常に便利です。この記事では、watchコマンドの基本的な使い方と、覚えておくと役立つ実用的な例を紹介します。 watchコマンドの基本構文 watchコマンドの構文は以下のとおりです。 watch オプション コマンド 各要素の意味は次のとおりです。 オプション: 後述の表から選択したオプションを指定します。watchコマンドのデフォルト動作を変更できます。 コマンド: watchが繰り返し実行
-
【完全ガイド】Excel VBAでテーブルを参照する方法20選
大量のデータを扱うExcelブックでは、セル範囲全体を指定するよりも、テーブルを名前で参照する方がはるかに便利です。そして、あらゆる操作を高速・確実・効率的に実行するには、VBA(Visual Basic for Applications)の活用が最適な手段となります。本記事では、「Excel VBAでテーブルを参照する方法」について、実践的な20のサンプルコードを使いながら徹底的に解説します。基本から応用まで順を追って学び、ぜひ日々の業務に役立ててください。 ListObjectプロパティでテーブルを参照する基礎知識 VBAのコード内でExcelのテーブルを参照する際に使われるのがList