The script has Windows line endings, and Linux is reading the carriage return as part of the command
A file edited or transferred from Windows ends every line with CRLF. Linux treats the trailing \\r as part of the last word, so bash becomes bash\\r and the interpreter line fails — and then every command inside the script fails the same way. The message often mentions a missing file, which sends people looking for the wrong thing: the file is there, its name just has an invisible character appended.
Convert the file: dos2unix script.sh, or sed -i 's/\\r$//' script.sh. To stop it recurring, set your editor to LF for these files and add a .gitattributes containing *.sh text eol=lf.