Como criar funçes shell para instalar programas

Page 1

Como criar funções para instalar programas via shell script Ao longo deste pequeno artigo mostrarei alguns recursos de Shell Scritp de forma incremental, ora mostraremos como testar uma determinado usuário está logado no sistema, ora mostraremos como verificar a existência de um programa e assim por diante. Juntando todas as dicas mostraremos uma função completa para instalar um programa. Cada conceito apresentado seré de alguma forma utilizado na nossa função, portanto teste no seu terminal cada pedaço a fim de interiorizar melhor o que verá.

Aprender como escrever funções em shell script function name() { # esta linha é um comentário e não será interpretada echo "Esta linha mostra um texto na tela" sleep 3 # aguarda 3 segundos clear # limpa a tela }

se você colar a função acima num terminal e executar o comando name receberá como saída: Esta linha mostra um texto na tela

em seguida a tela será limpa e você receberá o prompt prontinho de volta.

Substituição de processos: Se você digitar este comando no terminal echo 2+2 | bc ele retornará o resultado esperado Você poderá ainda fazer algo assim: echo “o resultador da soma de 2 + 2 é igual a: `echo 2+2 | bc`” Note que o trecho `echo 2+2 | bc` etá entre crases, isso faz com que o bash substitua o comando pelo seu resultado, a isso chamamos substituição de processos.

Fazer um backup do seu /etc/apt/sources.list Aqui vai uma dica muito legal do comando "cp": A fim de evitar coisas do tipo: cp /etc/apt/sources.list /etc/apt/sources.list-backup Podemos fazer assim: cp -f /etc/apt/sources.list{,-backup}


portando use e abuse desta dica ao usar o shell Obs: A opção “-f” do comando cp faz com que ele sobrescreva backups anteriores com o mesmo nome

Verificar se o endereço do site que contém o programa está no sources.list fazemos isto para evitar duplicidade de entradas no mesmo. Fazemos esta verificação usando o grep com a opção "-o", esta opção do grep faz com que o mesmo mostre o padrão buscando e tão somente ele, caso não haja tal padrão ele não retorna nada. Assim podemos encapsular, ou seja, englobar esta verificação dentre de um comando "test", veja um exemplo em que testamos se o usuário logado no sitema é o root (administrador):

Verificando se o usuário é root [ $USER==root ] || echo "execute este comando como root" && sleep 2 && exit 1 [ $USER==root ] .......... verifica se o usuário é root || ........................ opcional, caso não seja root executa o que vem depois echo "você não é root" .... mostra a mensagem ao usuário && ........................ usado para fazer uma coisa caso a outra seja verdade condição verdadeira && outra condição vedadeira caso a primeira condição não seja verdade ele não executa a segunda &&

sleep 2 ............... aguarda 2 segundos

&&

exit 1 ................ aborta a execução do script

OBS: É prudente colocar esta linha de teste na primeira linha da função, isso irá mostrar a um eventual usuário comum que ele não deve meter o bico aqui. testaroot () { [ $USER==root ] || echo "execute este comando como root" && sleep 2 && exit 1 } Observe que acima usamos outra sintaxe ligeiramente diferente na qual a função é definida só pelo próprio nome "testaroot" Para a nossa necessidade em particular, devemos verificar se determinada linha está no sources.list, tal ação deverá ser feita com o grep assim: grep -o http://www.debian.org/wheezy /etc/apt/sources.list obviamente que o padrão buscado é "http://www.debian.org/wheezy"


Obs: dica adicional: Em geral as linhas a serem adicionadas tem a seguinte estrutura deb http://www.debian.org/wheezy main você pode usar só a string do meio, ou seja: http://www.debian.org/wheezy sendo que esta verificação deverá ficar dentro de um comando test [ ... ] O comando test tem várias opções, dentre as quais uma que verifica se uma string (pedaço de texto) é vazio "-z", ficando nosso teste assim [ -z "`grep -o http://www.debian.org/wheezy /etc/apt/sources.list`" ] Como nossa linha vai ficar muito longa, podemos dizer ao bash que é o nosso interpretador de comandos, para ignorar o ENTER digitando uma contrabarra "\" antes do mesmo. echo "esta linha ficará muito longa \ por isso usei uma contrabarra" a saída do comando ficará assim: esta linha ficará muito longa e por isso usei uma contrabarra [ -z "`grep -o http://www.debian.org/wheezy /etc/apt/sources.list`" ] echo "deb http://www.debian.org/wheezy main" >> /etc/apt/sources.list

&& \

observe que no final da linha do grep ele tem um && seguido da contrabarra "\" o que facilita a leitura do comando já na linha do echo temos que ter obrigatoriamente um redirecionamento não destrutivo ">>" ou seja, ele coloca a saída do "echo" no final do /etc/apt/sources.list sem destrui-lo.

Após a verificação fazemos uma atualização do apt junto com a instalação apt-get update && apt-get install -y programa Abaixo colocamos tudo dentro da função instalaprograma instalarprograma () { # dica do site: http://vivaotux.blogspot.com [ $USER==root ] || echo "execute este comando como root" && sleep 2 && exit 1 cp -f /etc/apt/sources.list{,-backup} [ -z "`grep -o http://www.debian.org/wheezy /etc/apt/sources.list`" ] && \ echo "deb http://www.debian.org/wheezy main >> /etc/apt/sources.list apt-get update && apt-get install -y programa } && instalarprograma Não pare de ler (tem mais dicas!)


Melhorando o nosso script Ao reler tudo o que escrevi notei uma coisinha simples, e se o tal programa já estive instalado? Daí me veio à mente mais uma linha pra nossa função, para esta tarefa usaremos o comando which da seguinte forma: which programa && echo “O programa tal já está instalado” && sleep 2 && exit 1 Finalmente nossa função ficará mais ou menos assim: instalarprograma () { # dica do site: http://vivaotux.blogspot.com which programa && echo “o programa já está instalado!” && sleep 2 && exit 1 [ $USER==root ] || echo "execute este comando como root" && sleep 2 && exit 1 cp -f /etc/apt/sources.list{,-backup} [ -z "`grep -o http://www.debian.org/wheezy /etc/apt/sources.list`" ] && \ echo "deb http://www.debian.org/wheezy main >> /etc/apt/sources.list apt-get update && apt-get install -y programa clear which programa && echo “programa instalado com sucesso!” || \ echo “Houve algum erro durante a instalação!” } && instalarprograma

Note que adicionei && instalarprograma no final da função isso faz com que a mesma seja chamada imediatamente sem a necessidade de digitar seu nome, bastando colar a mesma no shell para que ela seja executada.


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.