• ベストアンサー

cshの条件式について教えてください

cshで該当ディレクトリにファイルがなければOK、あればエラーというような処理をしようと思っています。 しかし、下記のような記述ではうまくできません。 1) *************************** if ( -e $DIR/*.* ) then echo "NG" exit 1 else echo "OK" endif exit 0 *************************** if文でなく、外にだせばうまくいくのですが... 2) *************************** test -e $DIR/*.* if($status == 0) then echo "NG" exit 1 else echo "OK" endif exit 0 **************************** if ( test -e $DIR/*.* ) then... でもだめでした。 どうにかしてif文で一発判定をしたいと思っているのですが、正しい記述方法を教えてください。 よろしくお願いします。

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

  • ベストアンサー
noname#88056
noname#88056
回答No.6

一発判定ではなくても、警告が出なければ良いんですよね? *************************** set FILE = (`ls $DIR | grep *`) if ( $#FILE != 0 ) then echo "NG" exit 1 else echo "OK" endif exit 0 *************************** これなら警告でないはずです。

steel_50130
質問者

お礼

ありがとうございます。 確かにその方法だと警告はでませんね。 私がやった方法は同じようにlsコマンドを使用しますが、 lsの結果をファイルにリダイレクトして、ファイルサイズを0かどうか判断する、という方法でした。 でも、sgt_lkさんの方法だと余計なファイルも作成しないのでこちらのほうがいいですね。 ありがとうございました。

その他の回答 (5)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.5

#4です。{ の後と } の前に空白を空けてください。 ただこれは、#4で書いたとおり、2)の「test -e $DIR/*.* が上手く行く場合」という条件付です。これって、ファイルが無いときは警告メッセージが出て、複数個あるとエラーになりませんか? if({ true $DIR/*.* }) then だと、ファイルが複数個あってもOKですが、ファイルが無いと警告メッセージが出ます。

steel_50130
質問者

お礼

おっしゃるとおり空白をあけるとできました。 ありがとうございます。 >これって、ファイルが無いときは警告メッセージが出て、>複数個あるとエラーになりませんか? 複数ファイルでエラーにはなりませんが、確かにファイルがないと警告がでます。実はそれがいやだったのでif文の中に組み込めばそれがなくなるかなと思ったのです。 でも結果的にはif文に組み込んでも警告メッセージがでてしまいました。。。 ただ文法的にはこちらのほうがきれいなので教えていただいたやり方を使おうと思います。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

手元に環境が無いので試せませんが、 >test -e $DIR/*.* >if($status == 0) then で上手く行くなら、 if({test -e $DIR/*.*}) then でいけるはずです。{ } の意味については、man csh の式の節の演算子の後あたりに書いてあります。

steel_50130
質問者

補足

回答ありがとうございます。 >if({test -e $DIR/*.*}) then で試しましたが、 }がありません。といったメッセージが表示され、エラーになってしまいました。 csh manを読むと確かに{}を使用して実行できそうなのですが。。。

  • ken__t
  • ベストアンサー率41% (53/129)
回答No.3

すみません。確かに参考で述べた方法ですと${DIR}ディレクトリのチェックにしかならないかも知れません。 最後の手段!!これでどうでしょうか? if( `ls -1 ${DIR}/ | wc -l` != 0 ) then なんとなく汚くなってしまいましたがこれが精一杯のような気がします。(自分がですが。。。) いかがでしょうか?

steel_50130
質問者

お礼

ありがとうございます。 確かにこれだとうまくいきますね。 う~ん。if文のなかで解決しようとするとやはりこういったやり方になってしまいますよね。 ありがとうございました!!

  • ken__t
  • ベストアンサー率41% (53/129)
回答No.2

#1です。 確認しました。 Bシェルの場合であれば、1)の条件式で正常に動作しました。 Cシェルでは”*.*: 曖昧”ですと怒られました。 Cシェルは融通が利かないところがあるので悩むことが多かった記憶があります。 単純にこれではどうでしょうか? if( -e ${DIR}/ ) then ${DIR}配下のファイルの存在確認だけであればこれでも良いとおもいます。

steel_50130
質問者

補足

回答ありがとうございます。 if( -e ${DIR}/ ) then にて試してみましたが、ファイルが存在しなくても条件は真となってしまいました。 つまり1)の例でいえば"NG"となってしまいました。 そちらの環境ではうまく動作したのでしょうか? だとすればこちらの環境に問題があるのかもしれませんが。。

  • ken__t
  • ベストアンサー率41% (53/129)
回答No.1

はじめまして。 1)のif ( -e $DIR/*.* ) thenをif( -e $DIR/*.* ) then にしてみては如何ですか? ※ifの直後のスペースを削る。 それでも駄目な場合は、$DIR/*.*を"${DIR}/*.*"としてみる。 現時点で確認できる環境がありませんので、間違っていたらごめんなさい。 明日以降でしたら確認が取れます。 中途半端でごめんなさい。

steel_50130
質問者

補足

はじめまして。回答ありがとうございます。 しかし回答のとおりやってみましたが、だめでした。 *(アスタリスク)はこのようなケースでは使用できないのでしょうか?

関連するQ&A