• ベストアンサー

シェルスクリプトでのファイルの存在チェック

シェルスクリプトで、あるディレクトリの下に、*.cファイルか*.hファイルのどちらかがあるかどうかを調べるにはどうしたら良いでしょうか? ファイルが存在しない場合のエラーメッセージは表示させたくありません。 test grep *.c *.h if [ $? -eq 1 ] でやってみたのですが、*.cファイルか*.hファイルの両方が存在すればエラーメッセージは表示されませんが、どちらかがない場合はエラーメッセージが表示されてしまいます。

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

ちょっと変な感じだけど if ls -1 |grep '.[ch]$' 2> /dev/null; then なにか fi くらい?

real_neo
質問者

お礼

ありがとうございます。 やってみます。

その他の回答 (3)

  • ishi7474
  • ベストアンサー率32% (71/216)
回答No.4

testコマンド([)自体にand/orに相当する機能があるので、 if [ -f *.c -o -f *.h ] ではだめでしょうか(-f=通常ファイルが存在するかどうか(-eだと同じ名前の ディレクトリでも存在すると見られるので), -o=or条件)。

real_neo
質問者

補足

やってみたのですが、これだとカレントディレクトリに対してしか効きませんでした。 スクリプトの引数として渡したディレクトリ名を使って、 if [ -f $1/*.c ] などとすると、シェルのSyntaxエラーになります。 どのディレクトリでもできるやり方はありませんか?

  • scratch
  • ベストアンサー率50% (5/10)
回答No.2

bashと仮定して if [ -e *.c ] || [ -e *.h ] ; then echo "Found" fi どちらがあったかを表示なりするのでしたら、 elif 等で分岐して判断するとかはどうですか。

real_neo
質問者

お礼

ありがとうございます。 やってみます。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

csh なら set files = `ls *.c *.h` if ( $#files > 0 ) then  処理 endif だけど。bash はわからん。

real_neo
質問者

お礼

ありがとうございます。 ところで、Linuxならbashとcshどちらでも使えますか?