- ベストアンサー
シェルスクリプトでのファイルの存在チェック
シェルスクリプトで、あるディレクトリの下に、*.cファイルか*.hファイルのどちらかがあるかどうかを調べるにはどうしたら良いでしょうか? ファイルが存在しない場合のエラーメッセージは表示させたくありません。 test grep *.c *.h if [ $? -eq 1 ] でやってみたのですが、*.cファイルか*.hファイルの両方が存在すればエラーメッセージは表示されませんが、どちらかがない場合はエラーメッセージが表示されてしまいます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ちょっと変な感じだけど if ls -1 |grep '.[ch]$' 2> /dev/null; then なにか fi くらい?
その他の回答 (3)
- ishi7474
- ベストアンサー率32% (71/216)
testコマンド([)自体にand/orに相当する機能があるので、 if [ -f *.c -o -f *.h ] ではだめでしょうか(-f=通常ファイルが存在するかどうか(-eだと同じ名前の ディレクトリでも存在すると見られるので), -o=or条件)。
補足
やってみたのですが、これだとカレントディレクトリに対してしか効きませんでした。 スクリプトの引数として渡したディレクトリ名を使って、 if [ -f $1/*.c ] などとすると、シェルのSyntaxエラーになります。 どのディレクトリでもできるやり方はありませんか?
- scratch
- ベストアンサー率50% (5/10)
bashと仮定して if [ -e *.c ] || [ -e *.h ] ; then echo "Found" fi どちらがあったかを表示なりするのでしたら、 elif 等で分岐して判断するとかはどうですか。
お礼
ありがとうございます。 やってみます。
- koko_u_
- ベストアンサー率18% (459/2509)
csh なら set files = `ls *.c *.h` if ( $#files > 0 ) then 処理 endif だけど。bash はわからん。
お礼
ありがとうございます。 ところで、Linuxならbashとcshどちらでも使えますか?
お礼
ありがとうございます。 やってみます。