アプリ版:「スタンプのみでお礼する」機能のリリースについて

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文で一発判定をしたいと思っているのですが、正しい記述方法を教えてください。

よろしくお願いします。

A 回答 (6件)

一発判定ではなくても、警告が出なければ良いんですよね?



***************************
set FILE = (`ls $DIR | grep *`)
if ( $#FILE != 0 ) then
echo "NG"
exit 1
else
echo "OK"
endif

exit 0
***************************

これなら警告でないはずです。
    • good
    • 1
この回答へのお礼

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

お礼日時:2004/10/06 19:12

#4です。

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

if({ true $DIR/*.* }) then
だと、ファイルが複数個あってもOKですが、ファイルが無いと警告メッセージが出ます。
    • good
    • 0
この回答へのお礼

おっしゃるとおり空白をあけるとできました。
ありがとうございます。

>これって、ファイルが無いときは警告メッセージが出て、>複数個あるとエラーになりませんか?
複数ファイルでエラーにはなりませんが、確かにファイルがないと警告がでます。実はそれがいやだったのでif文の中に組み込めばそれがなくなるかなと思ったのです。

でも結果的にはif文に組み込んでも警告メッセージがでてしまいました。。。

ただ文法的にはこちらのほうがきれいなので教えていただいたやり方を使おうと思います。

お礼日時:2004/08/31 21:01

手元に環境が無いので試せませんが、



>test -e $DIR/*.*
>if($status == 0) then
で上手く行くなら、

if({test -e $DIR/*.*}) then

でいけるはずです。{ } の意味については、man csh の式の節の演算子の後あたりに書いてあります。

この回答への補足

回答ありがとうございます。

>if({test -e $DIR/*.*}) then
で試しましたが、
}がありません。といったメッセージが表示され、エラーになってしまいました。

csh manを読むと確かに{}を使用して実行できそうなのですが。。。

補足日時:2004/08/30 13:53
    • good
    • 0

すみません。

確かに参考で述べた方法ですと${DIR}ディレクトリのチェックにしかならないかも知れません。

最後の手段!!これでどうでしょうか?
if( `ls -1 ${DIR}/ | wc -l` != 0 ) then

なんとなく汚くなってしまいましたがこれが精一杯のような気がします。(自分がですが。。。)

いかがでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。

確かにこれだとうまくいきますね。

う~ん。if文のなかで解決しようとするとやはりこういったやり方になってしまいますよね。

ありがとうございました!!

お礼日時:2004/08/25 19:01

#1です。



確認しました。

Bシェルの場合であれば、1)の条件式で正常に動作しました。

Cシェルでは”*.*: 曖昧”ですと怒られました。
Cシェルは融通が利かないところがあるので悩むことが多かった記憶があります。

単純にこれではどうでしょうか?
if( -e ${DIR}/ ) then

${DIR}配下のファイルの存在確認だけであればこれでも良いとおもいます。

この回答への補足

回答ありがとうございます。

if( -e ${DIR}/ ) then

にて試してみましたが、ファイルが存在しなくても条件は真となってしまいました。
つまり1)の例でいえば"NG"となってしまいました。

そちらの環境ではうまく動作したのでしょうか?
だとすればこちらの環境に問題があるのかもしれませんが。。

補足日時:2004/08/25 13:24
    • good
    • 0

はじめまして。



1)のif ( -e $DIR/*.* ) thenをif( -e $DIR/*.* ) then
にしてみては如何ですか?
※ifの直後のスペースを削る。

それでも駄目な場合は、$DIR/*.*を"${DIR}/*.*"としてみる。

現時点で確認できる環境がありませんので、間違っていたらごめんなさい。

明日以降でしたら確認が取れます。

中途半端でごめんなさい。

この回答への補足

はじめまして。回答ありがとうございます。

しかし回答のとおりやってみましたが、だめでした。

*(アスタリスク)はこのようなケースでは使用できないのでしょうか?

補足日時:2004/08/24 20:21
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!