Linuxをつかいシェルスクリプトを組んでいます
複数ファイルの存在有無を確認し、問題なければ、
ファイルを作成する処理を作成したいと思っています。
現在つまずいているのが以下の2点です。
(1)複数ファイルが無い場合、エラーとしたいが、「too many arguments」とででしまう。
(2)HASH.tmp情報取得中にエラーとなったらエラーを出したいが、エラー終了ステータス返却処理に流れない。
初めてで色々しらべながらやっていますが、うまくいかず止まってしまいました。
どなたかご助言お願い致します。
(1)
#==============================================================================#
# データ抽出用sqlファイル存在確認
# CSVファイルが無かったらエラーを出したい。
# 終了ステータス返却
# 終了ステータスが"0"以外の場合は、"1"を返却する
#==============================================================================#
if [ ! -f "${DATA_DIR}/"*.csv ]; then
# ログ出力
OUT_MSG_LOG -E "抽出ファイルが存在しません。"
OUT_MSG_LOG -E "抽出シェル - 終了 終了ステータス :1"
OUT_ACT_LOG SH 12 ""
OUT_ACT_LOG SH 02 ""
exit 1
fi
(2)
#==============================================================================#
# ハッシュ情報取得処理
#==============================================================================#
mktemp ${DATA_DIR}/HASH.tmp >/dev/null
for arg in *.csv
do
md5sum ${arg} | awk '{printf("%s,%s\n",$2,$1)}' >> HASH.tmp
done
#==============================================================================#
# 終了ステータス取得
#==============================================================================#
RS=$?
#==============================================================================#
# エラー終了ステータス返却
# 終了ステータスが"0"以外の場合は、"1"を返却する
#==============================================================================#
if [ ${RS} -ne 0 ]; then
# ログ出力
OUT_MSG_LOG -E "抽出処理実行中にエラーが発生しました。"
OUT_MSG_LOG -E "抽出シェル - 終了 終了ステータス :${RS}"
OUT_ACT_LOG SH 12 ""
OUT_ACT_LOG SH 02 ""
exit 1
fi
No.1ベストアンサー
- 回答日時:
ベタですが、こんなのはいかがでしょうか。
(1)
for arg in *.csv
do
if [ -f "$arg" ]; then
break
else
# エラー処理
exit 1;
fi
done
(2)
for arg in *.csv
do
md5sum ${arg} | awk '{printf("%s,%s\n",$2,$1)}' >> HASH.tmp
if [ $? -ne 0 ]; then
# エラー処理
exit 1;
fi
done
ありがとうございます
(1)については動作確認できました。
(2)ですが、どうしたらエラー処理には入れるようになるのかが分かりません。
HASH.tmpを処理中に削除したりしましたがダメでした。
何か方法はありますでしょうか?
No.3
- 回答日時:
> (2)ですが、どうしたらエラー処理には入れるようになるのかが
> 分かりません。
> HASH.tmpを処理中に削除したりしましたがダメでした。
> 何か方法はありますでしょうか?
chmod a-w HASH.tmp
でエラーになりませんか。
root 以外ならエラーになると思います。
ちなみに、
if [ $? -ne 0 ]; then
# エラー処理
exit 1;
fi
だと、パイプの左側のコマンドだけがエラーになった場合は
エラー処理が行われません。パイプの左側のコマンドの
エラーもとらえるには bash 限定で
if [ $? -ne 0 -o $PIPESTATUS -ne 0 ]; then
# エラー処理
exit 1;
fi
とすればよいようです。
bourne shell だと、参考 URL でできるようです。
参考URL:http://ja.doukaku.org/comment/6045/
No.2
- 回答日時:
(2) の方ですが, 上の mktemp で作っている ${DATA_DIR}/HASH.tmp と do の中で使っている HASH.tmp とはどのような関係があるのでしょうか?
あと, $? をテストするなら test は使わずに
if md5sum ${arg} | awk '{printf("%s,%s\n",$2,$1)}' >> HASH.tmp; then
エラー処理
fi
とするのが普通でしょう. で, ここがエラーになる状況を作ればいいんだけど... それってどんな状況?
mktempでHASH.tmpをつくってそのファイルに情報を詰め込んでいるだけです。
mktemp ${DATA_DIR}/HASH.tmp = HASH.tmpです。(ただ${DATA_DIR}を消して投稿しただけです。)
エラーを入れているのはもしも、の為です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- UNIX・Linux Kali Linuxで起動できない - Minimal BASH Like Line Editing 1 2022/06/03 13:14
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
【Access】Excelインポート時に...
-
Excel vbs AppActivate エラー
-
マクロの「SaveAs」でエラーが...
-
数式は残し値をクリアするマク...
-
【VB.NET】 パワポ操作を非表示で
-
文字列内で括弧を使うには
-
VBでSQL文のUPDATE構文を使った...
-
実行時エラー '8021'とはどんな...
-
VB.net 重複チェックがしたいです
-
【VBA】findの検索条件における...
-
UBoundに配列がありませんとエ...
-
演算子が DBnull 及び integer...
-
エクセルVBAで埋め込みグラフ(C...
-
実行時エラー'-2147467259(8000...
-
ActiveCell.FormulaR1C1の変数
-
ADO 「認証に失敗しました」
-
【VBA】ワークブックを開く時に...
-
エクセル関数式=ABSで#VALUE!...
-
VBAでfunctionを利用しようとし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
マクロで"#N/A"のエラー行を削...
-
VBAでfunctionを利用しようとし...
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
エクセル関数を教えてください
-
On ErrorでエラーNoが0
-
お助けください!VBAのファイル...
-
VBA データ(特定値)のある最...
-
【VBA】ワークブックを開く時に...
-
インポート時のエラー「データ...
-
実行時エラー'-2147467259(8000...
-
マクロの「SaveAs」でエラーが...
-
WindowsでのPythonの挙動について
-
ApplicationとWorksheetFunctio...
-
Excel vbaについての質問
-
エクセルVBA 「On Error GoTo...
-
Filter関数を用いた結果、何も...
-
ACCESSで値を代入できないとは?
おすすめ情報