このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Linux】シェルスクリプト:ifコマンド

シェルスクリプト:ifコマンド
シェルスクリプトでは、条件に応じて異なる処理を行うために条件分岐処理が必要です。この条件分岐処理を実現するために、if
コマンドが使用されます。if
コマンドを使うことで、特定の条件を満たす場合と満たさない場合で異なるコマンドを実行することができます。これにより、シェルスクリプトをより柔軟かつ動的に制御することが可能になります。

条件分岐処理
条件分岐処理には、主にif
コマンドを使用します。以下が基本的な構文です。
【構文】if 条件式
then
コマンド1
else
コマンド2
fi

ifコマンドの条件式
if
コマンドの条件式には、test
コマンドを使用する場合があります。test
コマンドは、条件を評価して真か偽かを判定します。
testコマンドの主な条件式
テストの種類 | 条件式 | 説明 |
---|---|---|
ファイル関連のテスト | -e ファイル名 | ファイルが存在すれば真 |
-f ファイル名 | 通常のファイルなら真 | |
-d ディレクトリ名 | ディレクトリが存在すれば真 | |
-L ファイル名 | シンボリックリンクなら真 | |
数値のテスト | 数値1 -eq 数値2 (equal) | 数値1と数値2が等しいなら真 |
数値1 -ne 数値2 (not equal) | 数値1と数値2が等しくないなら真 | |
数値1 -ge 数値2 (greater than or equal) | 数値1が数値2以上なら真 | |
数値1 -gt 数値2 (greater than) | 数値1が数値2より大きいなら真 | |
数値1 -le 数値2 (less than or equal) | 数値1が数値2以下なら真 | |
数値1 -lt 数値2 (less than) | 数値1が数値2より小さいなら真 | |
文字列のテスト | 文字列1 = 文字列2 | 文字列1と文字列2が等しいなら真 |
文字列1 != 文字列2 | 文字列1と文字列2が等しくないなら真 | |
-z 文字列 | 文字列が長さが0(空か)なら真 |
ifコマンドとtestコマンドを用いたシェルスクリプトの例
テキストエディタ(nanoエディタ)などで「file_exist.sh
」を作成します。
・「nano file_exist.sh
」コマンドを実行します。
user01@ubuntu-vm:~$ nano file_exist.sh
以下のシェルスクリプトを入力したら、「Ctrl + S
」 を押して、内容を保存して「Ctrl + X
」 を押して nano
を終了します。
このシェルスクリプトは、ifコマンドとtestコマンドを用いたシェルスクリプトの例です。
例: ファイルの存在を確認するスクリプト「file_exst.sh 」
このスクリプトは、ユーザーからファイル名を入力させ、そのファイルが存在するかどうかを確認し、適切なメッセージを表示します。
#!/bin/bash
echo "Enter the file name: "
read filename
if [ -e "$filename" ]; then
echo "The file '$filename' exists."
else
echo "The file '$filename' does not exist."
fi
スクリプトの解説
コマンド | 説明 |
---|---|
#!/bin/bash | スクリプトが bash シェルで実行されることを指定します。 |
echo "Enter the file name: " | ユーザーにファイル名の入力を促すメッセージを表示します。 |
read filename | ユーザーが入力したファイル名を変数 filename に格納します。 |
if [ -e "$filename" ]; then | ファイルが存在するかどうかをテストします。 |
echo "The file '$filename' exists." | ファイルが存在する場合のメッセージを表示します。 |
else | 条件が偽の場合の処理を開始します。 |
echo "The file '$filename' does not exist." | ファイルが存在しない場合のメッセージを表示します。 |
fi | if 文の終了を示します。 |
シェルスクリプトの実行
・「bash file_exist.sh
」コマンドを実行します。
「Enter the file name:」の問いに「sample.txt」と入力してEnterキーを入力します。「sample.txt」ファイルが存在しないため、「The file 'sample.txt' does not exist.」と出力されます。
user01@ubuntu-vm:~$ bash file_exist.sh
Enter the file name:
sample.txt # ファイル名を入力します
The file 'sample.txt' does not exist.
以下のコマンドを実行します。
- 「
date > sample.txt
」コマンド - 「
bash file_exist.sh
」コマンド
「Enter the file name:」の問いに「sample.txt」と入力してEnterキーを入力します。今度は「sample.txt」ファイルが存在するため、「The file 'sample.txt' exists.」と出力されます。
user01@ubuntu-vm:~$ date > sample.txt
user01@ubuntu-vm:~$ bash file_exist.sh
Enter the file name:
sample.txt
The file 'sample.txt' exists.
ファイルとシェルスクリプトの削除
この演習で作成したファイルとシェルスクリプトを削除します。
・「rm sample.txt file_exist.sh
」コマンドを実行し、「ls
」コマンドで削除されたことを確認します。
user01@ubuntu-vm:~$ rm sample.txt file_exist.sh
user01@ubuntu-vm:~$ ls
snap テンプレート ドキュメント ピクチャ 公開
ダウンロード デスクトップ ビデオ ミュージック
まとめ
シェルスクリプトの条件分岐処理には、if
コマンドを使用します。if
コマンドの条件式には、test
コマンドを使用することが多く、ファイルの存在チェック、数値の比較、文字列の比較などに使用されます。ここで紹介したシェルスクリプトを参考にして、シェルスクリプトで条件分岐処理を実装してみてください。