プログラミング初心者です。
以下のコードがシェルの文法的におかしい点を教えて下さい。
ex1はargvでファイル名を読み込む外部のC++プログラムです。
不足してる情報もあると思いますが、分かる範囲で教えていただけたら助かります。

#!/bin/sh

DIRx=$1
DIRy=$2

filesA=`ls $DIRx/*.data`
filesB=`ls $DIRy/*.data`
for x in $filesA;
for y in $filesB;

do
./ex1 $f $fi
done