解決済み

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

  • 暇なときにでも
  • 質問No.973928
  • 閲覧数959
  • ありがとう数4
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 20% (12/59)

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

よろしくお願いします。
通報する
  • 回答数6
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.6

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

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

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

これなら警告でないはずです。
お礼コメント
steel_50130

お礼率 20% (12/59)

ありがとうございます。
確かにその方法だと警告はでませんね。
私がやった方法は同じようにlsコマンドを使用しますが、
lsの結果をファイルにリダイレクトして、ファイルサイズを0かどうか判断する、という方法でした。
でも、sgt_lkさんの方法だと余計なファイルも作成しないのでこちらのほうがいいですね。
ありがとうございました。
投稿日時 - 2004-10-06 19:12:33
OKWAVE 20th Be MORE ありがとうをカタチに

その他の回答 (全5件)

  • 回答No.5

ベストアンサー率 48% (4314/8844)

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

if({ true $DIR/*.* }) then
だと、ファイルが複数個あってもOKですが、ファイルが無いと警告メッセージが出ます。
お礼コメント
steel_50130

お礼率 20% (12/59)

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

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

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

ただ文法的にはこちらのほうがきれいなので教えていただいたやり方を使おうと思います。
投稿日時 - 2004-08-31 21:01:58
  • 回答No.4

ベストアンサー率 48% (4314/8844)

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

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

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

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

お礼率 20% (12/59)

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

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

csh manを読むと確かに{}を使用して実行できそうなのですが。。。
投稿日時 - 2004-08-30 13:53:39
  • 回答No.3

ベストアンサー率 41% (53/129)

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

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

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

いかがでしょうか?
お礼コメント
steel_50130

お礼率 20% (12/59)

ありがとうございます。

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

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

ありがとうございました!!
投稿日時 - 2004-08-25 19:01:58
  • 回答No.2

ベストアンサー率 41% (53/129)

#1です。

確認しました。

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

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

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

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

お礼率 20% (12/59)

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

if( -e ${DIR}/ ) then

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

そちらの環境ではうまく動作したのでしょうか?
だとすればこちらの環境に問題があるのかもしれませんが。。
投稿日時 - 2004-08-25 13:24:59
  • 回答No.1

ベストアンサー率 41% (53/129)

はじめまして。

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

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

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

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

中途半端でごめんなさい。
補足コメント
steel_50130

お礼率 20% (12/59)

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

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

*(アスタリスク)はこのようなケースでは使用できないのでしょうか?
投稿日時 - 2004-08-24 20:21:55
このQ&Aのテーマ
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ