条件 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
演算子の使用
単なるif
とelse
じゃ足りないときもあるよね。いくつかの条件を考慮したい場合は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
は配列内の各サイトを巡回します。if
はping
を使用してサイトの可用性を確認します。
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スクリプトに知能とロジックを追加できます!条件は状態を確認し、意思決定を行い、ループは繰り返しタスクを自動化するのに役立ちます。これからもっとタスクの自動化の可能性が広がりますよ!
GO TO FULL VERSION