Você está usando aspas duplas para delimitar a string, bem como a própria string, então a string entre aspas para de início e os caracteres internos de aspas não são incluídos:
sed -i "s|"jdbc:mysql:...
Ends here-^
Você pode escapar de cada uma das citações dentro da string:
sed -i "s|\"jdbc:mysql://localhost/bajaj\",\"root\", \"root\"|\"jdbc:mysql://${HOSTNAME}/${DBNAME}\",\"${DBUSERNAME}\", \"${DBPASSWORD}\"|" DbConnection.java
Agora, cada aspas duplas dentro do comando sed
tem uma barra invertida antes dele, para impedir que o shell o interprete.
Como alternativa, você pode usar aspas simples ao redor do argumento sed
:
sed -i 's|"jdbc:mysql://localhost/bajaj","root", "root"|"jdbc:mysql://'"${HOSTNAME}"'/'"${DBNAME}"'","'"${DBUSERNAME}"'", "'"${DBPASSWORD}"'"|' DbConnection.java
Para que as variáveis ainda sejam substituídas, deixamos uma cotação única em torno de cada variável: 'AB'"$VAR"'CD'
. Citamos duas vezes as variáveis no shell para impedir que elas sejam expandidas em várias palavras.