Code:
#!/bin/bash
for i in $(ls /home); do
if [ -d /home/$i/assignment ]; then
files=$(ls /home/$i/assignment/)
if [ -z $files ]; then
echo "$i" >> ./logfile
else
[ -d ./report ] || mkdir -p ./report
cp /home/$i/assignment/* ./report/
fi
else
echo "$i" >> ./logfile
fi
done
Something like this maybe? Havent tried it out since I don't have a linux box around me. But it should work

If it doesn't i would recommend that you try it with a nested for-loop instead like this:
Code:
#!/bin/bash
for i in $(ls /home); do
if [ -d /home/$i/assignment ]; then
x=0
for a in $(ls /home/$i/assignment/); do
[ -d ./report ] || mkdir -p ./report
cp /home/$i/assignment/$a ./report/
let x=x+1
done
if [ $x -eq 0 ]; then
echo "$i" >> ./logfile
fi
else
echo "$i" >> ./logfile
fi
done
This method thou should be alot slower since you're just copying 1 file per itteration.
Best regards
Fredrik Eriksson