You can always just split the difference and call your shell script with
sh "./whatever.sh"`
if you want in a modern Jenkinsfile. It's really not that big of a deal to avoid Groovy if you truly cannot stand it.
As for cron, that's also supported out of the box.
triggers {
cron('0 0 * * *')
}
At that point Jenkins is mostly acting as a nice frontend to all those cronjobs and shell scripts, but at least it keeps records of all the logs etc.