su читает пароль не из stdin (файлового потока, куда у вас перенаправляется echo), а напрямую из tty. Из соображений безопасности и удобства (cmd1 | su cmd2 спросит пароль у пользователя и нормально передаст вывод cmd1 на вход cmd2).
Светить пароль рута в скрипте категорически неправильно и небезопасно.
Правильное решение вашей задачи - использование sudo.
Нужно настроить через /etc/sudoers для пользователя/группы, от которой вызывается скрипт разрешение запускать нужную команду через sudo с правами рута без запроса пароля.