Linuxとコマンドラインの基礎
if [ -f "$f" ]; then
echo "found"
fiシェルスクリプトで、上の if の条件が真になる場合として、正しいものはどれか。
- A変数 f の名前の通常のファイルが存在する場合
- B変数 f の名前のファイルが存在し、大きさが0より大きい場合
- C変数 f の名前のファイルかディレクトリが存在する場合
答えと解説を見る
正解:A. 変数 f の名前の通常のファイルが存在する場合
[ ] は test コマンドの別の書き方で、条件が成り立てば終了ステータス0(真)を返し、if はそれを見て分岐します。-f は「その名前の通常のファイルが存在する」ことを調べ、ディレクトリの場合は偽になります。存在するかどうかだけなら -e、ディレクトリかどうかなら -d、大きさが0より大きいかどうかなら -s を使います。[ の後ろと ] の前には空白が必要で、変数は "$f" のように二重引用符で囲んでおくと、空白を含む名前でも正しく調べられます。
- A. 正しい。-f は通常のファイルが存在するときに真になり、空のファイルでも真です。
- B. 大きさが0より大きいことまで調べるのは -s です。-f は空のファイルでも真になります。
- C. ファイルかディレクトリかを問わず存在を調べるのは -e です。-f はディレクトリでは偽になります。