A maneira correta de fazer isso é usar
if /sbin/ethtool eth0 | /bin/grep -q "Link detected: yes" ; then
exec prog1
else
exec prog2
fi
O argumento -q para o grep descartará o stdout e a instrução if verificará o status do comando executado. [ /sbin/ethtool eth0 | /bin/grep -q "Link detected: yes" ]
não é um comando válido, porque [
é na verdade um programa que aceita argumentos como o grep. Portanto, [
não consegue entender /sbin/ethtool eth0 | /bin/grep -q "Link detected: yes"
e isso falha.