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.