Bashスクリプトでif文(条件分岐)を使う方法|基本構文からcase文まで徹底解説
if文とは?条件によって処理を変える仕組み
if文は条件分岐を表す構文の一つで、指定した条件に応じて異なる処理を実行できるようにするものです。いわば、システムに「状況を判断して動きを選ぶ能力」を与えるための基本的な仕組みといえます。
if文の最もシンプルな形
まずは、if文の最も基本的な書き方の例を見てみましょう。
count=5
if [ $count == 5 ]
then
echo "$count"
fi
この例では、変数countがif文の条件として使われています。if文が実行される前に、変数countに値5が代入されます。続くif文は「countの値が5かどうか」を判定し、真であればthenとfiの間に書かれた命令が実行されます。条件が偽の場合は、if文の後に続く命令がそのまま実行されます。
fiというキーワードについて
キーワードfiは、ifを逆から綴ったものです。Bashスクリプトでは、if文やcase文といった複雑な式の終わりを明示するために、この記法が採用されています。
echo文とインデント
echo文は、引数として渡された内容(この例では変数countの値)をターミナル画面に出力します。また、if文のキーワード間のコードをインデントすると可読性が大きく向上しますが、文法上は必須ではありません。
elseを使って条件外の処理を書く
「条件が真ではない場合にだけ実行したい処理」がある場合は、if文の中でelseキーワードを使います。
count=5
if [ $count == 5 ]
then
echo "$count"
else
echo "count is not 5"
fi
この例では、条件$count == 5が真であれば変数countの値が出力され、偽であれば「count is not 5」という文字列が出力されます。
elifで複数の条件を分岐させる
複数の条件を順番に判定して処理を分けたい場合は、else ifに由来するelifキーワードを使用します。
if [ $count == 5 ]
then
echo "count is five"
elif [ $count == 6 ]
then
echo "count is six"
else
echo "none of the above"
fi
このコードの動作は以下のとおりです。
- countが5なら「count is five」が出力される
- countが5ではなく6なら「count is six」が出力される
- どちらでもない場合は「none of the above」が出力される
elif句は必要なだけ何個でも追加できます。複数のelif条件を並べた例がこちらです。
if [ $count == 5 ]
then
echo "count is five"
elif [ $count == 6 ]
then
echo "count is six"
elif [ $count == 7 ]
then
echo "count is seven"
elif [ $count == 8 ]
then
echo "count is eight"
elif [ $count == 9 ]
then
echo "count is nine"
else
echo "none of the above"
fi
case文でより簡潔に書き換える
多数の条件分岐をコンパクトに記述したい場合は、case文が便利です。複数のelif句を持つif文とほぼ同じ動作をしながら、より簡潔にまとめられます。先ほどのコードは、case文を使うと次のように書き換えられます。
case "$count" in
5)
echo "count is five"
;;
6)
echo "count is six"
;;
7)
echo "count is seven"
;;
8)
echo "count is eight"
;;
9)
echo "count is nine"
;;
*)
echo "none of the above"
esac
各条件の末尾には二重セミコロン(;;)を付け、全体はesac(caseを逆から綴ったもの)で閉じます。ワイルドカードの*を指定すると、どの条件にも一致しなかった場合のデフォルト処理を定義できます。
ループ内でif文を使う
if文は、forループやwhileループの中で頻繁に使われます。次の例では、whileループと組み合わせて条件分岐を行っています。
count=1
done=0
while [ $count -le 9 ]
do
sleep 1
(( count++ ))
if [ $count == 5 ]
then
continue
fi
echo "$count"
done
echo Finished
このスクリプトでは、カウンタが5になったタイミングでcontinueにより以降の処理をスキップし、それ以外の数値を順に出力します。
if文のネスト(入れ子構造)
if文は入れ子(ネスト)にすることも可能です。最も単純なネストの形式は「if...then...else...if...then...fi...fi」ですが、実際には任意の複雑さでネストさせることができます。ただし、対応するfiの数を間違えやすいので、インデントを整えて管理するのがおすすめです。
さらに学ぶために
Bashスクリプトへの引数の渡し方も合わせて確認しておくと良いでしょう。コマンドラインから渡されたパラメータを条件分岐で処理する実践的なテクニックが学べます。
また、Bashシェルにはforループ、whileループ、算術式など、if文以外にも多くのプログラミング構造が用意されています。これらを組み合わせることで、柔軟で実用的なシェルスクリプトを作成できます。
-
ExcelのIF関数を使いこなす方法!基本構文からAND・OR、ネストまで徹底解説
Excelは非常に強力な表計算ソフトであり、その全機能を完璧に把握している人はまず存在しないと言っても過言ではありません。膨大な機能が、驚くほどシンプルなインターフェースの中に凝縮されています。この記事では、Excel作業の頻度が高い方なら必ず押さえておきたい「IF関数」の書き方を、基本から順番に解説していきます。 IFステートメント(条件分岐)を書けるようになることは、日々大量の数値を扱う人にとって不可欠なスキルです。マクロほど複雑ではなく、かといって単純な合計計算のように直感的とは言い切れない——まさに中間的な存在ですが、一度覚えてしまえば作業効率が格段に向上します。 IFステートメント
-
LinuxからWindowsパーティション(NTFS)に書き込む方法|読み取り専用を解除する2つの対処法
WindowsとLinuxのデュアルブート環境を使っていると、Linux側からNTFSパーティションをマウントした際に、書き込みができないことに気づくことがあります。ファイルの中身は閲覧できるのに、削除・名前変更・編集、さらには新しいファイルやフォルダーの作成まで一切できない——そんな経験はないでしょうか。 LinuxからWindowsパーティションに書き込めない理由 これは、パーティションが「読み取り専用モード」でマウントされていることが原因です。一部のファイルマネージャーは、Windowsパーティションをマウントする際に警告ダイアログを表示して教えてくれますが、中には何も通知せず、単に書