Interface vs Shell
Há muita confusão sobre o que é a Interface de Linha de Comando e o que é o Shell. Como foi mencionado nos comentários, o que quer que tenha a palavra "interface", é ideia ou teoria. Quando você ouvir a palavra "interface", pense em "idéia de comunicação com o computador". A interface pode ser entre dois computadores, como o cabo Ethernet, mas também entre o computador e o usuário .
Shell é essa teoria colocada em prática. CLI diz que o usuário interage com o computador via texto, e o shell faz exatamente isso. A interface gráfica do usuário diz "o usuário interage através de botões e ícones", e o GNOME ou o Unity fornecem isso. Um shell é atualmente um software, algum objeto que o usuário pode usar para interagir com o computador. "Interface" apenas apresenta uma ideia de como essa interação deve acontecer. Hoje em dia, eles são usados de forma intercambiável e "CLI" e "Shell" se tornaram sinônimos.
De volta ao dia, quando os computadores estavam usando rolos de papel para imprimir informações, a interface de linha de comando era a única ideia. Veja por exemplo este vídeo: link Claro que não há shell como bash ou ksh, mas há um shell mínimo que lê usuário comandos e processa-os.
O que acontece sem o CLI e o shell?
Pense nisso por um segundo: Por que precisamos de shell? Para interação do usuário! E quanto aos momentos em que não há necessidade de interação com o usuário? Então não há necessidade de shell. Um ótimo exemplo disso são máquinas de lavar roupa, impressoras sem fio, cafeteiras. Esses dispositivos já executam o kernel do Linux, mas não há necessidade de interagir com o usuário via texto. Precisamos perceber os pressionamentos de botões e mudanças de pressão e voltagem. Portanto, não há necessidade de interface shell / linha de comando. No entanto, ainda é possível obtê-lo através de técnicas inteligentes de engenharia / hacking: link
Pense nos chips microcontroladores. Eu trabalhei com chips PIC18 por exemplo. Esses caras apenas sentam em sua placa de circuito e sempre executam o código C. Não há necessidade real de ler comandos. Mas para o meu projeto eu conectei esse chip com Raspberry Pi, e estava enviando caracteres de texto como A, B, C para ele. Isso é interação do usuário! Você poderia argumentar que esse é um shell mínimo para se comunicar com o dispositivo.
Comunicação sem casca
Tecnicamente, quando você usa o shell, você não está se comunicando diretamente com o kernel. O Shell pode estar fazendo chamadas do sistema em seu nome. Em teoria, você poderia se comunicar com o kernel compilando e inserindo o módulo do kernel em C sem nunca usar o shell, mas isso seria altamente ineficiente e demorado.