ln source target 2>/dev/null || ln -s source target 2>/dev/null || exit 1
ou, um pouco mais "interativamente" (chattier),
if ! ln source target 2>/dev/null; then
echo 'failed to create hard link, trying symbolic link instead' >&2
if ! ln -s source target 2>/dev/null; then
echo 'that failed too, bailing out' >&2
exit 1
fi
fi
Remova os redirecionamentos para /dev/null
para ver as mensagens de erro exibidas por ln
(se houver).