Embora essa seja uma boa primeira aproximação quando se está começando a aprender o básico do uso de shells, no nível de "aqui é como se executa um programa" e "aqui é como se executa vários programas um após o outro em uma única linha" , na verdade não é verdade.
O mais difícil de entender para uma iniciante, mas a explicação mais correta é que a linguagem shell é uma linguagem de computador . Tem uma sintaxe . Essa sintaxe compreende vários elementos lexicais, incluindo (entre outras coisas) novas linhas, operadores, palavras e palavras reservadas.
if, then, else, E fisão todas as palavras reservadas . Eles têm significados particulares ao analisar a entrada que se dá a um shell, de acordo com sua gramática . Da mesma forma, ;é um operador separador .
A entrada na linguagem shell é, assim, tomada como um todo, um programa de computador que é interpretado por outro programa, um intérprete , o shell. Suas partes gramaticais individuais não são programas. A linguagem do shell é uma maneira de especificar (outros) programas para o shell executar.
[não é um elemento lexical especial na gramática do shell, como um operador. É uma palavra comum , que nomeia um desses programas chamado [. Muitas conchas têm um built-in versão deste programa, combinado no código do próprio programa shell, mas você também pode encontrar um externo programa com esse nome em algum lugar, como /bin/[ou /usr/bin/[, quais os programas que não sejam conchas pode invocar. Da mesma forma, ]também não é um elemento lexical de shell especial. É uma palavra comum, que se torna um argumento para o [programa. O [programa requer que seu argumento final, quando executado, seja ], o qual ele passa a ignorar.
Outro programa semelhante chamado em sua pergunta é echo. Novamente, a maioria dos shells possui uma versão interna deste programa. Mas, novamente, há também uma versão externa do programa, em algum lugar como /bin/echoou /usr/bin/echo, para programas que não sejam shells para invocar.
Um terceiro programa nomeado em sua pergunta é ls. Os shells geralmente não têm versões internas deste programa, e é um programa externo, que pode ser encontrado em algum lugar como /bin/lsou /usr/bin/ls.
Para o shell Bourne Again, você pode ler mais sobre isso nos Recursos Básicos do Shell da documentação de informações do shell do GNU Bourne Again. Outras conchas têm gramáticas diferentes, naturalmente. A Especificação Unix Única descreve uma sintaxe à qual todos os shells compatíveis com POSIX (em seus modos compatíveis com POSIX) devem aderir.
Leitura adicional
- " Gramática da casca ". Linguagem de Comando do Shell . Especificações básicas Edição 7. O grupo aberto. IEEE 1003.1-2008. ISBN 1937218812.
test. Utilitários . Especificações básicas Edição 7. O grupo aberto. IEEE 1003.1-2008. ISBN 1937218812.
- " Gramática da casca ". O Manual Z Shell . versão 5.3.1. 2017.