É uma maneira de definir qual shell deve ser invocado durante a execução do script. É chamado de Shebang .
Exemplo, um arquivo com a seguinte linha Shebang:
#!/bin/sh
invocaria o shell Bourne (sh). Então, por exemplo, seu roteiro:
## Setting a default route
#!/bin/sh
/sbin/route add SUBNET $5
faria com que /sbin/route add SUBNET $5 fosse executado no interpretador do shell Bourne. /sbin/route add SUBNET $5 é apenas um comentário e não faz nada. No entanto, o shebang deve estar na primeira linha, portanto, esse comentário no topo não permitirá que o shebang faça seu trabalho, tornando-o uma adição inútil.
Há um número de intérpretes que são amplamente utilizados e alguns intérpretes típicos para as linhas shebang são:
-
#!/bin/sh- Execute usando sh, o shell Bourne (ou um shell compatível) -
#!/bin/csh- Executa usando csh, o shell C (ou um shell compatível) -
#!/usr/bin/perl- Executar usando Perl -
#!/usr/bin/python- Execute usando Python -
#!/usr/bin/php- Executar usando o interpretador de linha de comando do PHP
Como Olli mencionou em seus comentários, algumas vezes env (abreviação de ambiente) é usado para garantir que caminho para o intérprete é escolhido.