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.
O que define o traço como o shell de script padrão?
Wjandrea
11
@wjandrea O fato de /bin/shser um link simbólico /bin/dashtorna 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/shshell da família Bourne compatível com POSIX.
Sergiy Kolodyazhnyy
29
Introdução
Script de shell e Bashscript não são a mesma coisa, pois existem outros shells, como o shque pode ser usado para executar um script; um script destinado a ser executado por Bashdeve ser rotulado como um Bashscript. 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 she 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
Shfoi o shell Unix original desenvolvido por Stephen Bourne; no entanto, os sistemas baseados no Debian e o Ubuntu consideram dashseu shshell ( shna 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 . Bashsignifica Bourne Again SHell e foi desenvolvido mais tarde por Brian Fox e ampliou muito o original sh. O desenvolvimento de Fox e outros Bashfoi uma parte importante do projeto GNU. Veja esta grande discussão sobre a história de Bashpara mais informações.
É importante observar que ambos she Bash, como usado no Ubuntu e em outras distribuições, são POSIXcompatí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 POSIXparâ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 bashscripts e tenham #!/bin/basha 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/shou /bin/bash. Os scripts de shell também podem ser chamados na linha de comando com shou bash.
No entanto, é importante observar que os resultados podem ser diferentes, dependendo de qual intérprete é chamado, pois nem todos os bashcomandos funcionam sh, enquanto a maioria dos shcomandos funciona bash. Em geral, a maioria dos usuários deseja usar /bin/bashpara seus scripts, para que possam tirar proveito do conjunto de recursos estendidos; os scripts do sistema podem ser executados com, /bin/shse 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 Bashe é publicado por O'Reilly. Uma boa introdução também é realizada pelo Guia para iniciantes do Bash .
Esta resposta é realmente superior à minha (a resposta aceita), a minha veio apenas uma semana antes desta.
Hilton Shumway
4
Existem vários shells disponíveis para Ubuntu, como bash, zsh, ksh, tcshe 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 bashscripts, 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 4Mar2911:53/bin/sh -> dash*
$ ls -l /bin/dash-rwxr-xr-x 1 root root 109768Mar2911:53/bin/dash*
$ ls -l /bin/bash-rwxr-xr-x 1 root root 955024Apr308: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'.
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/shshebang) 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
Especificador Shebang e caminhos uniformes para executáveis de shell em sistemas operacionais semelhantes a Unix
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.
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.
Se um comando ou opção não for definido pelo POSIX, não o coloque em um
#! /bin/shscript.
Converta seu script ou verifique se há erros
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:
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.
fonte
/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 osh
que pode ser usado para executar um script; um script destinado a ser executado porBash
deve ser rotulado como umBash
script. Os termos geralmente são usados de forma intercambiável porqueBash
, com sua funcionalidade estendida em comparação comsh
, é o mais comumente usado para executar scripts de usuário em muitas distribuições. No entanto, existem outros shells, como oKorn (ksh)
,C shell (csh)
e oZ shell (zsh)
, mas não iremos abordá-los aqui como uma discussãosh
ebash
é 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 consideramdash
seush
shell (sh
na verdade, está vinculado adash
). No Debian e no Ubuntu, devido à velocidadesh
, é 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 originalsh
. O desenvolvimento de Fox e outrosBash
foi uma parte importante do projeto GNU. Veja esta grande discussão sobre a história deBash
para mais informações.É importante observar que ambos
sh
eBash
, como usado no Ubuntu e em outras distribuições, sãoPOSIX
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 dessesPOSIX
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 comobash
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 comsh
oubash
.No entanto, é importante observar que os resultados podem ser diferentes, dependendo de qual intérprete é chamado, pois nem todos os
bash
comandos funcionamsh
, enquanto a maioria dossh
comandos funcionabash
. 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 principalmenteBash
e é publicado por O'Reilly. Uma boa introdução também é realizada pelo Guia para iniciantes do Bash .fonte
Existem vários shells disponíveis para Ubuntu, como
bash
,zsh
,ksh
,tcsh
ecsh
.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 sibash
. Mas comobash
é 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.fonte
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:
fonte
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
Especificador Shebang e caminhos uniformes para executáveis de shell em sistemas operacionais semelhantes a Unix
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 obin/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-bashTerminal 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
A regra geral seria:
Converta seu script ou verifique se há erros
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:
https://www.shellcheck.net/
http://mywiki.wooledge.org/Bashism
fonte