• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:シェルスクリプト(if文))

シェルスクリプト(if文)でファイルの末尾5行を表示する方法

このQ&Aのポイント
  • シェルスクリプトで引数で指定されたファイルが存在する場合、ファイルの末尾5行を表示します。
  • 存在しない場合は「ファイルパス in not found」と表示されます。
  • 実行結果の表示方法に不具合があり、修正方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • you-m
  • ベストアンサー率58% (190/327)
回答No.1

テストコマンド([)には、いろいろな使い方があります。 詳細は man test で確認するのが一番ですが、要はファイルの存在確認もそのための使い方があります。 -r, -w, -f 辺りは、比較的良く使われます。 if [ -r ファイル名 ]; then ならば、そのファイルが読み取り可能ならばという条件になります。 今回の場合は、ファイルがあればいいわけではなく、読み取れる必要がありますので、この条件がいいでしょう。 質問者さんの書き方は、-fと$1がくっついているので、解釈が正しくされていません。特にシェルスクリプトはそうなんですが、空白をあけるあけないは、コマンドによって大きく変わってきますので、注意が必要です。 また、質問者さんの書き方では、$1が空の場合に、if文自体がエラーになります。 ここは、 if [ -r "$1" ]; then として、$1が空でも、空文字列での比較が成立するようにした方がいいでしょう。 また、-rでの比較にする場合は、エラーメッセージは「ファイルが存在しないか、読み取り可能ではありません」の類がいいでしょうね。

yukikundesuyo
質問者

補足

親切な回答ありがとうございます。 おかげで実行結果がキチンと返ってきました。 空白あけてないとプログラムが動作しないなんて大変ですね。 言語のコンパイラみたいに何行目の何処が間違っているよと教えてくれるソフトってないですかね。 回答のほどよろしくお願い致します。

その他の回答 (1)

  • you-m
  • ベストアンサー率58% (190/327)
回答No.2

残念ながら、そういったソフトはありませんが、簡単なデバッグ機能はあります。 shやbashに-xというオプションを渡して実行することで、実行されたすべてのコマンドと出力が、標準出力に出てきます。 慣れないと何が何だがわからないかもしれませんが、どこがエラーになった等は、結構わかりますよ。 sh -x hoge.sh bash -x hoge.sh あとは、スクリプトに実行属性をつけている場合は、shebangに直接渡すこともできますね。 #!/bin/sh -x お薦めは、手で実行するシェルスクリプトは、オプションの有無に関わらず常に上の実行方法で行うことです。 こういったシェルスクリプトのデバッグは、結構慣れが物を言います。 エラーの個所がだいたい特定できたら、その該当部分での使用変数等を、echoしたみたりすることで、いろいろ分かったりします。 以上、ご参考までに。

yukikundesuyo
質問者

お礼

上記コマンドを実行してみました。 実行順序が細かく出るので、デバックにはすごく使えそうです。 本当にありがとうございます。

関連するQ&A