- ベストアンサー
RedHatでのシェルスクリプトについて
こんにちは。また質問させて下さい。 redhat7.0のシェルスクリプトで、 サンプルコード片手に以下のコードを記述しました。 やりたい事は、もしaaa.txtというファイルが存在したら その内容を表示させ、存在しなければその旨のメッセージを 表示させる、という単純なものです。 この時、ファイルが存在しない時に ./test.sh: /tmp/aaa.txt: No such file or directry というエラーになってしまいます。 エラーを抜けてメッセージを表示させるには どうしたらいいでしょうか。 アドバイスよろしくお願いいたします。 *********記述したコードです。************* #!/bin/bash fileName=/tmp/aaa.txt read varStr1 varStr2 <fileName if [ -a fileName ]; then echo {$varStr1} else echo{$fileName}{$varStr2} fi
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
一番の勘違いは、No.1 の方も書いているとおりそのエラーが存在チェックより 前の read でおきていることを見落としていること。 また test ( [ ) のオプションについて、今回は、/tmp/aaa.txt から何かしらの 値を読み込むので -f よりは -s の方がむいています( -a は AND の演算なので 間違い)。 というわけで、 #!/bin/bash fileName=/tmp/aaa.txt if [ -s $fileName ] then read varStr1 varStr2 < $fileName echo {$varStr1} {$varStr2} else echo $fileName is not found. fi という感じ。 多分転記ミスだとは思いますが、if や read の fileName の $ が抜けて いることと、varStr2 も /tmp/aaa.txt が存在しないと設定されていない 変数なのに、ファイルが存在しない方に入っていることを指摘しておきます。
その他の回答 (1)
- natural
- ベストアンサー率37% (419/1115)
私はbashではなくshで記述するので該当するかどうか判りませんが、if文に-fを用いてみては如何でしょう。 bashだとこうなるのでしょうか。 if [ -f /tmp/aaa.txt ] fileName=/tmp/aaa.txt else ファイルが存在しない場合の処理 fi -fを用いるとそのファイルが存在するかどうか確認できますので、確認できたらfileNameに設定すれば良いと思います。 そうしないとread時にfileNameで指定されたファイルが存在しないのでエラーになってしまうのでしょう。
お礼
naturalさん、回答ありがとうございます。 なるほど、確かにご指摘のとおり、ファイルが無いのに readしてますよね。とほほ。 -fっていうのも使えるみたいですね! どうもありがとうございました。 また何かありましたら教えてください。 助かりました!
お礼
a-kumaさん、前回に引き続き、回答ありがとうございます。 とてもわかりやすいです。 いっぱい間違っていましたね・・・。 ちゃんと考えればわかる事でした。ご指摘ありがとうございます。 サンプルコードはネットで探しているのですが、 今回のは[-a fileが存在すればtrue][-s fileが存在し、そのサイズが0より大きかったらtrue]と書いてありました。 よくわからないので-aの方を使っていました。 値を読み込むのだから-sが良い、と解りました。 ありがとうございます。 また何かありましたらよろしくお願いいたします。本当に、助かりました!