The command line interpreter is interested in looking at directories and executing commands. If the interpreter were written into the kernel it would not only complicate the Kernel in most cases but the code would be more difficult to write. Much better to use the API that the kernel provides so it can make use of all the facilities the kernel provides. A kernel might provide:
- Transport level network communication (the ability to make network connections)
- Process creation for multiple-users arranging for each process to believe that it has the whole machine (when it just has a piece of it)
- Multitasking, allow multiple programs to run on one CPU
- Memory Management: make it look like there is more main memory than there is by using hard-disk.
- Protection: protect commands from each other and malicious software by controlling how they can access each other. The kernel runs in a separate "mode" often giving protection at a hardware level.
- Disk: provide abstractions so that different media can be treated as disks.
- Hardware Drivers: to provide easy to use interfaces with new hardware installed. Some hardware may need some specific requirements for it to work correctly.
- Multi User: the system might give the impression to each user that they have a machine to themselves.
There are different types of kernel and the services that a kernel provides can vary from system to system. Rarely is the CLI built in: there are better candidates which often don't make it. Having the CLI outside the kernel also has many advantages, on many systems it is much the same as any other software and can be upgraded and tweaked as need be. Upgrading kernel software is far riskier and normally has more profound effect on the machine's operation.
Background commands refer to commands are commands that the interpreter should not wait for before asking/executing another command. A command that runs in the foreground will stop the CLI from accepting/executing new commands while it is running. This has a little to do with the kernel, first the kernel needs to support multitasking so many tasks can be run. It would also normally indicate that multi-tasking was available in a form where CPU-time is shared out well. I don't think it helps too much with your question.