Prévia do material em texto
PROGRAMAÇÃO EM AMBIENTES DE REDES DE COMPUTADORES Fernanda Rosa da Silva Introdução ao Shell Script Linux Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Descrever os principais usos da programação Shell Script. � Discutir as maneiras de realizar a customização e a execução em ambientes de programação. � Explicar as principais características da linguagem Shell Script. Introdução Administradores de sistema ou até mesmo usuários comuns algum dia precisaram criar um script simples ou abrangendo funcionalidades mais complexas. Isso pode ser feito com o uso da linguagem Shell Script, que, como vantagem, consegue garantir a necessidade de menor tempo e esforço em determinadas tarefas. Neste capítulo, você acompanhará as principais utilidades de aplicação para o Shell Script, entendendo como se pode customizar um script em Shell no Linux e executá-lo no ambiente Linux, conhecendo também os atributos que o caracterizam. 1 Conceito e principais utilidades do Shell Script Desde o seu surgimento, o sistema operacional Unix foi evoluindo e adicio- nando diversas ferramentas à sua interface, inicialmente nos mainframes, depois em estações de trabalho e, em seguida, largamente utilizado em ambien- tes corporativos, para fins domésticos e até mesmo acadêmicos, constituindo base para atividades simples e tarefas complexas com frequência executadas pelo administrador do sistema. No entanto, existem por trás das tarefas realizadas no sistema operacional, o que levou ao surgimento, conforme Newham (2005), do Shell, que faz parte da camada superior dos sistemas operacionais, incluindo os do tipo Unix, como o Linux. Antes abordarmos sobre o Shell Script, é necessário saber que o Shell é um interpretador nativo dos sistemas operacionais Linux, podendo ser definido como qualquer interface do usuário para sistema UNIX capaz de receber informações de um usuário e convertê-las em instruções passíveis de ser entendidas pelo sistema, transmitindo a saída novamente para o usuário, apresentando o resultado para sua solicitação (NEWHAM, 2005). Por sua vez, o Shell Script se resume a uma linguagem de programa- ção escrita em arquivos-texto que contêm um ou mais comandos de Shell (comandos do Linux) em forma de instruções, utilizadas para simplificar tarefas repetitivas, automatizar processos (p. ex., instalação de programas) e realizar processos vitais para a organização (p. ex., backup de dados). Ainda, é bastante utilizado para desenvolver diversas aplicações, das mais simples até as de maior complexidade. Para entender mais sobre o assunto, você precisa saber que o Shell em- pregado para rodar os scripts no Linux pode ser definido como um prompt de linha de comando e identificado no sistema Linux já na primeira tela, introduzindo seu acesso à interface, quando solicita que o usuário e senha sejam informados para efetivar o login, conforme a Figura 1. Figura 1. Shell — linha de comando Linux. Introdução ao Shell Script Linux2 Na Figura 2, podemos observar a localização do Shell em relação ao sistema operacional, representado na camada mais alta de interação com o usuário. Figura 2. Shell — camadas do sistema. Fonte: Adaptada de Newham (2005). Unix Sistema operacional Shell Saída Usuário Entrada Exemplos de uso A seguir, apresentaremos alguns exemplos de uso do Shell Script. Automatização de backups O exemplo mais comum de uso do Shell Script consiste na automatização de backups, possibilitando a análise dos dados no período estabelecido e a reali- zação do backup de forma incremental, verificando somente as informações que ainda não foram salvas pelo backup anterior e salvando as alterações, levando menos tempo do que um backup completo e sem a necessidade da interação do usuário no processo, além de não comprometer muito espaço em disco (MULINARI, 2005). 3Introdução ao Shell Script Linux Suponha que um administrador de sistema precise automatizar o backup de diretórios específicos do seu servidor de arquivos, fazendo com que essa tarefa rode no menor tempo possível utilizando Shell Script. Para isso, ele cria o seguinte script: � #!/bin/bash -> indica que o executável será interpretado pelo Bash (interpre- tador padrão de comando) � #tar cf nomedobackup.tar –g /caminho/do/arquivo/con- trole.txt /dir1 /dir2 Nessa linha: � -c: cria o arquivo; � -f: identifica o próximo parâmetro como o nome a aplicar ao arquivo; � -g: informa que o backup é incremental. Manipulação de arquivos Um script também pode ser utilizado para localizar arquivos no sistema, facilitando a busca em casos nos quais a estrutura do sistema é muito extensa e é necessário executar essa tarefa com frequência. Contudo, conforme Arruda (2014), o Shell Script não é apenas definido por uma sequência de comandos, podendo utilizar características comuns às linguagens de scripts, como condições e variáveis, além de ser possível usá-lo para redimensionar um lote de fotografias, compactar arquivos de log e limpar erros de um arquivo de texto sem a necessidade de refazê-lo, indicando no script que o arquivo seja todo substituído por outro em branco. Como o Shell Script utiliza o sistema de arquivos do Unix, pode ser utilizado para manipular arquivos, organizar arquivos em pastas e fazer uso direto da hierarquia de diretórios e arquivos gerando qualquer informação do sistema que se possa imaginar. Renomear arquivos e diretórios e criar e excluir arquivos em lote, tarefas rotineiras que não exigem muito esforço, também se tornam mais fáceis com o uso de Shell Script, visto que o administrador pode listar todos os arquivos que precisam sofrer essas alterações, adicionando as informações a um script e rodando-o no sistema, sem precisar renomear cada arquivo manualmente, o que acarretaria muito tempo perdido. Introdução ao Shell Script Linux4 Tarefas administrativas Todas as tarefas que incluam funções do sistema, como gerenciamento de pacotes, criação de usuários e atribuição de permissões, podem ser realizadas com o uso de Shell Script no Linux. A seguir, você pode observar outros cenários de uso, que, apesar de mais completos, são totalmente possíveis com o uso de Shell Script personalizados. Scripts de deploy Ponte (2016) define deploy como o processo de disponibilizar uma aplicação para uso, como a exportação de um arquivo, realizando, por exemplo, upload. Ainda, esses processos de desenvolvimento, quando realizados manualmente, ficam demorados e podem ser facilitados com o uso de Shell Script, que permite validar, compilar, automatizar testes e empacotar aplicações, disponibilizando- -as para aplicação ao ambiente. Provisionamento de máquinas Também é possível provisionar máquinas virtuais com a criação de códigos em Shell Script, personalizando um código que localize a imagem ISO necessária no sistema, integrada ao hospedeiro para realizar a preparação do ambiente antes mesmo da instalação. 2 Execução e customização do Shell Script Um script é um algoritmo que recebe instruções para realizar determinadas tarefas fazendo uso de comandos específicos de modo executável no sistema operacional (LOUSADA, 2015). Ao utilizar o Shell Script, é possível personalizar o ambiente, visto que, à medida que o empregamos, percebemos adaptações capazes de atender melhor às expectativas do administrador do sistema, além de a execução dos comandos e a criação de scripts permitirem selecionar o tipo de execução ideal para o seu ambiente, em modo interativo ou automatizado. 5Introdução ao Shell Script Linux Modo interativo Trata-se daquele no qual o usuário de fato interage com a tarefa em questão, como no caso do script em que informações necessárias são digitadas pelo usuário e recebidas pelo Shell para a finalidade a que se aplica (NASCIMENTO; GERSTENBERGER, 2013). A Figura 3 demonstra um exemplo simples de Shell Script em modo inte- rativo, que solicita o nome do usuário e o imprimena tela. Figura 3. Exemplo de Shell interativo. De maneira mais realista, descrevendo funções em um ambiente corpora- tivo, por exemplo, quando se deseja realizar uma operação simples, uma única vez, o modo interativo pode ser útil, visto que o script permite que a qualquer momento os comandos necessários sejam executados, como ls (para listar arquivos e diretórios) ou cat (para criar novos arquivos). Outro exemplo clássico de Shell Script interativo é o bc (TERMINAL- ROOT, 2014), definido como uma linguagem de código que lembra uma calculadora e que recebe dados do usuário em interfaces simples. Na Figura 4, observamos que, após ingressar com o comando no terminal, é possível realizar operações matemáticas e receber o resultado impresso — na expressão decla- rada, realiza-se uma operação de multiplicação. Figura 4. Shell interativo — bc. Introdução ao Shell Script Linux6 Contudo, segundo Newham (2005), o uso do Shell de forma interativa pode se tornar cansativo e repetitivo, por exigir atenção do administrador e digitação de texto, sendo o mais prático fixar esses comandos em um arquivo, padronizando-os de acordo com a demanda em um arquivo que permita sua repetição e aproveitamento apenas com a alteração de alguns parâmetros, quando da necessidade de ajustes. Modo automatizado Já o uso do Shell Script de maneira automatizada deve ser considerado quando nenhum tipo de dado precise ser digitado, geralmente em procedimentos complexos que usam muitas linhas de comando, na maioria das vezes com um horário de execução definido, planejados previamente ou interagindo, por exemplo, com o sistema operacional para sua execução (NASCIMENTO; GERSTENBERGER, 2013). Alias Em relação à customização, o Shell Script possibilita a criação de alias para personalizar o ambiente e facilitar o uso dos comandos quando do emprego de scripts. De acordo com Newham (2005), aliases são apelidos que o admi- nistrador pode atribuir a um comando existente, a fim de nomear as funções de modo mais fácil, utilizados dentro dos scripts quando de sua criação. Considere que, frequentemente, o administrador precisa verificar as atualizações disponíveis para programas utilizados no servidor, instalando novos ou removendo os antigos. Para isso, ele deve digitar todos os comandos completos toda vez em que essa rotina é executada; portanto, pode usar o alias para renomear os comandos, de modo a poder memorizá-los mais facilmente e executar sem a necessidade de confirmar se estão ou não corretos. Observe: � alias atualizar ='sudo apt-get update && sudo apt-get upgrade' � alias instalar_pacote='sudo apt-get install' � alias remover_pacote='sudo apt-get remove' 7Introdução ao Shell Script Linux Assim, quando for preciso atualizar o repositório e todos os programas instalados no sistema, a chamada será apenas atualizar, conforme mostra a Figura 5. Figura 5. Customização com alias no Linux. Variáveis Assim como ocorre com o uso de alias para personalização do ambiente, o emprego de variáveis, bastante comum em scripts de Shell, permite associar um valor a elas. Uma particularidade quanto ao uso da programação de scripts em Shell em relação às demais reside no fato de que não é necessário declarar o tipo de variável permitido, como: string, inteiro, decimal, etc. Arquivos especiais Existem três arquivos no diretório pessoal de cada usuário com funções especiais e que fornecem opções para configurar o ambiente de modo inde- pendente para cada uma das contas utilizando a linguagem Shell Script, a fim de estabelecer parâmetros capazes de personalizar a execução de um script dentro do Shell do Linux (NEWHAM, 2005), conforme descrito a seguir. .bash_profile Trata-se do arquivo mais importante, pois é executado pelo Bash, toda vez em que o usuário faz login no sistema operacional. Para acessá-lo, basta executar nano .bash_profile ou apenas nano .profile. Introdução ao Shell Script Linux8 Esse arquivo armazena todos os comandos que você precisa que sejam executados logo na inicialização, compreendendo um script programado para rodar a cada login do usuário realizando uma tarefa específica, por exemplo, executar um serviço sempre que o usuário acessar sua conta, abrir uma planilha automaticamente, mapear uma unidade, etc. .bash_logout Arquivo lido e executado toda vez que o usuário finaliza sua seção, pode ser utilizado para complementar a personalização do ambiente (NEWHAM, 2005). Com ele, podemos definir ações como remover arquivos temporários quando da finalização das tarefas ou registrar o tempo total em que a conta esteve ativa durante o uso ou qualquer outra informação relevante sobre a sua conta em relação ao que foi executado durante a sessão. bashrc Por esse arquivo, que é oculto e localizável pelo usuário no seu diretório /home/usuário/.bashrc, podemos realizar algumas alterações e per- sonalizar o uso do terminal, fazendo alterações que customizam o Bash (ter- minal), como configurar ou ativar cores diferentes para a janela do terminal, personalizar propriedades do histórico do Shell, configurar alias de comando, entre outras funções mais bem entendidas quando de sua análise. Um exemplo de uso do arquivo bashrc se dá quando o administrador do sistema cria um alias, que, por padrão, somente é salvo no processo/shell atual até que seja fechado. Porém, isso pode ser contornado fixando-se uma linha para o comando que se deseja alterar: alias ls="ls --color" Nesse caso, ao utilizar o comando ls, que, por sinal, já é curto, o comando chamado será ls –color, que lista, porém, colorindo os caracteres. 9Introdução ao Shell Script Linux Colorir fonte no Shell Script Podemos colorir o código em Shell Script e alterar o fundo do terminal para rodar seu código ou alterar parte do código somente, modificando, também, a formatação dos caracteres. No Quadro 1, podemos observar, brevemente, algumas alterações possíveis e códigos correspondentes. Código Alteração 1 Negrito 4 Sublinhado 31 Fonte vermelha 34 Fonte azul 43 Fundo amarelo 44 Fundo azul Quadro 1. Exemplos de valores para uso de cores em Shell Script Considere o exemplo de um código de somente uma linha, lembrando que essa alteração pode ser realizada dentro de um código mais extenso, em partes específicas, que você queira destacar. Para alterar a linha para a cor vermelha, o seguinte código pode ser utilizado: $ echo -e "\033[31;1mColorindo_o_codigo" Nesse caso, a expressão colorindo_o_codigo aparecerá na tela na cor vermelha e com a fonte em negrito quando da execução do código. Introdução ao Shell Script Linux10 Parâmetros de entrada O Shell Script consegue receber valores por meio de variáveis-padrão, definidas pelo sistema para facilitar a criação do código, como: � $0: recebe o nome do script; � $n: n-ésimo argumento da linha de comando (definido por numeral); � $*, $@: todos os argumentos da linha de comando; � $#: número de argumentos; � $?: status do último comando executado (status <> 0 indica erro); � $$: número de processo (PID) do Shell que executa o script. Para facilitar o seu entendimento, considere o exemplo de script criado no Shell por Maziero (2019) e exibido na Figura 6 com seu respectivo resultado. Figura 6. Uso de parâmetros de entrada no Shell Script — Linux. 11Introdução ao Shell Script Linux 3 Características da linguagem Shell Script Uma das principais características da linguagem Shell Script reside na pos- sibilidade de personalizar o ambiente utilizando variáveis, especificando-se desde uma string até a frequência com que o Shell verifica se existem novas mensagens. Além disso, por se tratar de uma linguagem interpretada, não é necessário o uso de um compilador para executá-lo, e sim de um programa como o Bash ou sh, capazes de interpretar os comandos dentro script para que esteja em uma linguagem entendida por um computador (NEWHAM, 2005). Sabemos que o Shell é uma linguagem de programação completa, sendo assim considerada,conforme Newham (2005), uma linguagem de quarta geração (4GL), por ser de protótipo rápido, aplicada com o uso de conceitos- -chaves como modularidade, reutilização e desenvolvimento e construída com o uso de elementos que incluem variáveis, construções condicionais e possibilidade de interação, além de poder utilizar todos esses recursos para ser adaptada de acordo com a necessidade de cada ambiente. O Shell estabelece a comunicação entre os comandos por meio de uma interface simples, denominada pipeline (|), e pode ser utilizado simultaneamente com qualquer outro processo do sistema operacional sem que haja interferência em sua função. Pipeline corresponde a um processo que possibilita a execução simultânea de dois ou mais programas de forma coordenada, seguindo uma ordem estabelecida, de modo que seu resultado (saída) seja redirecionado, servindo como entrada para o próximo processo. Um exemplo simples dessa operação, de acordo com DeLyra (2002), pode ser acompanhado a seguir. Sabendo que o comando ls -l /etc é utilizado para listar conteúdo do diretório/ etc., considere a utilização do comando ls -l /etc | more. Com isso, além de o conteúdo ser listado, o comando more (paginador) é combinado de maneira a poder utilizar a barra de espaço do teclado ou o mouse para passar de página em página, percorrendo a lista completa. Introdução ao Shell Script Linux12 Ao rodar seus scripts em Shell no sistema Linux, podem ser necessários diversos testes, rodando o mesmo script para atestar que as alterações ne- cessárias estejam rodando corretamente; assim, você pode utilizar a função histórico, que permite que os últimos comandos utilizados sejam armazenados no cache para nova utilização sem que a necessidade de redigitar toda a sintaxe do comando. Este histórico é acessado pelo uso da seta para cima até encontrar o co- mando necessário para que consiga ser executado novamente, auxiliando na verificação e na execução de comandos, mesmo quando se necessita fazer uma pequena variação em sua sintaxe (GLAUCO, 2011). Ainda, o Shell Script permite controlar recursos do sistema, os chamados job controls (Figura 7). Segundo Reis (2013), um job é representado por uma única linha, que pode incluir um único comando em Shell Script ou vários conectados pelo pipe (|). Então, os jobs ativos podem ser verificados em detalhes com esse uso particular do Shell Script. Figura 7. Exemplo de job control como Shell Script. Linhas comentadas caracterizam o uso de Shell Script, mantendo a estrutura do código organizada, explicando cada linha que faz parte da sua formação, compreendendo um recurso importante para facilitar o entendimento do código (NASCIMENTO; GERSTENBERGER, 2013). A Figura 8 demonstra como os comentários devem ser inseridos. Figura 8. Exemplo de uso de comentários. Fonte: Lousada (2015, documento on-line). 13Introdução ao Shell Script Linux Os comentários não são apresentados como saída no script, podendo ser visualizados apenas internamente. Além de todas as tarefas simples citadas, o Shell Script no Linux possibilita uma integração natural da linguagem com as funções do sistema. De acordo com Jargas (2008), utilizando Shell Script no Linux, é possível utilizar fer- ramentas do sistema no próprio código para realizar tarefas mais complexas, como grep, sed e find, empregados para buscar informações no sistema, manipulando arquivos, e todos com interface amigável utilizada pela linha de comando, o que facilita a interação entre o usuário e o sistema. Todavia, o Shell Script também oferece opções mais complexas, como viabilidade de redirecionamento, permitindo a combinação de diversos pro- gramas entre si, o que evita a reescrita de código e torna as funcionalidades do código ainda mais poderosas (JARGAS, 2008). Por essa combinação de soluções, o Shell Script é chamado de Lego, visto permitir que várias “peças” sejam harmonizadas a fim de alcançar determinado objetivo. Por fim, outra característica que podemos citar quando falamos de Shell Script é a facilidade de voltar ao código, corrigir erros e modificar comandos digitados anteriormente utilizando o mecanismo de histórico disponível. Em resumo, o Shell Script atualmente tem um grande valor, sendo con- siderado uma ferramenta valiosa para os programadores, visto promover a automatização de tarefas de modo eficaz, além de possibilitar agilidade nas entregas e adicionar confiabilidade aos processos antes somente possíveis de maneira manual e hoje automatizados de forma prática e segura. Introdução ao Shell Script Linux14 ARRUDA, F. Introdução ao Shell Script. Canaltech, São Bernardo do Campo, 2 jun. 2014. Disponível em: https://canaltech.com.br/linux/Introducao-ao-Shell-Script/. Acesso em: 19 jul. 2020. DELYRA, J. L. Pipeline. Instituto de Física da Universidade de São Paulo, São Paulo, 25 abr. 2002. Disponível em: http://latt.if.usp.br/fma215/apostilas/aula-06/node4. html. Acesso em: 19 jul. 2020. GLAUCO, T. Linux Shell Essentials. DevMedia, Rio de Janeiro, 2011. Disponível em: https:// www.devmedia.com.br/linux-shell-essentials/20158. Acesso em: 19 jul. 2020. JARGAS, A. M. Shell script professional. São Paulo: Novatec, 2008. 480 p. LOUSADA, F. B. Introdução ao Shell Script no Linux. DevMedia, Rio de Janeiro, 2015. Dis- ponível em: https://www.devmedia.com.br/introducao-ao-shell-script-no-linux/25778. Acesso em: 19 jul. 2020. MAZIERO, C. A. Departamento de Informática da Universidade Federal do Paraná, Curitiba, 5 ago. 2019. UNIX: Shell scripts. Disponível em: http://wiki.inf.ufpr.br/maziero/doku. php?id=unix:shell_scripts. Acesso em: 19 jul. 2020. MULINARI, J. A. Shell de backup incremental. Dicas-L, Jaguariúna, 23 jul. 2005. Dispo- nível em: https://www.dicas-l.com.br/arquivo/script_shell_de_backup_incremental. php. Acesso em: 19 jul. 2020. NASCIMENTO, I.; GERSTENBERGER, P. Introdução ao Shell Script. Infra Magazine, Rio de Janeiro, n. 12, 2013. Disponível em: https://www.devmedia.com.br/introducao-ao- -shell-script-revista-infra-magazine-12/28607. Acesso em: 19 jul. 2020. NEWHAM, C. Learning the bash shell: Unix shell programming. 3. ed. Sebastopol: O’Reilly, 2005. 352 p. OLIVEIRA, M. Dicas úteis para Shell Script. Terminal Root, Londrina, 19 dez. 2014. Dis- ponível em: https://terminalroot.com.br/2014/12/dicas-uteis-para-shell-script.html. Acesso em: 19 jul. 2020. PONTE, R. Deploy automatizado: feito é melhor que perfeito. TriadWorks – Ensino e Formação Java, Fortaleza, 5 out. 2016. Disponível em: http://blog.triadworks.com.br/ deploy-automatizado-feito-e-melhor-que-perfeito. Acesso em: 19 jul. 2020. REIS, F. Controle de tarefas no shell – comandos bg, fg, jobs. Bóson Treinamentos em Tecnologia, São Paulo, 20 jun. 2013. Disponível em http://www.bosontreinamentos.com. br/linux/controle-de-tarefas-no-shell-comandos-bg-fg-jobs/. Acesso em: 19 jul. 2020. 15Introdução ao Shell Script Linux Os links para sites da web fornecidos neste capítulo foram todos testados, e seu fun- cionamento foi comprovado no momento da publicação do material. No entanto, a rede é extremamente dinâmica; suas páginas estão constantemente mudando de local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade sobre qualidade, precisão ou integralidade das informações referidas em tais links. Leituras recomendadas GIMSON, M. Linux command line: fast and easy! [S. l.]: Edição do autor, 2015. ROCHA, J. Variáveis em bash. Viva o Linux, Nova Friburgo, 3 dez. 2018. Disponível em: https://www.vivaolinux.com.br/dica/Variaveis-em-bash. Acesso em: 19 jul. 2020. SILVA, I. S.; SOUZA, J. M.; SANTOS, M. C. Linguagem de Programação – Shell Script. Faculdade de Informática de Taquara, Taquara, [200-?], Disponível em: https://fit.faccat. br/~igor/artigos/Shell.htm#. Acesso em: 19 jul. 2020. Introdução ao Shell Script Linux16