As per your solution it should work
scp
returns 0 only when it succeeds. so you can write like this:
scp -q machineB:/path/to/your/file . || scp -q machineC:/path/to/your/file . || echo "Sorry no file found"
Now let first you check retrun code of each command like as follows
scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@machineB:/te/data/te_snapshot/20140411/t1_weekly_1680_"$el"_200003_5.data /data01/primary/.
if [[ $? -ne 0 ]]; then
echo "No file found"
exit 1
else
echo "oh..file is here!"
fi
Same for second command. Now in both case if you get non zero value then your solution must work.