はじめに#
こんにちは!今回は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
|
実行結果:
例2: else を使う#
1
2
3
4
5
6
7
|
age=15
if [ $age -ge 18 ]; then
echo "成人です"
else
echo "未成年です"
fi
|
実行結果:
例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
|
実行結果:
例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コマンドの学習を続けていきましょう!