- 締切済み
Cシェルでエラーハンドリングする方法について
Cシェルでエラーハンドリングする方法について 特定のファイルをしたのディレクトリに移動させる際、特定ファイルがなければ、処理を終了するという記述の仕方を教えていただきたいです。 すでに、以下のように記述をしてファイルを指定したディレクトリへ移動する動作確認はできています。 ------------------------------------------ set dir1=/export/home/username/test1_dir set dir2=/export/home/username/test2_dir mv ${dir1}/*.log /export/home/username/mv_dir mv ${dir2}/*.csv /export/home/username/mv_dir ------------------------------------------ この場合、*.log、*csvがディレクトリ内に存在すれば、移動先ディレクトリへ移動し ファイルがなければそのまま終了しています。 ファイルがなかったとしても、シェルが実行中のまま終わらなかったり エラーがでてしまうことはありませんでしたが、 念のため、ファイルが存在しない場合、何もせず処理を終了する というエラーハンドリング処理を入れたいと思うのですが、 どのように記述したらよいでしょうか? if (条件式) コマンド行 で実施ができるのか?と思うのですが どのような記述となりますでしょうか。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- sakusaker7
- ベストアンサー率62% (800/1280)
テスト演算子に食わせるファイル名にワイルドカードがあったらダメです。 ${dir1}/*.log や ${dir2}/*.csv を Cシェルの内部関数 glob に与えて、その結果が空文字列になるかどうかで判定してみてはどうですか?
- sakusaker7
- ベストアンサー率62% (800/1280)
ファイルの存在を確認できればいいんですよね? (3) UNIX beginner? ~C-Shellプログラミング~ " ファイル検査演算子 -r 指定されたファイルが読み込み可能であるとき真 -w 指定されたファイルが書き込み可能であるとき真 -x 指定されたファイルが実行可能であるとき真 -e 指定されたファイルが存在するとき真 -o 指定されたファイルの所有者であるとき真 -z 指定されたファイルのサイズが0であるとき真 -f 指定されたファイルが通常ファイルであるとき真 -d 指定されたファイルがディレクトリであるとき真 【List 6】 1 2 3 if( ! -d $dir ) then echo "$dir は存在しません" endif " http://hp.vector.co.jp/authors/VA012953/unix/cs_shell.html
お礼
sakusaker7 さん ありがとうございます。 vectorにこのようなサイトがあるとは知りませんでした。 参考になります。 では、お教えいただ他方法をもとにすると 以下のようになりますでしょうか。 指定するファイルが複数あると、カンマで区切って記述するのか わからないのですが。。。 ------------------------------------------ set dir1=/export/home/username/test1_dir set dir2=/export/home/username/test2_dir mv ${dir1}/*.log /export/home/username/mv_dir mv ${dir2}/*.csv /export/home/username/mv_dir if( ! -d ${dir1}/*.log, ${dir2}/*.csv) then echo "$dir は存在しません" endif ------------------------------------------
お礼
sakusaker7 さん ご指摘、ありがとうございます。 globの文献が探しきれず、どのようにサンプル動作させていいのか わかりません。 glob ${dir1}/*.log glob ${dir1}/*.log とすると、文字列扱いとなるのでしょうか。 そのうえで、以下を実行することができるのでしょうか。 if( ! -d ${dir1}/*.log, ${dir2}/*.csv) then echo "$dir は存在しません" endif