Scripting languages always run in a specific operating system or application or framework, not stand alone, not from native code and usually in an interpreter. They may be somewhat portable, but will usually require changes, code alterations or an emulator to run in if they are to run correctly or at all. While some are becoming more adept at using fundamental data types, operators and programming language facilities, they all share limitations on portability and non-native restrictions on execution speed and code efficiency. I've heard this term for everything from application specific macro languages to web enabled safe language extensions and simple batch language facilities in various operating systems.
Compiled languages usually compile to, or output, natively runnable code for the OS and / or hardware platform the compiler is designed for. The source code itself is portable to other platforms or operating systems only if a compiler for that language exists in those other environments. Compiled languages usually have facility to support more types of variable storage, a full complement of data types, and some allow fully object oriented development. It usually also allows direct system calls as well as access to standard language dependent keywords, operators and data types. It will, by necessity, support all Boolean tests, all of Jacopini's constructs, rudimentary mathematical operations and standard and error input and output for console and file operations.
An interpreter is an application that will run specific language programs when active at run time. It reads the program, usually from a text file coded in it's own editor or a standard text editor, parses it in memory and executes the code as written one line (or other program code unit) at a time in memory. It must be running itself on the platform at the time the program is executing and uses more 'overhead' to execute the code. Since it uses more resources from the computer hardware and the operating system, it also runs, generally, more slowly than natively compiled code. An interpreter never compiles or links code into a useful file that can be redistributed as software in a stand alone format.
A compiler can and does create object code for a given platform from the language code that it is given. This object code, while containing all the instructions and data necessary to run, still will need to be combined with any needed library routines, loader code and / or put into an operating system specific configuration to run as it should on a specific hardware / operating system correctly and without crashing. That is the job of a linker in most cases. After a proper 'build', using first the compiler and then the appropriate linker and any needed library code, you will have a natively compatible executable file(s) ready to be distributed as an application without need of sending the compiler (or linker and libraries) along with the application.