Last Updated: February 25, 2016
·
780
· cloudson

Shellscript para programadores php - parte 1

Este documento é destinado para programadores com o mínimo de conhecimento prévio na área. A intenção é apontar as diferenças do shellscript para o php (quando trechos afirmarem que o shell funciona como o php, é provável que a versão desta seja uma das primeiras), mas nada impede que devs de outras linguagem o utilizem.

1 - Variáveis

Sobre regras de nomes válidos, usaremos as mesmas do php (usar alfanumericos e _, blablabla). A tipagem do shell é dinâmica assim como a da nossa linguagem, logo, para declarar uma variável basta escolher um identificador (chamaremos de T_ID) a ser setado por um valor, repare que em T_ID=valor não há espaços pois eles não são permitidos.

foo='cloudson'; #comentário: o ponto-e-vírgula é opcional se só existir um comando por linha, porém usaremos elas para não existir qualquer ambiguidade
bar=5; 

Outra diferença do php, como podem ver é a ausência do $ antes do T_ID, porém com as variáveis já definidas, ao acessá-las você deve usar o caracter, identicamente como no php.

echo $foo; # isso irá imprimir cloudson graças ao nosso querido comando echo :) 

Algumas variáveis pré-definidas e legais
```bash
echo $HOME; # diretório home do user
echo $PWD; # DIR do php :P
echo $COLUMNS; # numéro de colunas que seu console possui no momento
echo $LINES; # numero de linhas
echo $USERNAME # usuário atual do sistema
echo $? # a variáveil possui o valor constante 0, usada para encerrar programas, já que convencionalmente quando temos retornos numéricos(magic numbers), 0 representa ausência de erros e não falso.

2 - Saída e entrada de dados

Usamos o echo para imprimir o valor de uma varíavel no capítulo anterior. As regras básicas do php são as mesmas para cá, como veremos abaixo:

game='Assassins creed III';  # declarando a variavel
echo $game; 
echo "Eu quero $game de natal"; # aspas duplas interpretam variáveis dentro do texto 
echo 'Eu quero $game de natal'  # aspas simples imprimem o texto literalmente
echo -e "\n Eu quero \t $game de natal" #parametro -e para ativar uso de barra de escape. 

Pensem na seguinte hipótese, eu quero guardar a data atual do sistema em uma variavel. Para exibir a data no shell usaríamos a função date.

date # imprimiria algo como Sat Dec  8 11:14:32 BRST 2012
data_atual=date; 
echo $data_atual; # isso imprime date, pois na linha acima ele não foi entendido como o comando. 
data_atual=`date` # usando as "crases" estamos executando um comando do shell e retornando a resposta para a variavel $data_atual
echo $data_atual; 

O contrário do echo, é o comando de leitura read que fica esperando uma entrada de dados no console.

read ano; 
dif=`expr 2012 - $ano`;
echo "$dif anos de diferenca";

Assim como no C (agora fomos longe :P) o "arquivo" padrão de saída (stdout) é o ecrã, ou seja, a própria tela do console. Porém é possível redireiconar a saída de dados para outro lugar, um arquivo por exemplo.

ls > lista.log #o comando ls lista todos os arquivos de um diretório, dessa forma movemos a saída do comando para um arquivo chamado lista.log, que será criado caso haja permissão e não exista. 
ls >> lista.log # com o >> a saída do comando vai para o fim do arquivo e não substitui conteudo como o da linha acima

Assim como é possível manipualar a saída padrão, é possível manipular a entrada (stdin).

read arquivo < lista.log 

com a linha acima, ao inves de esperar a entrada de dados pelo próprio console, a leitura é feita da primeira linha do arquivo lista.log :)