Primeira variante
Ele percorre todos os nomes de arquivos e verifica cada arquivo, tem um par ou não e imprime uma mensagem correspondente.
for i in *; do
base=${i%.*}
if [ -e "${base}.out" -a -e "${base}.ctl" ]; then
printf 'file "%s" has a pair\n' "$i"
else
printf 'file "%s" has not a pair\n' "$i"
fi
done
Segunda variante
Ele só é iterado por .ctl
arquivos e a verificação faz com que o arquivo .ctl
atual tenha um par - o arquivo .out
. Então, ele imprime somente arquivos emparelhados, omitindo o resto - arquivos não pareados.
for i in *.ctl; do
base=${i%.*}
if [ -e "${base}.out" ]; then
printf 'file "%s" has a pair "%s"\n' "$i" "${base}.out"
fi
done