Bourne Again Shell(Bash)スクリプトを作成することは、特にそのロジックを追加して堅牢性を確保する場合、満足感のある経験になることがあります。スクリプトをよりスマートにするための一つの方法は、条件文を使用することです、特に「bash if else」です。
この詳細な解説では、Bashのif-elseやcase文の力と微妙なニュアンスを把握することになります。これにより、エラーのない、インテリジェントなBashスクリプトを作成するのに役立ちます。また、プロのようにスクリプトを作成するためのベストプラクティスもいくつか紹介します。
興奮していますか?掘り下げて、Bashスクリプトの技術を向上させましょう!
舞台を設定する:前提条件
このチュートリアルを最大限に活用するために、いくつかの必要なものを用意しておく必要があります:
- A Linux or Windows system armed with Bash. For those on Windows, the Windows Subsystem for Linux (WSL) is your best bet.
- A code/text editor to write and refine your ‘bash if else’ scripts.
なぜbash if else文を活用すべきですか?
Bashスクリプトで条件文がなぜ尊重されるのか?簡単に言えば、事前に定義された条件に基づいて、スクリプトに意思決定の能力を付与します。
たとえば、「bash if else」を使用して、ファイルが存在するかどうかを確認してから削除を試みることができます。また、リソースにアクセスする前にユーザーが必要な権限を持っているかどうかを確認したい場合もあります。
「bash if else」の構造をスクリプトに組み込むことは、柔軟性だけでなく、効果も高めます。フォルダ内のすべてのファイルを削除するスクリプトを想像してみてください。「bash if else」を使用することで、30日以上経過したファイルのみを手術的に削除し、他のファイルを保護することができます。
「bash if else」文にダイブする
さあ、紹介はこれくらいにして、実際の作業に入りましょう。まずは、最も広く受け入れられている条件文のひとつ、 「bash if else」文から始めましょう。
「bash if else」文は、Bashスクリプトに条件分岐を挿入するためのゲートウェイです。以下にそのエレガントな構文をご覧ください。
- ifキーワードで始まり、[[ ]]で囲まれた条件が続きます。その後、 「bash if else」文内のコードが実行され、fiキーワードで終了します。
- thenキーワードは、条件が満たされた場合に実行されるアクション(またはステートメント)を条件から分離します。このアクションブロックは、セミコロン(;)で区切られた複数の行にまたがることができます。
ログインシステムのスクリプトを想像してみてください。正しいユーザー名を入力するように促され、アクセスが許可されます。
1. ターミナルを起動し、お好みのテキストエディタを使用して新しいbash_if_demo.shファイルを作成します。これは「bash if else」文を理解するためのプレイグラウンドとなります。
2. 以下に示す「bash if else」の例を、bash_if_demo.shファイルに埋め込んでください。挿入後、変更内容を保存してエディタを終了してください。
「bash if else」スクリプトのサンプルでは、ユーザ名を入力するようにプロンプトが表示されます。期待するユーザ名が入力された場合、現在の日付と時刻が補足された歓迎メッセージが表示されます。
ユーザのアクセス試行の日付と時刻を記録しておくことは、将来の分析に非常に役立ちます。
イントロダクションの行「#!/bin/bash」(一般的にはシェバングとして知られています)は、スクリプト内の後続のコードを処理するためにシステムに対して使用するインタプリタを指示します。ここでは、私たちが選んだインタプリタは「bash」です。
3. さて、今度は「bash if else」スクリプトをテストしてみましょう。以下のコマンドを実行してください:
Bashシェルのバリアントに関係なく、スクリプト名の前に「bash」を付けてください。これにより、システムはスクリプトの実行にBashを利用します。
「ATA」と入力してEnterキーを押してください。結果は以下のようになります:

「ATA」以外の入力を行うと、歓迎メッセージは出力されません。現在の日付と時刻のみが表示されます。この動作は、$NAME変数の値と正確に一致するかどうかをチェックする「bash if else」ステートメントによるものです。
なお、「bash if else」ステートメントは大文字と小文字を区別します。したがって、「ata」、「aTa」、「Ata」などは、「ATA」とは異なります。

常に異なる入力で「bash if else」スクリプトをテストしてください。これにより、スクリプトが予想通りに動作することが保証されます。
さらに深く掘り下げる: ネストされた「bash if else」ステートメント
すでに「bash if else」ステートメントの基礎を理解しています。これは、単純なタスクには十分ですが、複雑なスクリプトでは高度な構造が求められます。そのような場合には、ネストされた「bash if else」ステートメントが役立ちます。基本的に、これは1つまたは複数の追加の「if」ステートメントを含む「if」ステートメントです。
以下の構造は、ネストされた「bash if else」ステートメントの基本的な構文を示しています。ここでは、外側のif [[ conditions ]]
節が条件の達成に基づいて実行されるコードを囲みます。私たちの文脈では、ネストされたコードは別の「if」ステートメントです。
if [[ 条件 ]]
– これは外部の「bash if else」ステートメントを表します。指定された条件が真である場合にのみ、入れ子のコード(別の ‘if’ ステートメント)が実行されます。if [[ 条件2 ]]
– これは内部の「bash if else」節を表します。両方の条件が満たされた場合にのみ実行されるコードを保持します。
さらに掘り下げましょう。前の「bash if else」の例を拡張し、今度はパスワードについて尋ねるif
ステートメントを含めます。
1. まず、お気に入りのテキストエディタを使用してbash_nested_if_demo.shという新しいファイルを作成します。
2. 下記の ‘bash if else’ コードをbash_nested_if_demo.shファイルに転送し、変更を保存してエディタを閉じます。
この ‘bash if else’ コードは、名前とパスワードの条件が一致する場合に特定のメッセージが表示されます。一致しない場合は、出力に現在の日付と時刻が表示されます。
3. 今、この ‘bash if else’ スクリプトを実行しましょう。以下のコマンドを実行します:
最適な結果を得るには、ユーザー名として ATA、パスワードとして pwd123 を入力してください。

入力が “ATA” または “pwd123” から逸脱した場合、フィードバックは現在の日付と時刻に関するものだけです。これは、’bash if else’ 構造が両方の条件を満たす必要があるためです。

‘Bash If Else’ ステートメントのデコード
‘Bash if else’ ステートメントは、Bash スクリプトでの基本的なものであり、スクリプトに決定的な機能を提供します。ただし、’if’ ステートメントを使用することには欠点もあります。
目立つ課題は、’if’ への過度な依存がコードを混乱させ、特に複数の入れ子になった ‘if’ 文が関わる場合には、コードを退屈で複雑にする可能性があることです。そのようなスクリプトは、「スパゲッティコード」と呼ばれ、読みやすさが低下し、複雑さが増します。
したがって、「bash if else」スクリプトを理解しやすく保つためにどのようにすればよいですか?入れ子の ‘if’ 文の山よりも ‘if else’ 文を選択します。’else’ キーワードを使用すると、’if’ 条件が満たされない場合に実行するコードチャンクを指定できます。
より明確な視点を得るために、以下の ‘Bash If Else’ の構文を考えてみましょう。ここでは、次のようになります:
if [[ 条件 ]]
– ここでは、ステートメント1が、指定された条件が有効な場合にのみトリガーされる ‘bash if else’ ステートメントが含まれます。else
– これは ‘bash if else’ 構造の一部です。else
ステートメントには、前のif
句の条件が満たされない場合に実行されるコード(ステートメント2
)が含まれます。
ユーザーからランダムな数値を期待するシンプルな ‘bash if else’ ゲームを作成することを想像してください:
1. 新しいファイルを bash_if_else_demo.sh という名前で作成します。
2. 次の ‘bash if else’ コードを bash_if_else_demo.sh ファイルに統合し、変更内容を保存して終了します。
基礎となる ‘bash if else’ コードは、ユーザーに彼らの幸運な番号を入力するように促します。入力が偶数の場合、「You Won!」メッセージが表示されます。逆に、奇数の場合は「You Lost!」がトリガーされます。
3. 操作中の ‘bash if else’ スクリプトを確認するには、以下のコマンドを実行してください:
偶数の数字を入力すると、「’bash if else’ で勝ちました!」というメッセージが表示されます。逆に、奇数の数字を入力すると、「’bash if else’ を使用して負けました!」というフィードバックが得られます。

‘bash if else’ スクリプトを充実させるために、ユーザーが数字ではなく文字や独自の文字を入力したかどうかを判定するセグメントを組み込むことを検討してください。
‘Bash If Else’ と Case ステートメントの解読
この時点で、Bash スクリプトでの意思決定の方法のいくつかを探索してきました。具体的には、’bash if else’ ステートメントです。しかし、Bash には別の意思決定の手段があります – case
ステートメントです。
‘bash if else’ と同様に、case
ステートメントは特定の条件に基づいて実行するコードシーケンスを指定するのに適しています。case ステートメントの顕著な利点は、ネストされた ‘bash if else’ シナリオと比較した際に、その非常に簡潔さと明瞭さにあります。
「bash if else」の代替手段を完全に理解するには、ケース文の構文について詳しく見てみましょう:
case $VAR in
– このケース構造のセグメントは、一致するまで定義されたパターンに対して$VAR
変数を評価します。pattern1)
およびpattern2)
– これらはテストする基準であり、一致が検出されると、対応するコード(statement1
またはstatement2
)が実行されます。esac
– ケース構造を終了します。
国名を入力すると、その国の主要な言語が表示される ‘bash if else’ スクリプトを設計していると想像してみてください。
1. bash_case_demo.shという名前のファイルを作成します。
2. 提供された ‘bash if else’ コードをbash_case_demo.shファイルに組み込み、保存して終了します。
次の ‘bash if else’ スクリプトでは、ユーザーに国名を入力させ、 ‘case’ パターンに基づいて、指定された国で話されている主要な言語を表示します。
3. この「bash if else」スクリプトを直接体験するには、次のコマンドを使用します:
スクリプトがユーザーの選択した国に応じて言語を正確に強調していることがわかります。
提供された国が指定されたパターンと一致しない場合、デフォルト(*)パターンがトリガーされ、「unknown」という出力が生成されます。

Bash条件文をまとめる
このガイドでは、「bash if else」およびその他のBash条件文の理解の旅に乗り出しました。単純な「if」文から複雑な「if-else」および「case」文まで、効果的なBashスクリプト作成のための必須ツールを備えています。
これらの「bash if else」の基礎を身につけることで、エラーの余地を減らしながら、より熟練したBashスクリプトを構築できます。