ファイルが存在するかどうかを確認
ファイルが存在するかどうかをテストします。
‘-e’または’-f’オプションを使用して、ファイルの存在を確認できます。次のコードの ‘if [ ]‘では、ファイルの存在をテストするために「-f」オプションが使用されています。’ file_exist.sh ‘という名前のファイルを作成し、次のコードを追加します。ここで、ファイル名はコマンドラインから渡されます。
#!/bin/bash
filename=$1;
if [ -f "$filename" ];then
echo "ファイルが存在します。";
else
echo "ファイルは存在しません。";
fi
bashコマンドでファイルを実行します。
$ ls
book.txt level.txt
bash file_exist.sh level2.txt
ファイルは存在しません。
bash file_exist.sh level.txt
ファイルが存在します。
- ヒント
- 「»」(アペンド)を行う場合の注意点は、必ずアペンドするファイルが存在している必要があるところです。
- ファイルが存在していればアペンド(追記)する。
- ファイルが存在しなければファイルを作成して追記する。
- といった処理が必要で、この処理を行わない場合、ファイルが存在しないにもかかわらず、値をファイルに追記しようとした際にエラーとなります。サンプルを以下に示します。
#!/bin/bash
if [ -f level.txt ]; then
# ファイルが存在するならば追記する
echo "Bash Programming" >> level.txt;
else
# ファイルが存在しないからlevel.txtを作成してから追記
:> level.txt;
echo "Bash Programming" >> level.txt;
fi
echo "追加した後のファイル"
cat level.txt;
- ヒント
- touch コマンドと :> の違いを明確にしておく必要があります。
- 「:>」 は、該当ファイルがなければ作成、あっても空のファイルに置き換えます。
- 「touch」は、該当ファイルがなければ作成しますが、あれば何もしません。
- この違いを利用するとif文はとても簡潔に書き換えることができます。
- touchコマンドを使って上記ソースを書き換えてみます。
#!/bin/bash
:> level.txt # 新規にファイルを作成
echo "Shell Scripting" >> level.txt;
echo "1回目に追加したファイル"
cat level.txt;
# 既にファイルが存在するので何もしない
# 万が一、ファイルが存在しなければ作成。
touch level.txt;
echo "Bash Programming" >> level.txt;
echo "2回目に追加したファイル"
cat level.txt;
$ bash bash_append_file3.sh
1回目に追加したファイル
Shell Scripting
2回目に追加したファイル
Shell Scripting
Bash Programming
$