はじめに

こんにちは!今回はif文について解説します。

ifは条件分岐を行うための構文です。「もし〇〇なら△△する」みたいな処理を書く時に使います。プログラミングやったことある人なら馴染み深いやつですね。

if文とは

ifは、条件によって処理を変えるための制御構文です。

「ファイルが存在したら削除する」とか「変数が空なら警告を出す」とか、条件次第で処理を分けたい時に使います。

基本構文

基本形

1
2
3
if [ 条件 ]; then
    # 条件が真の時の処理
fi

else付き

1
2
3
4
5
if [ 条件 ]; then
    # 条件が真の時の処理
else
    # 条件が偽の時の処理
fi

elif付き(複数条件)

1
2
3
4
5
6
7
if [ 条件1 ]; then
    # 条件1が真の時の処理
elif [ 条件2 ]; then
    # 条件2が真の時の処理
else
    # どの条件も偽の時の処理
fi

よく使う条件式

文字列の比較

条件式 意味
[ "$a" = "$b" ] 文字列が等しい
[ "$a" != "$b" ] 文字列が等しくない
[ -z "$a" ] 文字列が空
[ -n "$a" ] 文字列が空でない

数値の比較

条件式 意味
[ $a -eq $b ] 等しい (equal)
[ $a -ne $b ] 等しくない (not equal)
[ $a -gt $b ] より大きい (greater than)
[ $a -lt $b ] より小さい (less than)
[ $a -ge $b ] 以上 (greater or equal)
[ $a -le $b ] 以下 (less or equal)

ファイル・ディレクトリの確認

条件式 意味
[ -f "$file" ] ファイルが存在する
[ -d "$dir" ] ディレクトリが存在する
[ -e "$path" ] ファイルまたはディレクトリが存在する
[ -r "$file" ] 読み取り可能
[ -w "$file" ] 書き込み可能
[ -x "$file" ] 実行可能

使用例

例1: 基本的な使い方

1
2
3
4
5
age=20

if [ $age -ge 18 ]; then
    echo "成人です"
fi

実行結果:

1
成人です

例2: else を使う

1
2
3
4
5
6
7
age=15

if [ $age -ge 18 ]; then
    echo "成人です"
else
    echo "未成年です"
fi

実行結果:

1
未成年です

例3: elif を使う(複数条件)

1
2
3
4
5
6
7
8
9
score=75

if [ $score -ge 80 ]; then
    echo "優秀です"
elif [ $score -ge 60 ]; then
    echo "合格です"
else
    echo "不合格です"
fi

実行結果:

1
合格です

例4: ファイルの存在確認

1
2
3
4
5
6
7
file="test.txt"

if [ -f "$file" ]; then
    echo "$file は存在します"
else
    echo "$file は存在しません"
fi

例5: 文字列の比較

1
2
3
4
5
6
7
read -p "パスワードを入力: " password

if [ "$password" = "secret" ]; then
    echo "ログイン成功"
else
    echo "パスワードが違います"
fi

例6: 空文字チェック

1
2
3
4
5
6
7
read -p "名前を入力: " name

if [ -z "$name" ]; then
    echo "名前が入力されていません"
else
    echo "こんにちは、${name}さん"
fi

Tips・注意点

  • [ ]の前後にスペース: []の前後には必ずスペースが必要です

    1
    2
    
    if [ $a -eq 1 ]; then  # 正しい
    if [$a -eq 1]; then    # エラー!
    
  • 変数のクォート: 変数は基本的にダブルクォートで囲みましょう

    1
    2
    
    if [ "$var" = "test" ]; then  # 正しい
    if [ $var = "test" ]; then    # 変数が空の時エラーになる可能性
    
  • [[ ]] も使える: bash限定ですが、[[ ]]も使えます(こっちの方が便利)

    1
    2
    3
    
    if [[ $a == "test" ]]; then
        echo "一致"
    fi
    
  • &&と|| で複数条件: AND条件とOR条件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    # AND (両方真)
    if [ $a -gt 0 ] && [ $a -lt 10 ]; then
        echo "1〜9の範囲"
    fi
    
    # OR (どちらか真)
    if [ $a -eq 1 ] || [ $a -eq 2 ]; then
        echo "1または2"
    fi
    
  • !で否定: 条件を反転できます

    1
    2
    3
    
    if [ ! -f "$file" ]; then
        echo "ファイルが存在しません"
    fi
    

実践的な使い方

ファイルのバックアップスクリプト

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/bash

file="important.txt"
backup="${file}.bak"

if [ -f "$file" ]; then
    cp "$file" "$backup"
    echo "バックアップを作成しました: $backup"
else
    echo "エラー: $file が見つかりません"
fi

引数チェック

1
2
3
4
5
6
7
8
#!/bin/bash

if [ $# -eq 0 ]; then
    echo "使い方: $0 <ファイル名>"
    exit 1
fi

echo "処理を開始します: $1"

ディレクトリ作成(存在しない場合のみ)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash

dir="backup"

if [ ! -d "$dir" ]; then
    mkdir "$dir"
    echo "ディレクトリを作成しました: $dir"
else
    echo "ディレクトリは既に存在します: $dir"
fi

複数条件の組み合わせ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/bash

read -p "ユーザー名: " user
read -sp "パスワード: " pass
echo

if [ "$user" = "admin" ] && [ "$pass" = "secret" ]; then
    echo "管理者としてログインしました"
elif [ -n "$user" ] && [ -n "$pass" ]; then
    echo "一般ユーザーとしてログインしました"
else
    echo "ログインに失敗しました"
fi

まとめ

今回はif文について解説しました。

ポイント:

  • ifで条件分岐ができる
  • [ ]の前後にはスペースが必要
  • 変数はダブルクォートで囲む
  • ファイルチェックや数値比較など、色々な条件が使える

シェルスクリプトを書く時、if文は絶対に使うと言っていいくらい基本的なやつです。最初は書き方がちょっと慣れないかもしれないですけど、使ってるうちに覚えます。

次回もLinuxコマンドの学習を続けていきましょう!