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 😛
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 🙂