Existem duas maneiras de executar um script de shell no Linux. Você pode usar:
bash script.sh
Ou você pode executar o script de shell desta forma:
./script.sh
Isso pode ser simples, mas não explica muito. Não se preocupe, farei a explicação necessária com exemplos para que você entenda por que uma sintaxe específica é usada no formato fornecido durante a execução de um script de shell.
Vou usar este script de shell de uma linha para tornar as coisas o mais descomplicadas possível:
[email protected]:~/Scripts$ cat hello.sh
echo "Hello World!"
Método 1: executar um script de shell passando o arquivo como argumento para o shell
O primeiro método envolve passar o nome do arquivo de script como um argumento para o shell.
Considerando que o bash é o shell padrão, você pode executar um script como este:
bash hello.sh
Você conhece a vantagem dessa abordagem? Seu script não precisa ter permissão de execução. Muito prático para tarefas rápidas e simples.
Executar um Shell Script Linux
Se você ainda não estiver familiarizado, aconselho-o a ler o guia detalhado sobre permissão de arquivo no Linux.
Lembre-se de que ele precisa ser um script de shell que você passa como argumento. Um script de shell é composto de comandos. Se você usar um arquivo de texto normal, ele reclamará de comandos incorretos.
Executando um arquivo de texto como script
Nesta abordagem, você especificou explicitamente que deseja usar bash como o interpretador para o script.
Shell é apenas um programa e o bash é uma implementação disso. Existem outros programas de shells como ksh, zsh, etc. Se você tiver outros shells instalados, poderá usá-los também em vez do bash.
Por exemplo, instalei zsh e usei-o para executar o mesmo script:
Método 2: execute o script de shell especificando seu caminho
O outro método para executar um script de shell é fornecendo seu caminho. Mas para que isso seja possível, seu arquivo deve ser executável. Caso contrário, você terá o erro “permissão negada” ao tentar executar o script.
Portanto, primeiro você precisa ter certeza de que seu script tem permissão de execução. Você pode usar o comando chmod para conceder a si mesmo esta permissão, assim:
chmod u+x script.sh
Uma vez que seu script é executável, tudo que você precisa fazer é digitar o nome do arquivo junto com seu caminho absoluto ou relativo. Na maioria das vezes você está no mesmo diretório, então apenas o usa desta forma:
./script.sh
Se você não estiver no mesmo diretório que seu script, poderá especificá-lo como o caminho absoluto ou relativo para o script:
Executando Shell Script em outro diretório
Esse ./ antes do script é importante (quando você está no mesmo diretório que o script)
Por que você não pode usar o nome do script quando está no mesmo diretório? Isso ocorre porque seus sistemas Linux procuram os executáveis para rodar em alguns diretórios selecionados que são especificados na variável PATH.
Aqui está o valor da variável PATH para meu sistema:
abhishek@itsfoss:~$ echo $PATH
/home/abhishek/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Isto significa que qualquer arquivo com permissões de execução em um dos seguintes diretórios pode ser executado de qualquer lugar no sistema:
- /home/abhishek/.local/bin
- /usr/local/sbin
- /usr/local/bin
- /usr/sbin
- /usr/bin
- /sbin
- /bin
- /usr/games
- /usr/local/games
- /snap/bin
Os binários ou arquivos executáveis para comandos Linux como ls, cat etc estão localizados em um desses diretórios. É por isso que você pode executar esses comandos de qualquer lugar em seu sistema apenas usando seus nomes. Veja, o comando ls está localizado no diretório/usr/bin.
Quando você especifica o script SEM o caminho absoluto ou relativo, ele não pode encontrá-lo nos diretórios mencionados na variável PATH.
Por que a maioria dos scripts de shell contém #!/bin/bash no início dos scripts de shell?
Lembre-se de como mencionei que o shell é apenas um programa e existem diferentes implementações de shells.
Quando você usa o #!/bin/bash
, você está especificando que o script deve ser executado com bash como interpretador. Se você não fizer isso e executar um script no modo ./script.sh
, ele geralmente será executado com qualquer shell que você estiver executando.
Isso importa? Poderia. Veja, a maior parte da sintaxe do shell é comum em todos os tipos de shell, mas alguns podem ser diferentes.
Por exemplo, o comportamento do array é diferente nos shells bash e zsh. Em zsh, o índice da matriz começa em 1 em vez de 0.
Bash Vs Zsh
Usando #!/bin/bash indica que o script é um script de shell bash e deve ser executado com o bash como interpretador, independentemente do shell que está sendo usado no sistema. Se estiver usando a sintaxe específica do zsh, você pode indicar que é um script zsh adicionando #!/bin/zsh
como a primeira linha do script.
O espaço entre #!/bin/bash
não importa. Você também pode usar #!/bin/bash
.
Foi útil?
Espero que este artigo tenha adicionado ao seu conhecimento do Linux. Se você ainda tiver dúvidas ou sugestões, deixe um comentário.
Usuários experientes ainda podem criticar este artigo sobre coisas que eu perdi. Mas o problema com esses tópicos para iniciantes é que não é fácil encontrar o equilíbrio certo de informações e evitar ter muitos ou poucos detalhes.
Se você estiver interessado em aprender o script bash, temos uma série inteira do Bash para iniciantes em nosso site focado em administradores de sistemas, o Linux Handbook. Se desejar, você também pode adquirir o e-book com exercícios adicionais para dar suporte ao Linux Handbook.
Via itsfoss.com. Você pode conferir o post original em inglês:
How to Run a Shell Script in Linux [Essentials Explained for Beginners]Última atualização deste artigo: 27 de january de 2021