Interpretador de comandos no Linux #! Shebang [Guia Básico] - Certificação Linux
Todo script que será executado no Linux deve indicar o Interpretador de comandos, deve na sua primeira linha iniciar com os caracteres "#!" seguido do caminho completo do interpretador de comandos. Esses caracteres são conhecidos como "shebang".
Exemplo de um script de shell chamado bomdia:
echo "Olá $USER"
echo "Hoje é ";date
echo "Número de usuários conectados: " ; who | wc -l
echo "Calendário"
Como estudado anteriormente, para um arquivo ser considerado executável é preciso que a sua permissão seja alterada e o bit executável habilitado:
$ chmod +x bomdia
Desta maneira o pequeno script poderá ser executado no prompt:
Olá uiraribeiro
sex set 27 10:56:54 -03 2019
Número de usuários conectados:
Outros interpretadores podem ser invocados pela linha "#!", tais como o /bin/sh, /usr/bin/perl, /usr/bin/awk, dentre outros.
Quando um script é executado, o shell analisa o conteúdo da linha "#!" e carrega o programa definido para interpretar o script.
Em um script de shell esta linha faz com que um novo programa do shell seja executado para interpretar o script. Enquanto isso o shell que o executou fica em estado de espera.
O novo processo iniciado executa novamente os arquivos /etc/bashrc e ~/.bashrc.
Um aspecto importante é que o shell pai (em que o script foi chamado) pode passar variáveis para o processo shell filho que irá executar de fato o script. Mas o shell filho não poderá passar variáveis ou alterar o conteúdo delas para o processo pai. A herança é um caminho de mão única de processo pai para processo filho.
É importante que a chamada na linha "#!" que define qual interpretador deve ser executado esteja correta. Se o caminho estiver incorreto, o script poderá não ser executado.Já os comentários nos scripts de Bash são sinalizados com apenas uma tralha "#". Todo o restante da linha será ignorado pelo shell.
Permissões de Execução de script no Linux
Para que um script possa ser executado, ele precisa ter permissão de execução e o comando chmod pode ser utilizado para habilitar esse bit para um script.
Um script sempre será executado com as permissões do usuário que o executou, e de forma alguma o Kernel obedecerá ao bit SUID ou SGID para script.
No entanto, o script poderá ser executado com as permissões de outro usuário se utilizado o comando "sudo".
Veja o exemplo este script que imprime o UID do usuário:
echo "eu sou:"
Se executado normalmente:
$ ./meuscript
uid=1000(uira) gid=1000(uira) grupos=1000(uira),4(adm),10(wheel),190(systemd-journal)
Mas se executado com o sudo:
$ sudo ./meuscript
Logo, deve-se tomar extremo cuidado ao se executar um script com o "sudo", uma vez que todos os comandos que o script invoca serão executados com as permissões de outro usuário, e, possivelmente o root.
Utilizou-se no exemplo o caminho relativo "./" para chamar o script, porque o diretório corrente não está listado na variável PATH.