It looks like your filesystem is mounted with the
noexec option, which forbids executing programs on that filesystem by acting as if all execution bits in permissions were unset. If you use the
user mount option (or if some user interface uses it under the hood),
noexec is turned on unless you explicitly turn it off with
Most USB sticks use the MSDOS-derived VFAT filesystem, which has no notion of permissions. You can only specify permission bits when you mount the filesystem, and these permissions apply to all the files on that filesystem.
If you don't have permission to execute a script, call the interpreter explicitly:
For a dynamically linked binary, invoke the dynamic linker.