Job Control Language (JCL) is a scripting language used on IBM mainframe operating systems. JCL is a set of statements that you code to tell the z/OS® operating system about the work you want it to perform. It instructs the system on how to run a batch job or start a subsystem. Although the instruction set of statements is quite large, however, most jobs can be run using a very small subset.
There are actually two IBM JCLs: one for the operating system lineage that begins with DOS/360 and whose latest member is z/VSE; and the other for the lineage from OS/360 to z/OS. They share some basic syntax rules and a few basic concepts, but are otherwise very different. But at the bottom line of it - JCL statements tell z/OS where to find the appropriate input, how to process that input (that is, what program or programs to run), and what to do with the resulting output.
One has to remember that JCL does end with the word "Language" but it's not a programming language and as such does nothing apart from just instructing the system on how to run a batch job or start a subsystem, as said earlier.
JES2/3, JCL, utilities.