こんにちは。また質問させて下さい。
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
No.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 が存在しないと設定されていない
変数なのに、ファイルが存在しない方に入っていることを指摘しておきます。
a-kumaさん、前回に引き続き、回答ありがとうございます。
とてもわかりやすいです。
いっぱい間違っていましたね・・・。
ちゃんと考えればわかる事でした。ご指摘ありがとうございます。
サンプルコードはネットで探しているのですが、
今回のは[-a fileが存在すればtrue][-s fileが存在し、そのサイズが0より大きかったらtrue]と書いてありました。
よくわからないので-aの方を使っていました。
値を読み込むのだから-sが良い、と解りました。
ありがとうございます。
また何かありましたらよろしくお願いいたします。本当に、助かりました!
No.1
- 回答日時:
私はbashではなくshで記述するので該当するかどうか判りませんが、if文に-fを用いてみては如何でしょう。
bashだとこうなるのでしょうか。
if [ -f /tmp/aaa.txt ]
fileName=/tmp/aaa.txt
else
ファイルが存在しない場合の処理
fi
-fを用いるとそのファイルが存在するかどうか確認できますので、確認できたらfileNameに設定すれば良いと思います。
そうしないとread時にfileNameで指定されたファイルが存在しないのでエラーになってしまうのでしょう。
naturalさん、回答ありがとうございます。
なるほど、確かにご指摘のとおり、ファイルが無いのに
readしてますよね。とほほ。
-fっていうのも使えるみたいですね!
どうもありがとうございました。
また何かありましたら教えてください。
助かりました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- その他(プログラミング・Web制作) Pythonを勉強しています。 5 2023/08/25 09:51
- Excel(エクセル) 【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在 5 2022/08/31 10:03
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- その他(Microsoft Office) ワードのマクロについて教えてください。 1 2023/01/21 16:01
- Excel(エクセル) エクセルVBA、間違っているコード内容を正して頂けませんか? エクセルワークシートに納品書を作ったの 2 2023/08/02 21:13
- JavaScript [再掲]指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードについて 1 2023/05/10 15:09
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- Excel(エクセル) 【VBA】PDF出力に任意のファイル名前を付ける方法 3 2023/07/21 10:55
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
forfilesで検索したファイルを...
-
VBAでワークシートを引数として...
-
バッチ処理でファイルの中身を...
-
COPYコマンドで結合すると余計...
-
拡張子を元に戻す
-
cshでファイルサイズ取得
-
.txtではなく.logの方が良いの...
-
renameコマンドについて
-
多数のサブディレクトリ内のフ...
-
バッチファイルで文字列削除に...
-
ファイルを処理中に次の処理に...
-
【Excel】 VBAを使って毎回名前...
-
Unicode 対応の sed って無いの...
-
テキストファイルで提出とは?
-
テキストファイルの内容を連結...
-
C言語、ファイルの存在チェック...
-
テキストファイルのファイル名...
-
Excelで、大量のファイルをテキ...
-
バッチファイルで、リムーバル...
-
VBAでエクセルをtxtに変換する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
VBAでワークシートを引数として...
-
.txtではなく.logの方が良いの...
-
拡張子を元に戻す
-
多数のサブディレクトリ内のフ...
-
COPYコマンドで結合すると余計...
-
バッチファイル 複数ファイル...
-
テキストファイルで提出とは?
-
バッチファイルで文字列削除に...
-
Windowsのバッチファイルを利用...
-
テキストファイルのファイル名...
-
ファイルの最後に文字列挿入
-
psqlでエラーログをとりたい
-
forfilesで検索したファイルを...
-
バッチファイルからVBAに引数を...
-
accessでSQL文を使ってcsvファ...
-
テキストファイルのタブをカン...
-
MATLABで行列を配列に格納する方法
-
renameコマンドについて
-
【Excel】 VBAを使って毎回名前...
おすすめ情報