このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

シェルスクリプト: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(空か)なら真
testコマンドの主な条件式

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."ファイルが存在しない場合のメッセージを表示します。
fiif 文の終了を示します。
スクリプトの解説
シェルスクリプトの実行

・「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 コマンドを使用することが多く、ファイルの存在チェック、数値の比較、文字列の比較などに使用されます。ここで紹介したシェルスクリプトを参考にして、シェルスクリプトで条件分岐処理を実装してみてください。