What is a script language on Unix
There's a lot of argument in general about what is (merely) a 'scripting language' and what is a fully fledged programming language, deserving to hold its head up high besides grown up languages like C, Java, and Pascal.
Unix is a simpler place, because it has a simple and very clear
definition of what is a script versus what is a program. To wit: if the
kernel can directly
exec() you in place as is, you are a program. If
not, you are a script (sometimes called an 'interpreter script') and
actually get processed by your interpreter, not the kernel.
(Note that in-place execution doesn't preclude the use of a helper; almost every program you run on a modern Unix requires the help of the dynamic loader, which is not part of each executable.)
While technical and somewhat picky, this distinction is important. Among other issues, there are a number of places where a program can be used that a script cannot be.
As an immediate corollary, on Unix a language that cannot be used to make programs is a script language, and there are some things that programs written in that language will never be able to do directly. Note that this says nothing about their suitability for serious jobs.
(While scripts usually start with '
#! <interpreter>', some Unixes
have ways to run scripts without that; Linux has binfmt_misc, for example.)