Eu sou muito novo no Ubuntu. Eu ouço as pessoas dizerem "shell scripting", "bash scripting".
Eu me pergunto, eles são iguais? Ou eles são diferentes?
Eu sou muito novo no Ubuntu. Eu ouço as pessoas dizerem "shell scripting", "bash scripting".
Eu me pergunto, eles são iguais? Ou eles são diferentes?
Respostas:
O Bash ( bash
) é um dos muitos shells Unix disponíveis (ainda os mais usados). Bash significa " B ourne A gain SH ell" e é uma substituição / melhoria do shell Bourne original ( sh
).
Os scripts do shell são scripts em qualquer shell, enquanto os scripts do Bash são scripts especificamente para o Bash. Na prática, no entanto, "shell script" e "bash script" são frequentemente usados de forma intercambiável, a menos que o shell em questão não seja o Bash.
EDIT: Na verdade, o shell de script padrão no Ubuntu é traço, enquanto o shell interativo padrão (o que você obtém se você abrir um terminal) é Bash. No entanto, os dois termos ainda são basicamente intercambiáveis.
/bin/sh
ser um link simbólico /bin/dash
torna o shell do sistema padrão , mas não é o shell de script padrão , ou seja, não existe uma regra escrita que você precise usar absolutamente /bin/sh
. Quando se usa /bin/sh
, é principalmente por motivos de portabilidade, quando você espera que seu script seja usado em várias plataformas de sistemas operacionais semelhantes ao Unix, a maioria das quais com /bin/sh
shell da família Bourne compatível com POSIX.
Introdução
Script de shell e Bash
script não são a mesma coisa, pois existem outros shells, como o sh
que pode ser usado para executar um script; um script destinado a ser executado por Bash
deve ser rotulado como um Bash
script. Os termos geralmente são usados de forma intercambiável porque Bash
, com sua funcionalidade estendida em comparação com sh
, é o mais comumente usado para executar scripts de usuário em muitas distribuições. No entanto, existem outros shells, como o Korn (ksh)
, C shell (csh)
e o Z shell (zsh)
, mas não iremos abordá-los aqui como uma discussão sh
e bash
é mais relevante para o Ubuntu. Um excelente artigo da IBM aqui detalha a evolução dos shells no Linux e descreve bem a arquitetura do shell e como os shells diferem.
Script de Shell
Sh
foi o shell Unix original desenvolvido por Stephen Bourne; no entanto, os sistemas baseados no Debian e o Ubuntu consideram dash
seu sh
shell ( sh
na verdade, está vinculado a dash
). No Debian e no Ubuntu, devido à velocidade sh
, é mais frequentemente usado para procedimentos críticos do sistema e para executar scripts importantes na inicialização; para mais detalhes veja o wiki do Ubuntu . Bash
significa Bourne Again SHell e foi desenvolvido mais tarde por Brian Fox e ampliou muito o original sh
. O desenvolvimento de Fox e outros Bash
foi uma parte importante do projeto GNU. Veja esta grande discussão sobre a história de Bash
para mais informações.
É importante observar que ambos sh
e Bash
, como usado no Ubuntu e em outras distribuições, são POSIX
compatíveis, o que significa que eles assinam vários padrões sobre como os comandos são executados no Shell. Isso é para garantir que os resultados dos scripts usados no sistema operacional possam ser previstos com confiabilidade e que o comportamento do shell possa ser mantido dentro desses POSIX
parâmetros, pois isso é particularmente importante para os desenvolvedores. Para mais informações sobre os padrões, consulte a documentação oficial .
Freqüentemente, os scripts de shell têm o sufixo .sh
, mesmo que tenham a intenção de serem executados como bash
scripts e tenham #!/bin/bash
a parte superior do script. Na verdade, não importa se o script é chamado script.sh ou my.script , o que importa é se a chamada para o intérprete é /bin/sh
ou /bin/bash
. Os scripts de shell também podem ser chamados na linha de comando com sh
ou bash
.
No entanto, é importante observar que os resultados podem ser diferentes, dependendo de qual intérprete é chamado, pois nem todos os bash
comandos funcionam sh
, enquanto a maioria dos sh
comandos funciona bash
. Em geral, a maioria dos usuários deseja usar /bin/bash
para seus scripts, para que possam tirar proveito do conjunto de recursos estendidos; os scripts do sistema podem ser executados com, /bin/sh
se necessário.
Recursos para scripts do Bash Shell
Às vezes, é difícil encontrar recursos úteis on-line que sigam as boas práticas e que ofereçam conselhos que permitirão criar scripts úteis. Depois man bash
, alguns dos recursos mais importantes são o wiki de Greg , os hackers Bash e o livro recente de Steve Parker sobre scripts da Shell, que se concentra principalmente Bash
e é publicado por O'Reilly. Uma boa introdução também é realizada pelo Guia para iniciantes do Bash .
Existem vários shells disponíveis para Ubuntu, como bash
, zsh
, ksh
, tcsh
e csh
.
Assim, sempre que alguém diz shell , ele está falando de um desses. No entanto, essas conchas diferem um pouco uma da outra. Então, quando alguém fala sobre bash
scripts, ele está usando um shell, mas quando alguém está falando sobre scripts de shell, ele não está em si bash
. Mas como bash
é comumente usado em scripts para Ubuntu, ele geralmente é. Além disso, as diferentes conchas são as mesmas em muitos aspectos, por isso geralmente não importa.
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29 11:53 /bin/sh -> dash*
$ ls -l /bin/dash
-rwxr-xr-x 1 root root 109768 Mar 29 11:53 /bin/dash*
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 955024 Apr 3 08:58 /bin/bash*
Isso mostra que 'sh' é um link simbólico para 'dash', e que / bin / bash, que é o shell interativo padrão no Ubuntu, é um executável quase 9 vezes maior que / bin / sh.
De fato, 'man sh' (1590 linhas) vs 'man bash' (5459 linhas) revela que bash é um grande superconjunto do tradicional 'sh'.
Leia mais aqui:
O script do shell seria definido como um script orientado à portabilidade, que pode ser executado por um shell do sistema de sistemas operacionais compatíveis com POSIX. A sintaxe seria idêntica ou semelhante à sintaxe da linguagem de script de shell definida pelo padrão POSIX. Esse é o padrão para a maioria dos sistemas operacionais compatíveis com POSIX, como Linux / Unix / * BSD etc. O POSIX é o caminho mais comum para compatibilidade entre sistemas operacionais.
Diferentes sistemas operacionais dos mencionados acima implementam shells diferentes para o uso não interativo (por exemplo, para executar scripts do sistema ou scripts que usam #! /bin/sh
shebang) que, além de implementar comandos e sintaxe POSIX, têm suas próprias extensões ou podem ser removidos de alguns recursos menos úteis por motivos de desempenho, mas o terreno do POSIX permite um nível muito alto de portabilidade de scripts projetados para diferentes sistemas operacionais compatíveis com POSIX.
A maioria referido OSs têm shell interativo separado, que geralmente é cheio de recursos do bash . O Bash é compatível com POSIX em grande parte, mas também possui um grande conjunto de comandos adicionais e suporta sintaxe diferente. Iniciar o Bash com a opção de linha de comando --posix ou executar 'set -o posix' enquanto o Bash estiver em execução fará com que o Bash se adapte mais estreitamente ao padrão POSIX, alterando o comportamento para corresponder ao especificado pelo POSIX nas áreas em que o Bash padrão difere, consulte: https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html
Graças às regras uniformes sobre a colocação de executáveis para shells (geralmente estão no diretório '/ bin /'), podemos ter regras uniformes para a criação de scripts shell, mais especificamente, estamos claros qual o caminho a ser inserido na expressão shebang para apontar para um shell executável adequado para executar o script. Os sistemas de arquivos Unix / Linux / * BSD não suportam extensões intrinsecamente, portanto, as extensões de arquivos servem apenas como uma dica adicional ou para fins de indexação.
No Debian / Ubuntu especificamente, bin/sh
há um link simbólico apontando para o bin/dash
qual é um executável de um shell de traço . Isso faz do dash o shell do sistema, que é estimado em 4x mais rápido e tem um tamanho de aproximadamente 1/10 do que o bash mais funcional. fonte: https://unix.stackexchange.com/questions/148035/is-dash-or-some-other-shell-faster-than-bash
Terminal interativo do Debian / Ubuntu é, por padrão, como em muitos outros sistemas operacionais Unix-like, festança, para a qual o caminho também é uniforme: /bin/bash
.
Padrão POSIX.1-2017: http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap02.html
Se um comando ou opção não for definido pelo POSIX, não o coloque em um
#! /bin/sh
script.
Para converter seu script do formulário bash para POSIX, convém verificar automaticamente se há bugs no script shell ou ver quais alterações em seu script bash você deve fazer para torná-lo compatível com POSIX: