CodeGym /コース /Docker SELF /条件 (`if`, `else`) とループ (`for`, `while`) in bash

条件 (`if`, `else`) とループ (`for`, `while`) in bash

Docker SELF
レベル 3 , レッスン 4
使用可能

条件 if, else とループ for, while in bash

1. Bashでの条件文: if, else, とちょっとした魔法

条件文って何のためにあるの?

条件文を使えば、スクリプトが入力データ、変数、またはコマンドの実行結果に基づいて決定を下せるんだ。例えば、ファイルが存在するか確認したり、サーバーが利用可能かどうかを確かめて次のアクションを実行したり。そういうときにif構造が役立つよ。

基本的な構文

Bashでの古典的なif条件文の構造はこんな感じ:

if [ 条件 ]; then
    # 条件が真の場合に実行されるコード
    echo "条件が満たされたよ!"
else
    # 条件が偽の場合に実行されるコード
    echo "条件が満たされなかったよ!"
fi

キーワード:

  • if, then, else, と fi (ifを閉じるブロック) — これらは魔法の言葉。これがないとスクリプトは動かないよ。
  • 角括弧 [ ... ] は条件をチェックするために使われるよ。

例 1: ファイルの存在チェック

#!/bin/bash

FILE="/etc/passwd"

if [ -f $FILE ]; then
    echo "ファイル $FILE は存在するよ。"
else
    echo "ファイル $FILE は見つからなかったよ。"
fi

説明:

  • -f はそのファイルが存在するかどうかをチェックするよ。
  • ファイルが存在する場合、echoコマンドがその旨を表示するよ。存在しない場合はelseブロックが実行される。

コマンドでの条件

コマンドの実行結果を条件として使えるよ。だってLinuxではすべてコマンドだからね。

例 2: サイトのアクセス確認

#!/bin/bash

if ping -c 1 example.com &> /dev/null; then
    echo "サイトにアクセスできるよ。"
else
    echo "サイトにアクセスできないよ。"
fi

説明:

  • ping -c 1 はサーバーに1回だけリクエストを送るよ。応答があれば条件が真になる。
  • &> /dev/null はコマンドの出力を隠してターミナルをすっきりさせる。

elif演算子の使用

単なるifelseじゃ足りないときもあるよね。いくつかの条件を考慮したい場合はelifが役立つ。

例 3: 時刻による挨拶

#!/bin/bash

HOUR=$(date +%H)

if [ $HOUR -lt 12 ]; then
    echo "おはよう!"
elif [ $HOUR -lt 18 ]; then
    echo "こんにちは!"
else
    echo "こんばんは!"
fi

説明:

  • date +%H は現在の時間を24時間形式で返してくれるよ。
  • 現在の時刻を固定値と比較する: 12未満なら朝、18未満なら昼、それ以上なら夜。

2. bashのループ: 繰り返しは学びの基礎

ループはスクリプトに特定の条件が満たされるまでアクションを繰り返させる手段です。たくさんのファイルを処理したり、タスクを何度も繰り返したり、特定のイベントを待つ場合に特に役立ちます。

forループ

forは値(例: ファイルや数字)のリストを巡回し、それぞれに指定されたアクションを実行します。

例 4: シンプルなforループ

#!/bin/bash

for i in {1..5}; do
    echo "これはイテレーション番号 $i"
done

説明:

  • {1..5} — 1から5までの数字のリスト。
  • 各イテレーションで変数iがリストから値を受け取ります。

例 5: ディレクトリ内のファイルを巡回

#!/bin/bash

for FILE in /etc/*; do
    echo "ファイルを処理中: $FILE"
done

説明:

  • /etc/*/etcフォルダー内のすべてのファイルのリスト。
  • 各イテレーションで変数FILEは1つのファイル名を含みます。

whileループ

whileは条件が満たされる間アクションを実行します。

例 6: 数字当てゲーム

#!/bin/bash

SECRET=5
GUESS=0

while [ $GUESS -ne $SECRET ]; do
    echo "あなたの予想を入力してください(1から10までの数字):"
    read GUESS
done

echo "正解です!"

説明:

  • [ $GUESS -ne $SECRET ] — 入力された数字GUESSが秘密の数字SECRETと一致するまで条件が続きます。

条件文とループの組み合わせ

時々、条件文とループは一緒に機能します。

例 7: サイトの可用性をチェック

#!/bin/bash

SITES=("example.com" "google.com" "nonexistent.website")

for SITE in ${SITES[@]}; do
    if ping -c 1 $SITE &> /dev/null; then
        echo "$SITE は利用可能です。"
    else
        echo "$SITE は利用できません。"
    fi
done

説明:

  • 配列SITESはサイトのリストを含んでいます。
  • forは配列内の各サイトを巡回します。
  • ifpingを使用してサイトの可用性を確認します。

3. 実践演習

ドメインの確認

ドメイン名を引数として受け取り、その利用可能性を確認するスクリプトを書いてみましょう。

ヒント:

if ping -c 1 $1 &> /dev/null; then
    echo "ドメインは利用可能です。"
else
    echo "ドメインは利用できません。"
fi

ファイル操作

複数のファイルの存在を確認し、それぞれの結果を出力するスクリプトを書いてみましょう。

ヒント:

FILES=("file1.txt" "file2.txt" "/etc/passwd")
for FILE in ${FILES[@]}; do
    if [ -f $FILE ]; then
        echo "$FILE は存在します。"
    else
        echo "$FILE が見つかりません。"
    fi
done

掛け算表

ネストされたループを使ったスクリプトを書いて、1から10までの数字の掛け算表を出力しましょう。

ヒント:

for i in {1..10}; do
    for j in {1..10}; do
        echo -n "$((i * j)) "
    done
    echo ""
done

これでbashスクリプトに知能とロジックを追加できます!条件は状態を確認し、意思決定を行い、ループは繰り返しタスクを自動化するのに役立ちます。これからもっとタスクの自動化の可能性が広がりますよ!

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION