Embora seja uma primeira aproximação justa quando se está começando a aprender os fundamentos básicos do uso de shells, no nível de "aqui está como um programa é executado" e "aqui está como um executa vários programas um após o outro em um linha única ", não é verdade.
O mais difícil de entender para um 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 fi são todas palavras reservadas . Eles têm significados particulares quando analisa a entrada que se dá a um shell, de acordo com sua gramática . Da mesma forma, ; é um separador operador .
A entrada na linguagem shell é, portanto, tomada como um todo, um programa de computador que é interpretado por outro programa, um interpretador , o shell. Suas partes gramaticais individuais não são programas. A linguagem shell é uma maneira de especificar (outros) programas para o shell rodar.
[ não é um elemento léxico especial na gramática da shell, como um operador. É uma palavra comum, que nomeia um desses programas chamado [ . Muitos shells têm uma versão integrada deste programa, combinada no código do próprio programa shell, mas você também pode encontrar um programa externo por esse nome em algum lugar, como /bin/[ ou /usr/bin/[ , que os programas diferentes de podem invocar. Igualmente, ] também não é um elemento léxico 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 então ignora.
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/echo ou /usr/bin/echo , para os programas diferentes de invocar.
Um terceiro programa chamado em sua pergunta é ls . Shells geralmente não possuem versões internas deste programa, e é um programa externo, encontrado em algum lugar como /bin/ls ou /usr/bin/ls .
Para o shell Bourne Again, você pode ler mais sobre isso em Recursos Básicos do Shell da documentação de informações do shell GNU Bourne Again. Outras conchas têm gramáticas diferentes, naturalmente. A Especificação Unix Única descreve uma sintaxe que todas as shells em conformidade com POSIX (em seus modos em conformidade com POSIX) devem aderir.
Leitura adicional
- " Gramática de concha ". Linguagem de comando do shell . Especificações Básicas Problema 7. O Grupo Aberto. IEEE 1003.1-2008. ISBN 1937218812.
-
test . Utilitários . Especificações Básicas Problema 7. O Grupo Aberto. IEEE 1003.1-2008. ISBN 1937218812.
- " Gramática de concha ". O Manual do Z Shell . versão 5.3.1. 2017.