Archive for Setembro, 2008
Tutorial básico de shell script
Hoje eu precisei criar um pequeno script shell para realizar algumas configurações de um software que desenvolvi e ai me lembrei que a um tempo atrás, quando eu ainda estava na faculdade ( putz, faz trocentos anos isso ), fiz um tutorial básicão para mexer com shell script e acabei não disponibilizando isso .. não lembro bem porque. Bom desenterrei ele e vou postar ele aqui.
1 – Introdução
2 – Estrutura Básica
3 – Váriáveis
4 – Aspas simples, Aspas duplas e Crase
5 – O Comando Echo
6 – Expressões
7 – O Comando if
8 – Laço condicional While
9 – For
10- Case
11- Finalizando
12- Fonte de Pesquisa e Recomendação de leitura
1 – Introdução
Shell Script são programas interpretados por programas conhecidos como Shell.
A Shell é o elo de ligação entre o usuário e o Sistema. A shell é responsável por
interpretar os comandos passados pelo usuário.
Os Shell Scripts são largamente utilizados para automatizar tarefas administrativas
e simplificar ações dirárias como por exemplo efetuar um backup, mapear unidades de
rede samba, limpar diretório temporários etc.
Nesse artigo, iremos trabalhar com a shell bash, mas fique a vontade para trabalhar
com a shell que mas lhe agrade.
2 – Estrutura Básica
Todo shell script deve começar com uma instrução tipo #!/bin/bash. Essa instrução indica
quem é o programa responsável por interpretar os camandos contidos no script.
Caso o script fosse escrito em KSH, por exemplo, a linha ficaria #!/bin/ksh. Isso também
acontece em outras linguagens de programação interpretada tais como perl
(#!/bin/perl). Em seguida vem a sequencia de comandos que se deseja executar.
O caracter # é o caracter de comentário de linha (exceto na primeira instrução mencionada acima).
Tudo que estiver após o caracter # é ignorado pelo interpretador até que o caracter de fim de linha
seja encontrado.
Ex.:
#!/bin/bash
# Exemplo classico do alo mundo
echo “Alo Mundo”
Para que seu script possa ser executado, você tem que torna-lo executável com o comando chmod:
user@linuxbox:/$ chmod a+x meu_script
3 – Variáveis
3.1 – Declarando váriaveis
As variáveis em shell Script são declaradas implicitamente. para se declarar a variável, basta
atribuir-lhe um valor.
Ex.:
#!/bin/bash
var1=’Minha primeira variavel’
Para se referir a uma variavel dentro do script, é necessário usar o caracter $ antes do nome
da mesma. Assim você está se referindo ao conteudo da variavel.
Para se atribuir valores a variável o caracter $ não é utilizado
Ex.:
#!/bin/bash
var1=”Minha primeira variavel” #Atribuindo valor
echo $var1 #Se referindo ao conteúdo da variável
3.2 – Recebendo entradas externas
O comando Read faz com que variaveis possam receber entradas do usuário.
Quando o script encontra um comando Read, ele para sua execução e aguarda
que o usuário informe os dados e tecle enter, para concluir a operação.
Ex.:
#!/bin/bash
Read nome
Echo “Meu nome é $nome”
3.3 – Variáveis passadas por parâmentro de linha de comando
As variáveis passadas por linha de comando, podem ser acessadas pelo número referente a posição em que
ela se encontrava quando foi passada. A variável $0 se refere ao nome do programa, $1 ao primeiro
parâmentro e assim por diante.
Ex.:
user@linuxbox:/$ meu_script.sh parametro1 parametro2
Sendo que:
$0 = meu_script.sh
$1 = parametro1
$2 = parametro2
A quantidade de parâmetros passados para o script (equivalente ao argc do C) fica armazenado
na variável $#.
Ex.:
#!/bin/bash
echo “Foram passados “$#” parâmetros”
4 – Aspas simples, Aspas duplas e Crase
Há muita diferença entre eles. A função da Aspas Simples é a de assumir a string sem que nada
seja processado. Já com as Aspas Duplas, as variáveis são processados dentro da string.
A Crase processam COMANDOS e adcionam à string, a resposta do mesmo.
Ex:
var = ‘Olá, eu sou $USER’
O Conteúdo de var é: Olá, eu sou $USER – A variavel $USER não foi processado. Tudo que
se encontra dentro das aspas simples é entendido literalmente.
var = “Olá, eu sou $USER”
Agora var contém: Olá, eu sou root – A variavel $USER agora vai devidamente processada e
seu valor passado para string.
var = “Eu agora estou em: `pwd`”
A Crase passa a saida de pwd para a string.
O conteúdo de var ficou: Eu agora estou em: /etc/rc.d
5 – O Comando Echo
A finalidade do comando Echo é exibir informações, que vão desde simples strings até uma mescla de
strings e variaveis e passar o cursor para a proxima linha. É bem similar ao puts() do C.
Ex.:
#!/bin/bash
var1=”Fernando”
echo “Aews $var1″
O Resultado será: Aewz Fernando
6 – Expressões
O comando Expr, informa o script que a proxima instrução se trata de uma expressão.
O formato de uma expressão é algo do tipo: expr $var “+” 1 ou `expr $var + 1`
Ex.:
#!/bin/bash
Echo “Digite um numero”
read num1
echo “Digite outro numero”
read num2
echo “`expr $num1 + $num2`”
7 – O comando if
O comando if, como você já deve saber, executa determinados comandos caso a expressão
em questão seja verdadeira. Acontece que uma expressão verdadeira para ele não é como
da forma que agente está acostumado. Uma condição no if é sempre um comando e todo comando
tem uma saida. Normalmente, quando a saida é 0, significa que o comando foi concluido
com sucesso. Valores superiores a 0, normalmente significam que algo de errado aconteceu,
logo, 0 significa verdadeiro para o if e 1 falso.
Um if normalmente é seguido do comando test.
Ex.:
if rm /etc/teste.txt; then
echo “Arquivo excluido”
fi
No bloco if acima, o comando rm é executado e o valor de retorno é passado para o if.
Caso rm termine sem problemas, 0 é retornado e a condição se torna verdadeira.
if test “a” = “a”; then
echo “Igual”
else
echo “Diferentes”
fi
Na instrução acima, o comando test retorna 0, pois “a” = “a”. Para entender melhor
o funcionamento do comando test vá a linha de comando e execute-o, para saber o que ele
retornou basta recorrer a variavel de ambiente $? que armazena a saida do ultimo comando.
Ex.:
user@linuxbox:/$ test “a” = “a”
user@linuxbox:/$ echo $?
0
user@linuxbox:/$ test “a” = “b”
user@linuxbox:/$ echo $?
1
Segue abaixo alguns dos parametros do comando test:
-b arquivo – Verdadeiro se arquivo é um arquivo de bloco, como /dev/hda.
-c arquivo – Verdadeiro se arquivo é um arquivo de caracter, como /dev/tty1.
-d arquivo – Verdadeiro se arquivo é um diretório.
-e arquivo – Verdadeiro se arquivo existe.
-f arquivo – Verdadeiro se arquivo existe e é um arquivo comum.
-s arquivo – Verdadeiro se arquivo existe e não é vazio.
-h arquivo – Verdadeiro se arquivo é um link simbólico.
-p arquivo – Verdadeiro se arquivo é um “named pipe” (fifo, lifo, etc).
-S arquivo – Verdadeiro se arquivo é um “socket”.
-k arquivo – Verdadeiro se arquivo tem seu “sticky bit” ligado.
-r arquivo – Verdadeiro se arquivo pode ser lido pelo usuário atual.
-w arquivo – Verdadeiro se arquivo pode ser escrito pelo usuário atual.
-x arquivo – Verdadeiro se arquivo pode ser executado pelo usuário atual.
-O arquivo – Verdadeiro se arquivo pertence ao usuário atual.
-G arquivo – Verdadeiro se arquivo pertence ao grupo do usuário atual.
-N arquivo – Verdadeiro se arquivo foi modificado desde a ultima vez que foi lido.
-eq (equal): Igual;
-ne (not-equal): Não Igual (diferente);
-lt (less than): Menor que (<);
-le (less than or equal): Menor ou igual ( <= );
-gt (greater than): Maior que (>);
-ge (greater than or equal): Maior ou igual (>=);
Test pode ser substituido por [], tornando o código mais legivél.
Ex.:
if ["a" = "a"];then
echo “Igual”
else
echo “diferente”
fi
8 – Laço condicional While
O Comando while, como o nome diz, executa um bloco de instruções enquanto uma
condição for verdadeira. O tratamento de expressões é feita da mesma forma que
acontece com o comando if.
Ex.:
cont = 0
while [$cont -ne 10]; do
echo $cont;
cont = expr $cont “+” 1;
done;
9 – For
for {variavel} in {lista} [lista]*;
do
comandos..
done;
O comando For executa um bloco de instruções até que a lista de elemntos termine.
a variavel é associada a cada elemento da lista e então o bloco de comandos é executado
a cada vez que a variavel é associada.
Ex.:
for arquivo in rc.local rc.M rc.httpd;
do
echo $arquivo
done;
A saida será:
rc.local
rc.M
rc.httpd
10 – Case
Um das intruções mais utilizadas em Shell Script. O Case funciona de maneira bem
similar ao if. Na verdade uma sequencia de ifs aninhados.
Ele é muito usado para checar parametros de linha de comando para realizar operações
com daemons (startar, restartar, parar daemons).
Ex.: – retirado do site Olinux
case “$1″ in
’start’ )
echo “Iniciando o serviço…”
<comandos para iniciar o serviço>
;;
‘restart’ )
echo “Reinicializando o serviço…”
<comandos para reinicializar o serviço>
;;
’stop’ )
echo “Parando o serviço…”
<comandos para parar o serviço>
;;
*)
echo “Opção invalida!”
echo “As opções válidas são:
start, stop e restart”
;;
esac
11- Finalizando
Espero ter ajudado a passar um pouco sobre o poder dos shell scripts.
Qualquer dúvida, sugestão, correção etc… manda uma email.
flw, Abraços, T+
12- Fonte de Pesquisa e Recomendação de leitura
www.olinux.com.br
http://tlm.conectiva.com.br/shell_script/
http://thobias.org/doc/cgi_shell.html
http://thobias.org/doc/shell_bd.html
www.vivaolinux.com.br
Add comment Setembro 9, 2008
Review Chrome
No último dia 02 de setembro foi o lançamento mundial do Chrome, o novo navegador do Google. Testei ele durante eses dois dias e gostei muito do que vi. Ainda tem muitas limitações de funcionalidades e plugins mas tem tudo pra não ser mais um browser.
O Chrome é baseado em vários projetos de navegadores open sources e outros nem tanto. Safari, Konqueror, Mozilla Firefox são alguns dos browsers que serviram de inspiração para o desenvolvimento do Chrome.
O maior ponto positivo com certeza é a velocidade, tanto de renderização como de “start up”. Na quesito renderização, o grande responsável é o webkit. Engine baseado no konqueror com melhorias na implementação da interpretação do JavaScript.
O google disponibilizou um benchmark com cinco testes de algoritmos javascript. Confira aqui o teste: http://code.google.com/apis/v8/run.html e compare http://news.cnet.com/8301-1001_3-10030888-92.html o desempenho do Chrome com os outros browsers. Os outros ficaram no chinelo
Acid Test
Fiz o Acid2 Test que valida o CSS e o Acid3 Test que faz validações javascript. Passou tranquilo no Acid2 ( http://www.webstandards.org/files/acid2/test.html ), no Acid3 ( http://acid3.acidtests.org/ ) ele recebeu 76/100.
Abas
O Chrome trata cada aba como um processo diferente. Vejo isso como uma boa caracteristica, pois evita que todo o navegador seja afetado caso uma aba travar. É o que acontece ( e muito ) com os outros browsers.
Modo Anônimo
Uma funcionalidade que achei boa e ruim ao mesmo tempo a página inicial com os sites mais visitados. Boa porque todos aqueles sites que você visita todo dia estão ali, vários quadros, fácil visualização e navegação. Muiito funcional massss, aquele site que você visita muito mas não quer que sua esposa, mãe, pai, filho, cachorro, papagaio saiba, também entra ali .. que merda hein? Calma, CTRL + SHIFT + N, pronto \o/, agora você está navegando anônimo, nada de histórico, site mais visitado, cookie, etc … navegue sem medo de ser feliz … Como diz Bagacinho, esse é o modo da putaria
Pontos Negativos
Ainda faltam plugins e algumas funcionalidades básicas como por exemplo .. atualizar um frame. Sites de bancos com teclados virtuais também são um problema. Como ele tem apenas dois dias de vida, vamos dar um desconto.
Bom, esse ai é o Chrome … um navegador com a cara do Google. Simples, rápido e prático.
Link para download: http://www.google.com/chrome
Abraços
Add comment Setembro 4, 2008