A primeira linha de um script de shell executável deve ser uma " shebang "; a sequência #!
é um "número mágico" que informa ao sistema que o resto da linha especifica um intérprete para o qual ele passará o nome do seu script.
Por exemplo, se você tiver um arquivo chamado "foo" (sem sufixo necessário) que se pareça com isto:
#!/bin/sh
echo This is foo
e você executou chmod +x foo
(isso é importante!), então:
./foo
é equivalente a isto:
/bin/sh ./foo
e produzirá a saída This is foo
.
Você pode chamar o script foo.sh
, por exemplo, se quiser enfatizar que é um script de shell, mas não é necessário. (Normalmente, não há razão para o usuário se importar com a forma como ele é implementado; nesse caso, você pode chamá-lo de foo
, que pode ser um script de shell, um script Perl ou Python ou um executável compilado.)
Qual é a diferença entre #!/bin/sh
e #!/bin/bash
? Para a maioria das finalidades, eles são intercambiáveis. /bin/sh
é geralmente o Bourne Shell, que remonta aos primórdios do Unix; você encontrará versões dele em todos os sistemas semelhantes ao Unix, incluindo Linux e MacOS. /bin/bash
é o "Bourne-Again Shell" do GNU, que inclui a funcionalidade padrão do shell Bourne, além de um número de extensões.
Se você usar apenas recursos que são suportados pelo Bourne shell, provavelmente é melhor usar #!/bin/sh
apenas como uma questão de estilo, e para tornar mais provável que seu script seja executado sem alteração em outros sistemas (o que pode não tem o Bash instalado).
Se você usar recursos específicos do Bash, precisará usar #!/bin/bash
.