quarta-feira, 25 de janeiro de 2012

Tutorial introdutório sobre como usar o PHP como shell script e integrado ao shell script

Utilizar o php como shell script é uma das boas coisas que o mundo nos fornece. Ou seja, podemos além de usar o shell, awk, perl para criar nossos scripts, usar o php também. Uma das vantagens do php é sua facilidade de aprendizado e vasta documentação na internet.
Na realidade, tudo que você conseguir fazer com o php em cgi, tenha certeza que você vai conseguir fazer em shell ( com algumas mudanças, principalmente na impressão, pois o shell na entende os caracteres html ).
Sendo assim, isto vai abrir para o administrador uma possibilidade bem interessante para gerar scripts e assim, ter mais uma ferramenta para facilitar a sua vida enquanto trabalha no seu servidor.
Exemplo, você pode ter uma função php em cgi para listar seus usuários e usar a base da sua função php para criar um comando no linux que, assim que você for perguntado sobre o status de um usuário, você poderá falar rapidamente, pois a sua aplicação shell php irá acessar a mesma base de dados que a aplicação cgi.
Sendo criativo o administrador pode criar diversos aplicativos para facilitar sua vida ao longo do dia.
Bom, a primeira linha de qualquer script, é sempre o endereço do interpretador script. Para saber qual o endereço do seu interpretador php, ou seja, o binário php, digite no prompt :
ataliba.teixeira@atalibalnx:~?> type php
php is /usr/bin/php

Após isto, podemos criar o famoso Alô mundo, aquele programinha esdrúxulo que fazemos em todas as linguagens quando estamos aprendendo a usá-la para alguma coisa.
#!/usr/local/bin/php -q
Ou seja, no início do seu script você irá colocar, como em perl ou shell, isto aqui :
#!/usr/bin/php -q
Isto dará ao script o poder de trabalhar com o interpretador php em modo console. Agora, porque o -q ? O -q é uma opção do php para suprimir os headers do HTTP que ele solta por padrão. Ou seja, se você não o usar, o script se comportará como um cgi, e irá sujar a saída, sendo necessário para que você possa usar as respostas, um trabalho com expressões regulares, visando suprimir estes headers :-)

print("Alô mundo, eu sou um script PHP !n");
?>
Ou seja, vamos entender o código acima. Primeiramente, temos o interpretador, que vai ser chamado para interpretar o código abaixo. As duas marcações do php devem ser usadas sempre no início do código, pois ele é um código php. Logo após, iremos usar a função print para escrever na tela o famoso Alô Mundo, eu sou um script PHP.
Para rodar o script, é só usar :
ataliba.teixeira@atalibalnx:~?> php alomundo.php
Alô mundo, eu sou um script PHP !
ataliba.teixeira@atalibalnx:~?>
E o resultado já está aí. Logicamente, no fim das contas, este script não serve para nada :-) Mas já é um bom começo de relacionamento com o PHP em modo shell script.
Uma das vantagens do shell script é criar comandos, ou seja, um executável receber argumentos e tratá-los. O PHP, como qualquer linguagem que possa ser tratada com script no shell, tem opções de como tratar isto. Para quem programa em C, deve-se lembrar do famoso argv, que são os argumentos que uma função main recebe passadas pela linha de comando. O PHP, por ser filho direto do Perl que é parente do C ( não vou ter paciência de explicar sobre toda a árvore genealógica do bichinho não ), usa também o argv.
Portanto, para recuperar um dado, você irá usar argv[x], lembrando-se, sempre, que argv[0], é o próprio executável, ou comando que você está usando, ou seja :
ataliba.teixeira@atalibalnx:~?> php teste2.php 1 2
No caso acima , argv[0] é o teste.php, argv[1] é o número 1 e argv[2] é o número 2.
Para exemplificar de um modo mais prático, vamos a um script.
#!/usr/bin/php

$argumento0 = $argv[0];
$argumento1 = $argv[1];
$argumento2 = $argv[2];
print("O comando executado foi $argumento0 e recebeu os argumentos $argumento1 e $argumento2 n");
?>
Executando este comando :
ataliba.teixeira@atalibalnx:~?> php teste3.php 1 2
O comando executado foi teste3.php e recebeu os argumentos 1 e 2
ataliba.teixeira@atalibalnx:~?>
Bom, além disto, podemos fazer alguns scripts mais interativos, como no shell, para pegar dados do usuário, ou seja, capturar uma entrada vida teclado do usuário. Um exemplo, interessante sobre este uso, é um script que vi em um tutorial no Viva o Linux ( que, junto com outros, serviu de base para este tutorial ), e captura do /dev/stdin ( device de std in ou seja, device de entrada, seja ele qual for ) uma string de até 255 caracteres e depois a imprime na tela. Traduzi o script para ele ficar mais amigável, simplesmente para exemplo aqui no tutorial.

Ao executar o comando, ele se comportará assim :
ataliba.teixeira@atalibalnx:~> php teste.php
Informe uma palavra de até 100 Caracteres: ouch
A palavra digitada foi ouch e possui 4 caracteres
ataliba.teixeira@atalibalnx:~>
Ou seja, vemos aqui mais uma aplicação interessante para o script shell em php ( tudo bem que eu prefira sempre a primeira opção por se parecer muito com o jeito UNIX de ser :-P ).
Uma observação que deve ser feita, é que em alguns sistemas o comando php://stdin pode não funcionar. Um teste que pode ser efetuado é tentar usar o /dev/stdin para acesso.
E, para finalizar, ainda podemos usar nossos scripts PHP, para interagir com nossos scripts em shell comum :-) Ou seja, você pode escrever partes do script em PHP e partes do script em shell.
Um exemplo deste uso seria :
#!/bin/sh
echo "This is the Bash section of the code."
/usr/local/bin/php -q << EOF
print("This is the PHP section of the coden");
?>
EOF
Ou seja, o script irá executar a parte em shell, e logo após a parte em php. Veja só a saída :
ataliba.teixeira@atalibalnx:~> sh teste5.php
This is the Bash section of the code.
This is the PHP section of the code
ataliba.teixeira@atalibalnx:~>
Interessante, agora vamos trabalhar algo menos simples :
#!/bin/sh
echo "Esta foi a parte bash deste script".
/usr/local/bin/php -q << EOF
$myVar = "PHP";
print("This is the $myVar e $palavra section of the code.n");
?>
EOF
ataliba.teixeira@atalibalnx:~?> sh teste7.sh
Esta foi a parte bash deste script.
Parse error: parse error in - on line 2
ataliba.teixeira@atalibalnx:~?>
Opa, temos um erro, mas que é fácil de ser resolvido. O shell vai entender as varíaveis do php com o símbolo $ como varíaveis do shell. Para resolver isto temos que escapar as varíaveis, ou seja ...
#!/bin/sh
echo "Esta foi a parte bash deste script".
/usr/local/bin/php -q << EOF
$myVar = "PHP";
print("This is the $myVar e $palavra section of the code.n");
?>
EOF
Finalmente, temos um script rodando ...
Bom, seria isto mesmo o que eu teria para apresentar. Espero que tenha sido útil para alguém e se, realmente foi, ficaria grato com algumas opiniões aqui no site sobre o mesmo :-)
Estarei com o passar dos tempos colocando mais e mais coisas aqui sobre PHP e shell script :-).

RETIRADO DE: http://www.ataliba.eti.br/node/680 muito fera este blog.

Nota:

Um comentário:

Proibido palavras ofensivas, racistas ou descriminatórias.

[Seu Comentário será liberado no máximo em 24horas]