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 fi
sã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/echo
ou /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/ls
ou /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.