Linuxとコマンドラインの基礎

if [ -f "$f" ]; then
  echo "found"
fi

シェルスクリプトで、上の if の条件が真になる場合として、正しいものはどれか。

  1. A変数 f の名前の通常のファイルが存在する場合
  2. B変数 f の名前のファイルが存在し、大きさが0より大きい場合
  3. C変数 f の名前のファイルかディレクトリが存在する場合
答えと解説を見る

正解:A. 変数 f の名前の通常のファイルが存在する場合

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

  • A. 正しい。-f は通常のファイルが存在するときに真になり、空のファイルでも真です。
  • B. 大きさが0より大きいことまで調べるのは -s です。-f は空のファイルでも真になります。
  • C. ファイルかディレクトリかを問わず存在を調べるのは -e です。-f はディレクトリでは偽になります。
この分野を解く 分野ページへ

Linuxとコマンドラインの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

Linuxとコマンドラインの基礎のほかの問題

  1. 上の操作の後で、ディレクトリにあるファイルとして、正しいものはどれか。
  2. カレントディレクトリにある実行の権限が付いたスクリプト run.sh を、「run.sh」と入力して実行しようとすると「command not found」になり、「./run.sh」と入力すると実行できた。理由として、正しいものはどれか。
  3. 上のコマンドを順に実行したときの、2つの bash -c の出力の組み合わせとして、正しいものはどれか。
  4. Linuxのパッケージ管理システム(Debian系の apt、Red Hat系の dnf など)の主な働きとして、正しいものはどれか。
  5. systemd を使うLinuxで、サービス license.service に対する「systemctl start license.service」と「systemctl enable license.service」の違いとして、正しいものはどれか。