Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação para servidores Redes de Computadores – DANIEL RIBEIRO MATOS Fortaleza, 2017.1 Padrão Inverso no grep ● Continuando nossa agenda, vamos para as opções de alterar ou deletar uma linha ● Primeiramente, pense como podemos realizar a ação de deletar uma linha?Com o grep nós conseguimos mostrar a linha de um arquivo que contém o padrão especificado grep joão /etc/agenda.txt A linha acima retornará todas as linhas que contenham o padrão joão E se eu quiser justamente o contrário? Lista todas as linhas que não contem o padrão especificado Padrão Inverso no grep ● Será que o grep não nos dá esta opção? – Dúvidas sobre comandos: ● man grep -v, --invert-match Invert the sense of matching, to select non-matching lines De posse dessa informação, como podemos fazer para apagar um registro de nossa agenda? Vamos usar uma busca com o padrão de inverter, assim o resultado do grep seria nosso arquivo já com a linha deletada! Padrão Inverso no grep ● Ou seja: grep -v $apagar $agenda – Esse comando irá gerar nossa agenda sem a linha que contem o padrão a apagar. Agora queremos que esta saída, seja nosso arquivo de agenda original. – Para não ocorrer risco de perder nosso arquivo de agenda, vamos fazer um backup antes de sobrescrevê-lo: cp $agenda $agenda.bkp – Em seguida, vamos jogar nosso novo arquivo em um local temporário grep -v $apagar $AGENDA > /tmp/apagado – E finalmente, sobrescrevemos nossa agenda: mv /tmp/apagado $agenda Modificando uma entrada ● Para modificar a entrada, podemos fazer da seguinte maneira: – Apago a entrada e procedo como se fosse por a primeira vez ● Tentem implementar este caso. FUNÇÕES Funções ● Notem que para implementar o alterar, nós utilizamos o mesmo código de remover e adicionar – Foi preciso duplicar código. ● Poderíamos criar uma função que insere um novo registro e uma que apaga um registro com base em um padrão – Com isso não precisaríamos redigitar o código de adicionar e remover um registro funcao () { comando1; comando 2; ... } ● Ou: funcao () { comando1; comando2; … } funcao é o nome da função, ao utilizar uma função, a partir de agora, se eu precisar realizar o trabalho da função, ao invés de digitar novamente todos os comandos, utilizo somente: funcao e todos os comamdos internos serão executados. ● Teríamos então, algo como: adicionar_entrada ( ) { echo “Digite a linha a incluir:” read entrada grep “$entrada” $1 if [ $? -eq 1 ] then echo “Adicionando entrada” echo $entrada >> $1 else echo “Já existe a entrada no arquivo $agenda fi } O $1, que em um script reprenta o primeiro argumento recebido por um script, dentro de uma função representa o primeiro argumento que a função recebeu. Para chamar a função, deve ser feito: adicionar_entrada $ARQUIVO_AGENDA 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 1/16 Programação para Servidores Aula 1: Introdução ao Shell Script INTRODUÇÃO Nesta aula, travaremos o primeiro contato com a disciplina de Programação para Servidores. Nossas tarefas se iniciam com a preparação do ambiente para as aulas, onde é necessário, no mínimo, um editor de textos simples e um terminal de comandos com interpretador bash. Veremos ainda os conceitos de shell script e, ainda, linguagens compiladas e interpretadas. OBJETIVOS 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 2/16 Descrever o ambiente de trabalho do laboratório; Diferenciar as linguagens interpretadas e as linguagens compiladas; Reconhecer caracteres especiais em programação shell; De�nir o conceito de shell script e sua utilização em computação. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 3/16 UM POUCO DE TEORIA Nossa disciplina é iminentemente prática. Colocaremos a mão na massa. Mas é claro que precisaremos entender “o quê” estamos fazendo antes de treinar o “como fazer”. Vamos, então, analisar conceitos importantes. DEFINIÇÃO DE SHELL SCRIPT Shell script é uma linguagem de programação interpretada usada em vários sistemas operacionais. Na linha de comandos de um interpretador (shell), podemos- empregar diversos comandos um após o outro ou combiná-los em uma mesma linha. Alguns comandos oferecem relativa complexidade, exigindo repetidas tentativas até obter sucesso. Semanas depois são feitas novas tentativas até acertar. Então, como posso salvar a sequência correta? Se forem inseridas diversas linhas de comandos em um arquivo texto simples, tem-se em um shell script. Uma vez criado, um shell script pode ser reutilizado quantas vezes for necessário. Todos os sistemas Unix e similares são repletos de scripts em shell para a realização das mais diversas atividades administrativas e de manutenção do sistema. Os arquivos de lote (batch) do Windows são também exemplos de shell scripts. Nesta disciplina, estudaremos apenas os comandos em lote do Linux, mas os princípios da funcionalidade são os mesmos do Command prompt ou do PowerShell dos sistemas Microsoft. Por serem facilmente agendados para execução em horas pré-de�nidas através do crontab, os shell scripts são usados para construções de ferramentas indispensáveis aos administradores de sistemas Unix. Destacamos ainda que vamos mostrar o caminho, mas seria quase impossível a�rmar que veremos todos os 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 4/16 comandos possíveis em bash. Vamos abordar algumas ações comuns no dia a dia dos administradores de rede e de sistemas linux. É um bom começo. Ao longo de sua trajetória pro�ssional, muitos problemas aparecerão. Para cada um deles será exigido um pouco de conceituação e muita dedicação e esforço na busca pela melhor solução. PRINCIPAIS RAZÕES PARA SE UTILIZAR SHELL SCRIPTS Dentre as principais razões para se utilizar shell scripts, podem ser citadas: Simplicidade Por ser uma linguagem de alto nível, é possível expressar operações complexas de forma simples. Portabilidade Por ser universal entre sistemas Unix, existe uma grande chance de um shell script escrito para um sistema ser transferido para outro sem necessidade de alterações. Facilidade de desenvolvimento Pode-se desenvolver um shell script poderoso e útil em pouco tempo. Recursos Utilização de poucos recursos por necessitar apenas de linhas de comandos textuais. Controle Maior controle sobre os arquivos e o sistema operacional. Programação Script O conhecimento básico de programação script (glossário) é essencial para quem deseja tornar-se um administrador de sistemas. Durante o processo de boot, uma máquina Linux executa os shell scripts em /etc/rc.d para con�gurar o sistema e os serviços. Uma compreensão detalhada de tais scripts de inicialização é importante para analisar o comportamento de um sistema e, possivelmente, modi�cá-lo. Scripts VERSUS Linguagens Compiladas PREPARANDO O AMBIENTE PARA A DISCIPLINA 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 5/16 Para o ambiente de trabalho da disciplina, propomos o uso da distribuição Fedora 12, que pode ser instalada diretamente nas estações do laboratório ou utilizada em máquinas virtuais. Para a virtualização, propomos o uso do software free Oracle VM VirtualBox. Não há, necessariamente, obrigação de uso desses produtos. A proposta é tão somente por sua adaptação ao per�l de hardware padrão da maior parte dos computadores em uso atualmente. Outra vantagem é que o arquivo de disco virtual não é tão grande e permiteque você copie o arquivo para uso em mais de uma estação. A única imposição é que o SO possua o interpretador de comandos “bash”. ORACLE VM VIRTUALBOX Vamos a um passo a passo utilizando o VirtualBox (glossário) e instalando o Fedora 12 (glossário). Criando uma nova máquina virtual Abra o Virtual Box e clique em NOVO (ícone no topo à esquerda). Na primeira janela, digite o nome da máquina virtual e selecione o SO. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 6/16 Clique em próximo e selecione a quantidade de memória RAM da máquina virtual. De�nindo o disco virtual O próximo passo é de�nir o disco virtual. Você tem a opção de de�ni-lo, usando um disco existente ou criar outro disco. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 7/16 Por padrão, os discos virtuais do VirtualBox são, na verdade, arquivos com extensão “.VDI”. Para a opção de usar disco existente, é possível “ler” discos virtuais criados em outros virtualizadores, como VHD do VMWare ou VHDX do Hyper-V. Caso vá criar um novo disco, selecione o tamanho (para o Fedora 12 um disco de 10Gb é su�ciente) e de�na se ele terá tamanho �xo ou dinamicamente alocado. Com tamanho �xo, já será criado um arquivo com 10Gb. No dinamicamente alocado, o arquivo começa “zerado” e vai crescendo à medida que gravamos dados no HD virtual. O primeiro caso é ligeiramente mais rápido. Entretanto, o segundo é muito mais utilizado. Pronto. A máquina está criada, mas temos ainda bastante 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 8/16 trabalho pela frente. A máquina ainda está desligada como um hardware que acabou de ser montado. Vamos, então, à instalação do SO. Ajustes de con�gurações Antes de ligar a máquina, vamos ajustar as con�gurações: Selecione a máquina e clique em Con�gurações. Na opção Geral – Avançado, marque as opções de Bi-direcional para Área de transferência compartilhada e Arrastar e Soltar. Assim é possível copiar texto do Windows e colar no Linux. Para programação, facilita muito o trabalho. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 9/16 Em uma máquina física, seria necessário encontrar o DVD de instalação para prosseguir. Na máquina virtual, vamos “apontar” o DVD virtual para o arquivo ISO. Selecione Armazenamento – Controladora SATA e clique no ícone de um DVD com “+”. Clique em Escolher disco. Indique onde se encontra o arquivo. Antes de ligar a máquina, vamos aproveitar e con�gurar a rede. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 10/16 A interface virtual de rede pode ser ajustada de diversas formas. Vamos con�gurar no modo “Bridge” e associá-la à sua interface física ativa (normalmente Ethernet, a cabo, ou Wi-�, sem �o). É possível alterar essa associação a qualquer momento. O problema é que em algumas versões do VirtualBox é necessário desligar a máquina para acessar o menu de rede. A máquina virtual está con�gurada, vamos à instalação do Linux. Selecione a sua máquina e clique em Iniciar. Aparecerá, então, a tela semelhante a que teríamos em uma instalação do Linux numa máquina física. A sequência de opções de instalação varia bastante para cada distribuição Linux. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 11/16 Nessa fase, é importante destacar alguns aspectos: Para liberar a seta do mouse de dentro da janela virtual, clique na tecla CRTL da direita; Se você clicar CRTL+ALT+DEL, o comando será recebido pelo Windows. Para enviar um CRTL+ALT+DEL à máquina virtual, clique CTRL da direita+DEL. Após instalado, você já pode trabalhar com o novo SO. A exibição da nova janela pode ser em tela cheia, em janela ou no modo Seamless (mesclado com o Windows). Para escolher outro modo, selecione Visualizar e teste as opções. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 12/16 Veja como �ca o Fedora12 sobre o Windows 10 em modo Seamless. Meu primeiro script ou Alô Mundo. Construindo o primeiro script. Criar um arquivo script1.sh. Na interface grá�ca, abra o Gerenciador de Arquivos, selecione o diretório (recomendamos um diretório dentro de /home, por exemplo /home/scripts). Dentro do diretório, selecione Novo > Documento de Texto. No Terminal, digite: Para executar o script digite: Funcionou? Parabéns, esse foi o primeiro script. Mensagem de erro? Reveja o código fonte e veri�que se o usuário possui direito de execução no arquivo. Para isso, digite: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 13/16 Para atribuir o direito de execução, digite: Tente de novo, agora deve funcionar. LINHA DE APRENDIZAGEM Antes de encerrarmos, cabe uma discussão interessante. A linha de aprendizagem mais comum vai do mais simples para o mais complexo. Ninguém aprende a andar de bicicleta sendo largado pela primeira vez para descer uma ladeira íngreme. Primeiro usamos as rodinhas, depois uma bicicleta maior, na grama e em terreno plano, depois as curvas, maior velocidade etc. E anos depois alguns loucos praticam downhill, que é aquela modalidade de mountain bike que consiste em descer o mais rapidamente possível um percurso! Da mesma forma, ao longo desta disciplina, alguns alunos ganharão �uência para usar apenas o terminal, enquanto outros já possuem essa capacidade. Para iniciantes, é fortemente recomendado que utilizem a interface grá�ca Gnome ou KDE ou qualquer outra à sua escolha. O foco de nossa disciplina é a programação para comandos bash e não o uso exclusivo do terminal. Nas próximas aulas vamos simpli�car as descrições, destacando novos comandos, mas omitindo procedimentos de aulas passadas. Ficou com dúvidas? Volte e comece de novo. Esta aula é fundamental para prosseguir na disciplina. EXERCÍCIOS Para �nalizar, responda as questões a seguir: 1. Sobre Shell script é correto a�rmar que: A) Shell script é uma linguagem de programação interpretada usada em vários sistemas operacionais; B) Os programas em Shell script necessitam ser compilados; C) Um Script que utilize o interpretador bash pode rodar em qualquer dispositivo; D) O comando “echo teste” produz um som no alto falante do sistema; E) Os arquivos de um Shell script possuem extensão “.EXE”. Justi�cativa 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 14/16 2. Assinale a alternativa INCORRETA: A) Arquivos de lote reúnem diversos comandos do sistema; B) Os arquivos de lote (batch) do Windows são também exemplos de shell scripts; C) Em um terminal bash, é possível digitar uma sequência de comandos separados por ponto e vírgula; D) Programas .EXE são scripts interpretados; E) Além do bash, o Linux possui outros interpretadores de comando com o sh e ash. Justi�cativa 3. Entre as características abaixo, selecione aquela que não é uma vantagem ao se utilizar shell scripts: A) Portabilidade. Por ser universal entre sistemas Unix, existe uma grande chance de um shell script escrito para um sistema ser transferido para outro sem necessidade de alterações; B) Facilidade de desenvolvimento. Pode-se desenvolver um shell script poderoso e útil em pouco tempo; C) Performance – shell scripts ocupam muitos recursos do sistema por exigirem muito processamento;D) Recursos. Utilização de poucos recursos por necessitar apenas de linhas de comandos textuais; E) Simplicidade. Por ser uma linguagem de alto nível, é possível expressar operações complexas de forma e simples. Justi�cativa 4. Tais programas devem ser traduzidos para um código objeto (por intermédio de um compilador) e posteriormente ligados a funções em bibliotecas (por intermédio de um linkeditor) a �m de se obter um programa executável. Os programas executáveis podem ser executados diretamente pelo hardware do computador. Assinale a alternativa incorreta: A) A maioria dos programas, notadamente os comerciais, são escritos em linguagens compiladas; B) Programas compilados devem ser traduzidos para um código objeto (por intermédio de um compilador); C) Um programa compilado só funciona na máquina onde esteja instalada a sua biblioteca; D) Os programas executáveis podem ser executados diretamente pelo hardware do computador; E) A grande vantagem na utilização de programas escritos em linguagens compiladas é a performance que se obtém. Justi�cativa 5. Assinale a a�rmativa INCORRETA: A) Linguagens scripts geralmente são interpretadas; B) O Shell Script não pode ser reutilizado em outro servidor; C) Gerenciar tarefas simples e repetitivas é característica da administração de sistemas; D) Com Shell Script, as instruções são buscadas uma após outra a �m de serem executadas; E) Uma grande vantagem na utilização de scripts é sua simplicidade. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 15/16 Justi�cativa Glossário PROGRAMAÇÃO SCRIPT A programação script não é difícil de dominar, pois scripts podem ser construídos em pequenas seções, existindo apenas um conjunto relativamente pequeno de operadores especí�cos e opções para aprender. A sintaxe é simples e direta, semelhante à execução de forma encadeada de utilitários na linha de comando, e há apenas algumas regras que regem a sua utilização. VIRTUALBOX Download do Virtual Box: <https://www.virtualbox.org/wiki/Downloads (https://www.virtualbox.org/wiki/Downloads)> O processo de instalação é absolutamente simples. Fique atento, pois é necessário autorizar o software a acessar as interfaces de redes. Alguns sistemas de �rewall e de antivírus podem identi�cá-lo como um programa irregular. VIRTUALBOX 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 16/16 Download do Fedora Baixe um arquivo ISO, pois ele permite gerar um DVD de instalação ou ser montado pelo software de virtualização. A versão 12 pode ser encontrada em: <https://archives.fedoraproject.org /pub/archive/fedora/linux/releases/12/Fedora/i386/iso/ (https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/12/Fedora/i386/iso/)> O link para o DVD é Fedora-12-i386-DVD.iso Programação para servidores Aula 2 Redes de Computadores – DANIEL RIBEIRO MATOS Fortaleza, 2017.1 Importante! ● O Shell script remete à filosofia clássica do Unix de quebrar projetos complexos em tarefas mais simples, concatenadas entre componentes e utilitários[1] 1 - Advanced Bash Scripting Gide – tldp.org Diferentes Shells ● Existem diversos shells para Unix – Bash, TCSH, CSH, Korn Shell, etc ● Bash (Bourne-Again shell) é praticamente um padrão para shell script em Unix A maioria dos scripts mais simples funciona em qualquer shell Exemplo de script ● Em geral, um script é apenas uma sequência de comandos digitados em um arquivo # Limpeza de Logs # Executar como root cd /var/log cat /dev/null > messages cat /dev/null > wtmp echo "Arquivos de Log apagados!" A vantagem de por os comandos em um script vai além de não ter que redigitar todos os comandos um a um. O script se torna um programa, um utilitário e ele pode ser facilmente modificado ou customizado para uma aplicação particular Uma versão melhorada Você irá descobrir constantemente maneiras de melhorar scripts escritos anteriormente #!/bin/bash ● A primeira linha de um script, inicia com o caractere #, que indica comentário, porém a combinação #! é um marcador de tipo de arquivo – através dessa combinação, o SO sabe que o arquivo é um script e não um arquivo texto comum. ● Em seguida o interpretador do script – /bin/bash ● Se o script consiste somente em uma sequência de comandos genérica (não usa nenhum recurso específico do shell), a primeira linha pode ser omitida. Executando um script Executando um script ● Pode-se utilizar: – sh nome_do_script ● sh aponta para o bash em sistemas Linux – bash nome_do_script ● Ou digitar diretamente o nome do script: – ./nome_do_script – nome_do_script ● Se o script estiver no PATH Executando um script ● Para executar um script diretamente, o arquivo do script precisa ter permissão de execução – Para dar permissão de execução, utiliza-se o chmod no Linux – chmod 775 nome_do_script ou: – chmod +x nome_do_script Exercício: Escreva um script que, quando executado, informe a data e hora, liste os usuários logados e diga há quanto tempo o sistema está ligado (uptime). O Script então, salva esta informação em um LOG Variáveis ● Uma variável é um rótulo (um nome), atribuído a determinados dados na memória ● Exemplo: – Em um script, ao invés de sempre chamar o comando date para verificar a data de hoje, podemos criar uma variável data que irá guardar o valor da data atual e utilizada sempre que necessário (assim o comando date só é chamado uma vez) Variáveis ● Declarar variáveis em shell é simples, basta digitar um nome para a variável e lhe atribuir um valor: variavel_x=10 variavel_y=”Agora sei shell” – Para declarar strings, sempre use aspas duplas, ou a variável assumirá apenas o valor da primeira palavra: variavel_y=Agora sei shell irá guardar “Agora” em variável_y e tentará executar o comando “sei shell” ● Variáveis sempre começam com uma letra ou um “_”, outros caracteres ou números não são permitidos no início ● Não podem haver espaços entre a variável e o sinal de atribuição – VariavelA=10 e não: VariavelA = 10 ● Para utilizar uma variável, basta chamá-la com o caractere $ na frente: – echo $variavel_x – echo $variavel_y ● Para limpar o valor de uma variável: – variavel= ● As variáveis não tem tipo (tudo é string) – Podem ser realizadas operações aritméticas com variáveis numéricas ● Para uma variável receber o valor de um comando, é preciso utilizar alguns caracteres especiais: data=date – O comando acima, fará com que a variável data receba o valor “date” e não o resultado da execução do comando date ● Existem duas maneiras de executar um comando no meio de uma linha em um script: – data = $(date) – data=`date` ● Atenção, é o acento crase e não as aspas simples Refaça o exercício anterior utilizando variáveis Argumentos Argumentos ● Argumentos servem para passar opções para scripts. ● São muito úteis para deixar seus scripts o mais genérico possível e selecionar as opções através de argumentos – Por exemplo, ao invés de um script apagar arquivos temporários em um determinado diretório, contendo dentro do script: rm /tmp/files podemos passar o diretório como argumento para o script: ./apaga_temporarios /tmp/files – Assim eu posso utilizar esse script para apagar arquivos temporários de qualquer diretório, basta passar como argumento Argumentos ● Argumentos podem ser passados para scripts pela linha de comando, eles são automaticamente salvos nas variáveis: – $0, $1, $2… (onde 0 é o nome do próprio script, $1 o primeiro argumento, 2 é o segundo e assim sucessivamente) ● Exemplo:– ./apaga_temporarios /tmp/files /var/tmp/ dentro do script, o primeiro argumento pode ser acessado como $0 e o segundo como $1 Escreva um script que mostra na tela o nome do script executado e os argumentos que recebe (até 3 argumentos) Faça com que o script mostre todos os argumentos na mesma linha, separados por vírgula: ./teste.sh, arg1, arg2, arg3 Agora modifique para que a saída seja: Variável $0: ./teste.sh Variável $1: arg1 Variável $2: arg2 Variável $3: arg3 ● Como o caractere $ é um caractere especial, para que ele seja exibido na tela, é preciso utilizar o caractere de escape “\”. ● Esse caractere diz ao shell que o próximo caractere é texto, e não um caractere especial, assim ele não tenta interpretá-lo ● Se você por uma string dentro de aspas simples, o shell não irá interpretar nenhum caractere especial: echo ‘variavel $0’ $0 – Exibe: variavel $0 valor_da_variavel ● As aspas duplas “ “ agrupam o texto em uma mesma string, mas o shell irá interpretar todos os caracteres especiais dentro das aspas, a não ser que um caractere de escape o diga para não fazê-lo: X=”A variavel \$Y é igual a: $Y” ● Irá exibir: A variavel $Y é igual a: valor_de_y Expressões condicionais Expressões condicionais ● Para executar um bloco de código, dependendo se uma variável ou resultado de um comando possui determinado valor, utiliza-se o construtor if/then – Esse construtor testa se a saída do comando é 0 (0 significa sucesso), e caso afirmativo, executa o bloco após o then ● De modo geral, a sintaxe seria: if [ condição ] then código para verdadeiro else código para falso fi ● De uma maneira mais geral: if [ condicao1 ] then commando1 commando2 commando3 elif [ condicao2 ] then command4 command5 eles comando_default fi test ● Os colchetes [ ] no comando if, na verdade são uma chamada ao comando test – man test ● O test é utilizado para avaliar expressões e trabalhar com arquivos – Podemos fazer um if para verificar se um arquivo existe, por exemplo, caso contrário ele deve ser criado Operandos de arquivos do comando test ● -e : arquivo existe ● -f : é um arquivo regular (não é diretório nem dispositivo) ● -s : não tem tamanho zero ● -d : é um diretório ● -b : é um dispositivo de bloco ● -c : é um dispositivo de caractere ● -r : tem permissão de leitura ● -w : tem permissão de escrita ● -x : tem permissão de execução Exemplo: if [ -e /tmp/teste ] then echo “arquivo existe” else touch /tmp/teste echo “arquivo criado” fi Operadores de comparação numéricos ● -eq : igual ● -ne : diferente ● -gt : maior que ● -ge : maior ou igual ● -lt : menor que ● -le : menor ou igual Exemplo: if [ $x -gt 0 ] then echo “Variavel X é positiva” elif [ $x -eq 0 ] echo “Variavel X é zero” else echo “Variavel X é negativa” fi Operadores de Comparação de strings ● = igual ● == igual (mesmo que =) ● != diferente ● < menor que (em ordem alfabética ASCII) ● > maior que (em ordem alfabética ASCII) ● -z string é nula (tem tamanho zero) ● -n string não é nula Exemplo: if [ $x = “teste” ] then echo “X = teste” fi Atividade 1 ● Escreva um script que: – Teste se um arquivo existe (este arquivo deve ser passado como parâmetro e guardado na variável ARQUIVO) – Se o arquivo não existir, escrever no terminal “arquivo nome_do_arquivo não existe” e o arquivo deve ser criado – Se existir, escrever no terminal “arquivo nome_do_arquivo existe” e verificar se a quantidade de linhas do arquivo é maior ou igual a 2, exibir no terminal se é ou não maior que 2. Dica, para saber a quantidade de linhas de um arquivo, utiliza-se o comando “wc -l arquivo”, porém o resultado do wc mostra além da quantidade de linhas, o nome do arquivo. Para que ele resulte apenas na quantidade de linhas usamos o operador pipe “|” junto com o comando “cat” cat arquivo | wc -l 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 1/13 Programação para Servidores Aula 2 - Programação Script 1 – Variáveis e testes INTRODUÇÃO Na aula 2, vamos começar a construir os primeiros scripts. Inicialmente com reduzida complexidade e depois apresentaremos os conceitos de variáveis, sua simbologia e sintaxe. Veremos também os argumentos ou, melhor, os valores enviados ao script. Finalizaremos com as estruturas de decisão if / then / else / � (sim, termina com � – if ao contrário) e case, que termina com esac. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 2/13 OBJETIVOS Explicar a substituição de variáveis em shell script; Identi�car os tipos de variáveis especiais e as formas de proteção de variáveis com aspas; Identi�car os mecanismos de testes em shell script; Aplicar as estruturas de decisão if/else. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 3/13 VARIÁVEIS Durante seu curso, você já deve ter ouvido o termo “variável” diversas vezes, mas você saberia explicar o conceito de variável? Variável é a forma que as linguagens de programação utilizam para representar dados. Uma variável nada mais é do que um rótulo, um nome atribuído a uma posição ou conjunto de posições na memória do computador contendo um item de dados. Cada variável possui um valor, que representa a informação que foi atribuída a ela. Compreendeu? Observe a seguinte analogia: Imagine uma posição na memória do computador como um pote. Agora, imagine que você precisa do conteúdo de um determinado pote. Mas, como são muitos potes, como você escolherá o certo? Neste exemplo, a variável “comprimidos” poderia ter como valor “aspirina”. Em shell script, o nome de uma variável começa sempre por uma letra ou por um sublinhado, e pode conter qualquer quantidade de letras, dígitos e/ou sublinhados. O conteúdo de uma variável é armazenado como uma string e não há limite para a quantidade de caracteres que ela pode conter. A atribuição de valores a uma variável é feita escrevendo-se o nome da variável seguido imediatamente do caractere = e o valor a ser atribuído, sem qualquer espaço entre eles. Para atribuir uma variável com valor que contenha espaços, o valor deverá ser colocado entre aspas. Veja alguns exemplos de atribuição de valores a variáveis: Para obter o valor de uma variável, utiliza-se o caractere $ precedendo seu nome. Por exemplo: Para limpar o valor de uma variável basta fazer uma atribuição nula. Por exemplo: Ao contrário de muitas linguagens de programação, o shell não separa suas variáveis por tipo (glossário). Em shell script, as variáveis são sequências de caracteres (strings), mas, dependendo do contexto, podem ser realizadas operações aritméticas sobre as variáveis. ARGUMENTOS 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 4/13 Os argumentos são passados para o script a partir da linha de comando por intermédio das variáveis. Quando executamos um script como o exemplo a seguir, o servidor1, servidor2.com e 5 são três parâmetros passados ao script. Observe outro exemplo: Depois de 9, os argumentos devem ser colocados entre chaves. Por exemplo: PROTEÇÃO COM ASPAS Proteção com aspas (quoting) é a forma utilizada para informar ao shell como interpretar os dados passados. ESCAPE COM BARRA INVERTIDA Preceder um caractere com uma barra invertida (\) diz ao shell para tratar literalmente o caractere. ASPAS SIMPLES Aspas simples ('......') forçam o shell a tratar literalmente tudo o que estiver entre o par de aspas. Não é possível encaixar aspas simples dentro de uma string protegida por aspas simples, pois nema barra invertida é especial dentro de aspas simples. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 5/13 ASPAS DUPLAS Aspas duplas ("......") agrupam o texto como uma única string, porém o shell processa caracteres de escape, variáveis, substituição de comandos etc. ESTRUTURA DE DECISÃO - IF O construtor if/then testa se a saída do comando anterior é 0 (em UNIX, 0 signi�ca sucesso) e, em caso a�rmativo, executa um ou mais comandos. Em versões mais recentes do shell, foi introduzido o comando [[ ... ]], que estendeu os comandos de teste realizando comparações de uma forma mais familiar para os programadores de outras linguagens. É comum esbarrar na sintaxe de um comando, o foco é o problema que se pretende resolver. Após de�nir a lógica é que testaremos a sintaxe. Vamos começar com um problema simples: Comparar duas variáveis “a” e “b”; Se “a” for maior, escrever a mensagem “a é maior que b”; Se “b” for maior, a mensagem é “b é maior que a”. Em pseudocódigo teríamos: Faltou veri�car se são iguais. Para isso, poderíamos combinar outro SE para esse teste. Num script em bash teríamos: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 6/13 Aproveite e teste este código criando o script aula2-1.sh. Vamos, analisar mais um script (os comentários vem depois de #): Em estruturas de decisão, comparamos valores simples ou compostos e podemos ter diversas soluções. No caso acima, são 3 possibilidades. Melhorando esse código, podemos resolver aquele problema de testar se a e b são iguais com “elif”. Continue testando... Mas esse script ainda não atende ao principal propósito de um script. Então, por que construir um para comparar 3 e 5? Usamos esse exemplo apenas para demonstrar o uso dos comandos. Scripts são construídos para soluções em qualquer caso. Ainda, nesse exemplo, poderíamos generalizar a solução usando argumentos passados ao script. Veja o próximo script: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 7/13 Para que este script funcione a chamada deveria ser: Onde 5 é o primeiro argumento ($1) e 3 é o segundo argumento ($2). Agora temos um script capaz de comparar dois valores quaisquer. Vamos lá, teste este script também. Se restaram dúvidas, repita ou use os fóruns para discutir o assunto. O construtor if/then pode testar a saída de qualquer comando, não se limitando apenas a testes entre colchetes. Na prática, a resposta da estrutura de decisão será sempre verdadeiro ou falso. De uma forma mais ampla, a estrutura do construtor if/then pode ser: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 8/13 OPERADORES DE TESTE EM ARQUIVOS Veja alguns operadores para teste em arquivos: Observe um exemplo da utilização do operador –f: ESTRUTURA DE DECISÃO COM CASE Se for preciso veri�car o valor de uma variável dentre muitos, pode ser utilizada uma série de encadeamento de testes if e elif. Porém, o shell possui a construção case que pode ser utilizada com muito mais facilidade para o casamento de padrões. Sua sintaxe é: Exemplo da utilização do case: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 9/13 ATIVIDADE Você já deve ter percebido que, ao longo de nossas aulas, algumas tarefas simples serão repetitivas. Uma delas é que a cada exemplo precisamos criar um novo script, alterar suas propriedades com “chmod 777 nome- script.sh” e inserir a linha “#!/bin/bash” no topo do script para iniciar o trabalho. Sua tarefa é criar um script novo.sh que realize as tarefas acima com uma chamada do tipo: Onde script.sh é o arquivo a ser criado. Resposta Correta 1. Uma variável em Shell Script: Deve ser ter seu tipo declarado, como “int a”. Não pode ser rede�nida ao longo do Script. Tem seu valor atribuído diretamente como em “x=5”. Tem seu valor atribuído como em “$x=5”. As variáveis sempre recebem $ na frente, seja na atribuição de valores seja nas operações com a variável. Justi�cativa 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 10/13 2. Ao chamar um script com o comando: As variáveis $0 e $ 2 serão: servidor1 e servidor script.sh e .com servidor1 e .com script.sh e servidor2.com servidor 1 e 5 Justi�cativa 3. O comando ./script.sh 4 5 enviado a script.sh cujo código está abaixo: Apresenta como resultado: b é maior que a a é maior que b b é menor que a a é menor que b 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 11/13 erro pois $1 não foi de�nido Justi�cativa 4. No Script abaixo: Qual a mensagem de resposta caso a chamada fosse ./script.sh 20 20? a igual a b a maior que b a menor que b Nenhuma das condições b maior que a Justi�cativa 5. O script1.sh tem o conteúdo: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 12/13 O script2.sh tem o conteúdo: O comando ./script1.sh apresenta como resposta na tela: Preto e Branco Rubro-Negro Fluminense Tricolor Vasco Campeão Nenhuma resposta Justi�cativa 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 13/13 Glossário TIPO Algumas linguagens separam suas variáveis por tipo, como double, int e �oat utilizados para guardar valores numerais. Programação para servidores Aula 3 Redes de Computadores – DANIEL RIBEIRO MATOS Fortaleza, 2017.1 Operadores Operadores ● O principal operador em shell script é o operador de atribuição (=). ● Ele atribui um valor a uma variável, porém o faz interpretando tudo o que vem a direita do = como uma string a=5+3 armazena a string "5+3" na variável a. Para efetuar a operação matemática deve ser utilizado o comando let: let a=5+3 que neste caso irá efetuar a operação de soma e armazenar o resultado "8" na variável a. Os interpretadores de comandos mais atuais trabalham com variáveis inteiras de 64 bits, enquanto números em ponto flutuante são tratados como strings Operadores ● Operadores matemáticos: + soma - subtração * multiplicação / divisão ** exponenciação % módulo += incremento por uma constante -= decremento por uma constante *= multiplica por uma constante /= divide por uma constante %= módulo por uma constante Operadores ● Operadores bit a bit: << deslocamento a esquerda <<= deslocamento a esquerda por uma constante >> deslocamento a direita >>= deslocamento a direita por uma constante & "E" | "OU" ~ negação ^ "OU exclusivo" https://www.vivaolinux.com.br/artigo/Bitwise-Escovando-os-bits Operadores ● Operadores booleanos: ! não && "E" || "OU" Estruturas de Repetição Estruturas de Repetição ● Blocos de código que têm sua execução repetida enquanto uma determinada condição for verdadeira ● For (para) ● While (enquanto) ● Until (até) FOR ● A estrutura for interage sobre uma lista de objetos, executando um bloco de comandos para cada objeto. Objetos podem ser qualquer coisa que possa ser criada em forma de lista. Por exemplo, para executar determinadas operações a todos os arquivos que possuam extensão ".txt" for i in *.txt do comando_1 comando_2 ... comando_n done Outros exemplos for k in "1 2 3 4 5 6 7 8 9 10" do Comando_1 comando_2 ... comando_n done for j in "$var1" "$var2" "$var3" "$var4" do comando_1 comando_2 ... comando_n done Executemos códigos acima (substituindo comando_1 por echo, por exemplo) e var1, var2 por variáveis existentes. Contando com o FOR max=10 for i in $(seq 2 $max) do echo "$i" done ● Podemos utilizar o comando seq, para utilizar como contador no for WHILE O while testa uma condição no início de um laço e fica em loop enquanto essa condição for verdadeira. Ao contrário do laço for, o while é utilizado em situações onde o número de repetições do laço não é conhecido de antemão. Sua sintaxe é: while condição do comando_1 comando_2 ... comando_n done WHILE - Exemplos LIMIT=10 a=1 while [ "$a" -le $LIMIT ] do echo -n "$a " let "a+=1" done Until ● O until testa por uma condição no início de um laço e fica em loop enquanto esta condição for falsa (seu funcionamento é o oposto do while). Sua sintaxe é: until condição do comando_1 comando_2 ... comando_n done until LIMIT=10 var=0 until [ "$var" -ge $LIMIT ] do echo -n "$var " let "var+=1" done CASE ● Se for preciso verificar o valor de uma variável dentre muitos, podem ser utilizados uma série de encadeamento de testes if e elif. ● Porém o shell possui a construção case que pode ser utilizada com muito mais facilidade para o casamento de padrões. Sua sintaxe é: case "$variavel" in "$condicao1" ) Comando... ;; "$condicao2" ) Comando… ;; esac Case arch=$(uname -m) case "$arch" in i386 ) echo "maquina 80386" ;; i486 ) echo "maquina 80486" ;; i586 ) echo "maquina Pentium" ;; i686 ) echo "maquina Pentium2+" ;; X86_64 ) Echo "maquina 64 bits" ;; * ) echo "outro tipo de maquina";; esac 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 1/10 Programação para Servidores Aula 03: Programação Script 2 - Operadores, repetições e tomadas de decisões INTRODUÇÃO Na aula 3 nossa abordagem �ca um pouco mais complexa e objetiva, pois começamos a trabalhar com operadores e estruturas de repetição. Muito do que foi visto em Lógica de Programação se repete agora, só que empregando outra linguagem. Você deve lembrar que os professores disseram que o importante é a lógica na solução do problema, a linguagem é apenas um detalhe. Pois é, vamos colocar em prática esses conceitos. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 2/10 Veremos inicialmente como atribuir valores a variáveis e ainda como realizar operações aritméticas, bem como utilizar operadores para comparar números, strings e valores lógicos. Vamos �nalizar com as estruturas de repetição for, while e until. OBJETIVOS Identi�car os operadores utilizados em shell script; Analisar as estruturas de repetições e desvios; De�nir a melhor estrutura a ser utilizada em cada caso; Aplicar as estruturas de repetição e tomadas de decisão na construção de scripts. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 3/10 OPERADORES O principal operador em shell script é o operador de atribuição (=). Ele atribui um valor a uma variável, porém o faz interpretando tudo o que vem à direita do = como uma string. Para efetuar a operação matemática sugerida, devemos utilizar o comando let. Observe os comandos a seguir: Fonte: Os interpretadores de comandos mais atuais trabalham com variáveis inteiras de 64 bits, enquanto números em ponto �utuante são tratados como strings. VAMOS TESTAR? Construa o script aula3-1.sh Teste e veja o que será exibido. Se não aparecer 8 refaça até funcionar. Corrigiu o script? OPERADORES Agora, veremos os tipos de operadores: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 4/10 ESTRUTURAS DE REPETIÇÃO Estruturas de repetição são blocos de código que têm sua execução repetida baseada em valores de variáveis de controle. Veremos, a seguir, as estruturas de repetição e exemplos do uso de cada uma delas. FOR (para) A estrutura for interage sobre uma lista de objetos, executando um bloco de comandos para cada objeto. Objetos podem ser qualquer coisa que possa ser criada em forma de lista. Por exemplo, para listar (comando ls) todos os arquivos de um diretório. Veja, abaixo, a sintaxe básica do for: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 5/10 Vamos a alguns exemplos: Tente inclui-los em scripts e veja seu funcionamento, altere os valores, erre e acerte. Não há outra forma de aprender senão executando. For - Exemplo 1 For - Exemplo 2 Onde comando_1, comando_2 e comando_3 poderiam realizar ações sobre os arquivos .txt do diretório. For - Exemplo 3 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 6/10 Esse script lista os arquivos .sh do diretório do seu script. For - Exemplo 4 Nesse Script temos os valores das variáveis de teste explícitos no loop: ACHOU O ÚLTIMO SCRIPT DO EXEMPLO 3 CONFUSO? CONSTRUA OUTRO SCRIPT QUE LISTE OS ARQUIVOS COM EXTENSÃO.CONF DENTRO DO DIRETÓRIO /ETC. TENTE RESOLVER O PROBLEMA E OLHE A RESPOSTA DEPOIS. Resposta Correta While (enquanto) O while testa uma condição no início de um laço e �ca em loop enquanto essa condição for verdadeira. Ao contrário do laço for, o while é utilizado em situações onde o número de repetições do laço não é conhecido de antemão. A lógica do comando é: Para o correto funcionamento é fundamental que: • A variável de controle (o x do exemplo) seja inicializada; e • A variável de controle seja alterada para que em algum momento a condição deixe de ser verdadeira e o loop (glossário) se encerre. Exemplos de utilização do while: Until (até) O until testa por uma condição no início de um laço e �ca em loop enquanto essa condição for falsa (seu teste na variável de controle é o oposto do while). Sua sintaxe é: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 7/10 Exemplo de utilização do until: ATIVIDADE Utilizando Estruturas de Repetição desenvolva um script que faça uma contagem regressiva de 10 até 1: • Há o risco de criar um loop in�nito, se sua variável de controle não for alterada. Não se desespere, isso acontece com todo mundo. Basta digitar CTRL + z, editar o arquivo e recomeçar. • Para o script ir mais devagar insira o comando sleep 1, que o programa dá uma parada de 1 segundo. Não adianta ver apenas a solução, tente realizar o trabalho sozinho. Resposta Correta EXERCÍCIOS 1. No Script: O que aparece como resposta na tela? 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 8/10 8 Soma = 5+3 Soma = 8 “Soma =” $c “Soma = “$a +$b Justi�cativa 2. No Script: Qual a ação realizada? Sobrescreve o conteúdo de /etc. Exibe os arquivos .conf em /etc. Lista os arquivos no diretório do script. Exibe os valores inteiros de i, de 0 até o valor de conf. Não exibe nenhum valor. Justi�cativa 3. Complete a lacuna no Script abaixo para que ele exiba os inteiros entre 10 e 1: let n=n-1 gt=gt+1 gt+=1 n=n+1 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 9/10 $n = gt + 1 Justi�cativa 4. No script abaixo o que será exibido na tela: 10 9 8 7 6 5 4 3 2 1 0 10 9 8 7 6 5 4 3 2 1 a $a Nenhuma resposta Justi�cativa 5. Em relação aos “loops” while e until, podemos dizer que: No while não há possibilidade de ocorrer loop in�nito. Until mantém o loop por uma sequência de valores pré-de�nidos. While �ca em loop até a variável decontrole tornar-se falsa. Until e while são equivalentes. A condição do until não necessita de variável de controle. Justi�cativa 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 10/10 Glossário JÁ OUVIU FALAR DE LOOP INFINITO? Basta esquecer de incrementar ou decrementar a variável de controle. Aconteceu com você? Não se preocupe, digite CTRL + z para parar o script, edite o código fonte e continue tentando. Vamos agora à sintaxe: Programação para servidores Redes de Computadores – DANIEL RIBEIRO MATOS Fortaleza, 2017.1 READ ● O comando read lê uma informação digitada pelo usuário ● Exemplo: echo “Digite um valor:” read valor – O que o usuário digitar até que aperte a tecla “enter” será salvo na varável $valor Prática: faça o script acima e adicione uma linha para que ele mostre o que o usuário digitou Agenda Telefônica em Shell Script Agenda Telefônica ● Vamos criar um script que controla um arquivo de texto com uma agenda telefônica: Zé dos pão (85) 3212-2828 Chica Costureira (85) 98788-0001 Manoel dos Peba (88) 99999-0909 ● O script deve apresentar um menu, com as opções de procurar por um nome e adicionar uma nova entrada a lista – Mais adiante podemos incluir mais opções, como apagar ou alterar um registro – Por hora, vamos apenas aos mais simples Tratando as opções ● Como saber qual opção o usuário digitou? ● Pode ser feito usando o “if”: if [ $opcao -eq 1 ] then código para procurar uma entrada elif [ $opcao -eq 2 ] then código para adicionar uma nova entrada f ● Mas se eu tiver muitas opções: if [ $opcao -eq 1 ] then código para opção 1 elif [ $opcao -eq 2 ] then código para opção 2 elif [ $opcao -eq 3 ] then código para opção 3 elif [ $opcao -eq 4 ] código para opção 4 f O uso do “case” é mais adequado para avaliar opções conhecidas case $opcao in 1) código para opção 1 ;; 2) código para opção 2 ;; 3) código para opção 3 ;; 4) código para opção 4 ;; *) echo “Você não digitou opção válida ;; esac ● Voltando ao script, a opção 1 irá procurar um telefone, dado um nome ou parte de um nome ● O primeiro passo é ler o nome ou parte no nome que será procurado: echo “Digite o nome ou parte do nome” read busca ● Agora para procurar a informação digitada no arquivo de texto, precisamos utilizar o grep, que é o comando no Linux que procura padrões em arquivos: grep padrão arquivo exemplo: grep daniel /var/lista_admin ● Irá buscar as linhas que possuem “daniel” no arquivo /var/lista_admin Prática: criem arquivos de texto ou pesquisem em arquivos já existentes usando o grep ● Nós precisamos defnir qual será o arquivo da agenda telefônica de nosso script. ● Podemos fazer isto de duas formas, no próprio script, por exemplo: AGENDA=/home/aluno/agenda.txt ● Ou podemos passar o arquivo da agenda como parâmetro para o script: ./agenda.sh /home/aluno/agenda.txt ● Façamos da segunda forma, assim nós podemos gerenciar mais de uma agenda com o mesmo script ● O primeiro passo do script agora é checar se o usuário digitou um argumento e se esse argumento é um arquivo if [ $# -ne 1 ] then echo “Você deve chamar o script assim:” echo “$0 arquivo_de_agenda” exit -1 f ● Com este código, o que acontece se o usuário digitar um diretório como argumento: ./agenda.sh /home Assim, além de testar se o usuário digitou um argumento, precisamos testar se esse argumento é realmente um arquivo. ● Poderíamos fazer isto com um novo if: AGENDA=$1 if [ ! -f $AGENDA ] then echo “Você não digitou um arquivo válido” exit -1 f ● Ou podemos por a condição de testar o arquivo, no else do if anterior: AGENDA=$1 if [ $# -ne 1 ] then echo “Você deve chamar o script assim:” echo “$0 arquivo_de_agenda” exit -1 else if [ ! -f $AGENDA ] then echo “Você não digitou um arquivo válido” exit -1 f f ● Voltando agora para a implementação da opção de busca na agenda: case $opcao in 1) read $busca echo “Digite o nome ou parte do nome” grep $busca $AGENDA ;; ● E na opção de incluir um novo nome, vamos precisar do operador de redirecionamento “>>” case $opcao in (...) 2) echo “Digite a linha a incluir:” echo “exemplo: Manoel Joaquim \(85\) 3443-3443” read nova_linha echo $nova_linha >> $AGENDA ;; Arquivo: /tmp/agenda.sh Página 1 de 1 AGENDA=$1 if [ $# -ne 1 ] then echo “Você deve chamar o script assim:” echo “$0 arquivo_de_agenda” exit -1 else if [ ! -f $AGENDA ] then echo “Você não digitou um arquivo válido” exit -1 fi fi echo "Bem vindo à Agenda" echo "Digite a opção desejada:" echo " 1 - Procurar um telefone" echo " 2 - Adicionar um telefone" read opcao case $opcao in 2) echo “Digite a linha a incluir:” echo “exemplo: Manoel Joaquim \(85\) 3443-3443” read nova_linha echo $nova_linha >> $AGENDA ;; esac 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 1/7 Programação para Servidores Aula 04: Comandos 1 - Comandos Internos INTRODUÇÃO Esta é a primeira de uma série de 3 aulas sobre comandos shell. Nesta, vamos tratar dos comandos existentes dentro do próprio bash. Vamos estudar uma série de comandos que nos permitem interagir com o sistema. Teremos a oportunidade de perceber que alguns comandos possuem relativa complexidade. A solução é testá-los diretamente no terminal para, em seguida, incorporá-los em scripts com a certeza de seu pleno funcionamento em ações repetitivas. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 2/7 OBJETIVOS Identi�car e utilizar os comandos internos de um shell; Explicar o desenvolvimento de scripts mais e�cientes utilizando-se os comandos para escrever scripts shell. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 3/7 COMANDOS Fonte da Imagem: O domínio dos comandos de um sistema é indispensável para escrever scripts e�cazes. Um comando interno (ou builtin) é um comando contido dentro do shell. Comandos são construídos internamente ao shell por razões de desempenho ou por necessidades especí�cas de acesso direto à informações internas ao shell. HELP E MAN A maior parte dos comandos possui quali�cadores, isto é, partículas que rede�nem a execução default do comando. E cada comando possui detalhes especí�cos. Para facilitar podemos usar o help (glossário) ou o man (glossário) para buscar as possibilidades de um comando. Vamos tomar como exemplo o comando ls, que lista os diretórios e arquivos. O complemento - - help exibe todas as opções do comando. Assim, o comando: Teste esta possibilidade para todos os comandos desta e da próxima aula. COMANDOS DE ENTRADA/SAÍDA O comando echo imprime na saída padrão uma expressão ou variável. No item anterior discutimos sobre o - - help, mas, neste caso, comandar echo - -help exibe o texto – help. Para este caso use man echo. O echo utilizado pelo interpretador de comandos é um comando interno. Não confunda com o programa /bin/echo que tem comportamento similar. Para cada comando uma boa medida é aproveitar e construir um script com os comandos. O mesmo script pode conter vários comandos. Vamos lá? Construindo o script aula4.sh. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 4/7 O comando printf é uma melhoria do comando echo, fornecendo uma saída formatada. Sua sintaxe é: printf formato parâmetros O formato segue o padrão do comando printf da linguagem C. Lê um valor a partir de STDIN(por padrão o teclado) e o armazena em uma variável. Complemente aula4.sh com: COMANDOS DO SISTEMA DE ARQUIVOS Exemplo: Sintaxe: cp origem destino Exemplo: Cabe aqui a observação de que no Linux um arquivo não necessita de uma extensão. Nesse caso, a cópia de “named.conf” será salva com nome “teste”. Ambos, origem e destino, continuam sendo arquivos texto. Exemplo: Teste as possibilidades como, por exemplo, em: As opções podem ser combinadas como: COMANDOS QUE ATUAM SOBRE VARIÁVEIS COMANDOS QUE AFETAM O COMPORTAMENTO DO SCRIPT COMANDOS PARA CONTROLE DE JOBS VAMOS EXERCITAR UM POUCO Primeiro vamos construir um script com erro. Lembra da aula em que falamos de loop in�nito? Crie um script aula4.sh com o conteúdo: Abra 3 terminais. Sim, é possível. Tanto na interface grá�ca, com janelas paralelas, quanto com terminais acessados com CTRL+ALT+F3 (ou as outras telas Fx, normalmente com F1 ou F7 você retorna à interface grá�ca). No primeiro terminal, execute o programa in�nito. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 5/7 No segundo terminal digite ps ou top. Com top, encontramos aula4.sh rodando com PID (glossário) 2713. Para usar o ps seria necessário detalhar a busca, pois são exibidos todos os processos. Por exemplo: Em qualquer caso, seria encontrado o mesmo PID. No terceiro terminal você vai “derrubar” esse processo com: Provavelmente �caram muitas dúvidas, mas estes assuntos (ps, top, grep ) ainda serão tratados nas aulas seguintes. OUTROS COMANDOS ATIVIDADE Copie cada arquivo com extensão .conf em /etc/ para /home/teste. Renomeie cada arquivo de forma que o novo nome do arquivo se inicie por um número inteiro sequencial. Você pode realizar esta tarefa na linha de comando para cada arquivo ou fazer um script combinando os comandos para realizar esta tarefa. EXERCÍCIOS 1. Num script, às vezes, solicitamos que o usuário digite uma senha. Por segurança, seria interessante que os caracteres não fossem exibidos na tela. Qual o comando mais adequado para realizar esta tarefa? a) echo “digite a senha”; read senha b) read -p "digite a senha: " -d'?' senha c) echo “digite a senha”; read $senha d) echo “digite a senha”; read –s "senha" e) read -p "digite a senha: " -n'?' senha Justi�cativa 2. Para listar todos os arquivos com extensão .conf existente em /etc e suas propriedades o comando mais adequado é: a) ls *.conf b) ls –ax /etc/conf* c) ls –i /etc/.conf d) ls –l /etc/conf e) ls –la /etc/*.conf Justi�cativa 3. Qual o comando para renomear o arquivo script1.sh para old-script1.sh. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 6/7 a) rename script1.sh old-script1.sh b) mv script1.sh old-script1.sh c) ren script1.sh old-script1.sh d) rename old-script1.sh script1.sh e) mv old-script1.sh script1.sh Justi�cativa 4. O script abaixo contém um erro que o faz permanecer em loop in�nito. Qual o código que corrige o erro na linha indicada? a) x=x+y b) y=x+1 c) y=y+1 d) x+y=0 e) x+=1 Justi�cativa 5. O comando ps –ax | grep aula4.sh: a) Localiza as referências à execução de aula4.sh. b) Exclui o arquivo aula4.sh. c) Exclui o processo de execução de aula4.sh. d) Localiza todos os processos exceto aula4.sh. e) Interrompe o processo de aula4.sh Justi�cativa 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 7/7 Glossário MAN Man comando – exibe detalhes da sintaxe do comando. HELP Comando -- help – exibe a sintaxe simpli�cada de um comando. PID PID é a sigla para Process IDenti�cator (número identi�cador de processo). 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 1/12 Programação para Servidores Aula 5 - Comandos 2 - Comandos externos INTRODUÇÃO Nesta aula, vamos trabalhar com aplicativos externos combinados com diretivas do shell. Será possível perceber que é possível criar uma gama in�nita de scripts com diversas �nalidades para facilitar as tarefas de gerenciamento de um servidor Linux. Vamos lá, mãos à obra. OBJETIVOS 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 2/12 Identi�car os comandos externos de um shell; Desenvolver scripts mais e�cientes utilizando comandos e estruturas de controle mais complexas. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 3/12 A possibilidade de utilização de comandos e aplicativos do sistema operacional tornam scripts do shell mais poderosos. Tal poder vem da união dos comandos do sistema e diretivas do shell com construções simples de programação. Veremos, a seguir, alguns desses comandos. Comando básico para listar o conteúdo de um diretório. Veja alguns parâmetros: Exibe o conteúdo de um arquivo texto. Envia o conteúdo do arquivo para a saída padrão (por padrão o monitor). O parâmetro -n faz com que as linhas do arquivo sejam numeradas. Com cat –help é possível encontrar alguns complementos interessantes. Para quem desenvolve scripts, o comando cat –n arquivo é especialmente útil pois exibe o número das linhas do arquivo e muitos erros de sintaxe exibem mensagens de erro com referência ao número da linha. Veja os exemplos: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 4/12 Similar ao cat, porém as linhas do arquivo são mostradas da última para a primeira. Envia o conteúdo do arquivo para a saída padrão (por padrão o monitor), mas mostra as linhas de trás para frente. A ordem das linhas é mantida, porém são mostrados do último ao primeiro caractere da linha. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 5/12 Cópia de arquivos. Alguns parâmetros: Alguns parâmetros: Exemplo: Cabe aqui a observação de que no Linux um arquivo não necessita de uma extensão. Nesse caso, a cópia de “named.conf” será salva com nome “teste”. Ambos, origem e destino, continuam sendo arquivos texto. Move arquivos. Também utilizado para renomear. Alguns parâmetros: Exemplo: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 6/12 Remove (deleta) arquivos. Alguns parâmetros: Remove diretórios vazios. Cria diretório. Muda os atributos de arquivos e diretórios. Permissões de acesso protegem o sistema de arquivos do acesso indevido de pessoas ou programas não autorizados. Para saber mais sobre isso, leia Direitos de Acesso (glossário). Cria um link semelhante a um atalho do Windows. No Shell, podemos ter dois tipos de links: Link simbólico e Hard Link. Ambos funcionam como atalhos no Windows, a diferença é que um Link Simbólico �ca quebrado quando o arquivo referenciado é movido. Com Hard Link, o Link se mantém mesmo quando o arquivo é movido. Exemplo: Para criar um link simbólico use a opção –s: date Mostra a data e a hora do sistema. Também é utilizado para acertar a data/hora. time Mostra estatísticas de utilização de tempo do processo executado como parâmetro. at Programa um aplicativo para executar automaticamente em determinada data/hora. sleep Suspende a execução por uma dada quantidade de segundos. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 7/12 cal Mostra um calendário. hwclock, clock Consulta ou acerta a hora no relógio do hardware. Estudaremos esses comandos em detalhes nas aulas 8, 9 e 10. Mostra um arquivo em ordem alfabética.Remove linhas duplicadas de um arquivo ordenado. Envia as primeiras linhas de um arquivo para a saída padrão. Envia as últimas linhas de um arquivo para a saída padrão. Quando utilizado com o parâmetro –ƒ, o comando continua mostrando novas linhas que são adicionadas ao arquivo (útil para monitorar arquivos de log). Conta a quantidade de linhas, palavras e caracteres em um arquivo. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 8/12 Nesse exemplo, o arquivo possui 83 linhas, 185 palavras e 1571 caracteres. Exibe conteúdo de um arquivo numerando suas linhas. Tem função semelhante a cat –n arquivo. Observe, abaixo, os comandos para arquivamento: su Executa um programa como um usuário substituto ou inicia um shell como outro usuário. free Mostra o total de memória RAM e swap utilizada pelo sistema. du Mostra o total de espaço em disco utilizado (recursivamente) por arquivos e/ou diretórios. df Mostra a utilização dos discos/partições. dmesg Mostra todas as mensagens emitidas durante o processo de boot do sistema. uptime Mostra por quanto tempo o sistema está em execução. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 9/12 uname Exibe informações sobre o sistema. Vamos lá, teste cada um destes comandos. ATIVIDADE Desenvolva um Script que: Liste os arquivos de /etc; Exiba a quantidade de memória; Exiba a ocupação dos discos. Resposta Correta 1. O comando que exibe a quantidade de memória RAM e de Swap existente e disponível é: df du dmesg free Su Justi�cativa 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 10/12 2. O comando que exibe a ocupação do disco é: df du dmesg free Su Justi�cativa 3. O comando que exibe a versão do kernel da estação é: ver -ax sys -t uname -a kernel -al type -x Justi�cativa 4. O comando “wc arquivo” gerou a resposta: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 11/12 Essa resposta signi�ca que: O arquivo possui 83.187,1590 Bytes. O arquivo está em execução com PID 83 187 1590. O arquivo possui 83 linhas, 187 palavras e 1590 caracteres. O diretório possui 83 diretórios, 187 arquivos e ocupa 1590 KBytes. O arquivo é um arquivo executável. Justi�cativa 5. O comando “nl arquivo” equivale a: Essa resposta signi�ca que: tail –f arquivo ls –la arquivo mv arquivo uname arquivo cat –n arquivo Justi�cativa 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 12/12 Glossário 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 1/10 Programação para Servidores Aula 6 - Comandos 3 - Substituição, redirecionamento e manipulação de strings INTRODUÇÃO Nesta última aula sobre comandos do sistema, vamos abordar alguns recursos muito interessantes como a substituição, que se refere à possibilidade de aglutinar comandos complexos sob uma variável. Estudaremos também redirecionamentos, que são a possibilidade de enviar a saída de um comando como entrada de outro comando e veremos ainda como manipular strings. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 2/10 OBJETIVOS Descrever comandos externos e a captura da sua saída padrão; Examinar o redirecionamento das entradas e saídas de programas; Demonstrar a ligação entre saída e entrada de processos; Explicar a manipulação de strings através do shell. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 3/10 SUBSTITUIÇÃO DE COMANDOS A substituição de comandos é utilizada para reatribuir a saída de um comando (ou de múltiplos comandos). A saída do comando pode ser: A forma tradicional de se utilizar substituição de comandos é executar o comando entre crases (`...`). Veja este código, por exemplo: Ele coloca na variável lista o conteúdo do diretório "/etc". A substituição de comandos pode gerar mais de um argumento. Por exemplo: Quando a substituição de comandos ocorre entre crases, os caracteres newline são preservados. Caso contrário, eles são removidos. Vamos exercitar com o trecho de código abaixo: Crie um script aula6-1.sh para testar algumas substituições. Vamos lá, teste esse conteúdo. No exemplo abaixo, foi inserida uma linha para exibir o código fonte do próprio script antes de sua execução: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 4/10 Ficou um pouco complicado para ler a saída. Vamos, então, testar posicionando aspas duplas nas variáveis para organizar as saídas. Agora, a saída parece mais organizada, mas ocupa várias telas. Caso esse conteúdo necessite ser estudado com mais detalhes, seria interessante que estivesse em um arquivo. E esse é justamente um dos temas desta aula. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 5/10 REDIRECIONAMENTO Para todo processo existem sempre 3 arquivos abertos por padrão: Esses e quaisquer outros arquivos abertos podem ser redirecionados. Redirecionamento signi�ca capturar a saída de um arquivo, comando, programa, script ou até mesmo um bloco de código em um script e o enviar como entrada para outro arquivo, comando, programa ou script. Cada arquivo aberto recebe um descritor de arquivo. Os descritores de arquivo para stdin, stdout e stderr são 0, 1 e 2, respectivamente. Vamos testar esses redirecionamentos. Crie o script aula6-2.sh e vamos em frente. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 6/10 Primeiramente, observe que os arquivos script.err e script.log são criados automaticamente. Para testar o resultado: Veri�que ainda que na linha de comando é possível concatenar comandos separados por “;”. AGORA VAI UM DESAFIO: Altere aula6-2 sh para que os arquivos sejam “limpos” antes de uma nova execução. Podemos ter inúmeras soluções. Tente realizá-las e somente depois olhe a resposta. Resposta Correta PIPE O pipe ( | ) é um mecanismo especial de redirecionamento utilizado para conectar a saída padrão de um processo à entrada padrão de outro processo. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 7/10 Veja o código abaixo, por exemplo: Reúne todos os arquivos com extensão .sh ordenando suas linhas (sort) e retirando as duplicadas (uniq). O processo que se encontra à esquerda do pipe tem sua saída padrão redirecionada automaticamente para a entrada padrão do processo que se encontra à direita do pipe. Esse comando acima, teoricamente, não faz sentido. Misturar e ordenar o conteúdo de arquivos pode criar uma imensa confusão. Fonte da Imagem: LINE ICONS / Shuttertock Suponha que poderíamos ter um diretório com diversos arquivos. Em cada um desses arquivos, há uma listagem de alunos em uma disciplina. Desejamos obter uma listagem ordenada de todos os alunos estudando em qualquer disciplina. Para montar essa lista, seria simples copiar e colar em uma planilha e editar até obter o resultado, não é mesmo? Ok! E se você tivesse que realizar essa tarefa para 1500 turmas? Não subestime a capacidade do Shell, a resposta seria imediata com pouco uso de processamento e armazenamento nos servidores. ATIVIDADE Vamos supor que alguém tenha uma dúvida sobre a sintaxe de criação de um site virtual no Apache. Você se lembra que a palavra chave é “localhost”.O caminho parece ser buscando no arquivo principal de con�guração do Apache. Localize, então, dentro de /etc/httpd/conf/httpd.conf, as linhas onde aparece a expressão Virtualhost. Você tem duas opções: abrir o arquivo de cerca de 1000 linhas e ler cada uma ou usar os recursos facilitadores do shell. Vamos lá! Mostre como fazer o trabalho de forma facilitada. Resposta Correta 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 8/10 EXERCÍCIOS 1. O diretório /home/aula contém 3 arquivos: arq1.sh, arq2.sh e arq3.sh. O trecho de script abaixo exibe: arq1.sh arq2.sh arq3.sh arq1.sh arq2.sh arq3.sh $lista ls/home/aula Nenhuma saída Justi�cativa 2. O diretório /home/aula contém apenas o arquivo arq1.sh. O comando KAT não existe. Ao executar o trecho de script abaixo, qual será o conteúdo de arquivo-erro? arq1.sh bash: KAT: comando não encontrado arq1.sh bash: KAT: comando não encontrado Arquivo-erro Arquivo vazio Justi�cativa 3. O arquivo nomes.txt contém diversos nomes de alunos. Desejamos ordenar esses nomes e salvar nova listagem em nomes_ordenados.txt. Qual o comando para realizar essa tarefa? sort nomes.txt nomes_ordenados.txt uniq nomes.txt nomes_ordenados.txt sort < nomes.txt > nomes_ordenados.txt uniq > nomes.txt > nomes_ordenados.txt 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 9/10 sort >> nomes.txt >> nomes ordenados.txt Justi�cativa 4. Observe o código: Agora, analise o trecho de script abaixo e marque a opção que apresenta seu retorno. str="Joao aprendeu shell script com facilidade" echo "${str:14:5}" Aprendeu shell scrip Aprendeu Shell script Nenhuma resposta Shell Justi�cativa 5. O diretório /home/alunos possui diversos arquivos .txt com listas de nomes de alunos. Qual o comando que lê os nomes em todos os arquivos, os ordena, elimina os nomes duplicados e os salva em resultado.txt? cat > /home/alunos/*.txt > sort > uniq > resultado.txt ls /home/alunos/*.txt | sort | uniq > resultado.txt cat /home/alunos/*.txt | sort | uniq > resultado.txt sort /home/alunos/*.txt >> uniq >> resultado.txt uniq /home/alunos/*.txt | sort > resultado.txt Justi�cativa 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 10/10 Glossário 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 1/5 Programação para Servidores Aula 7 - Scripts com Janelas INTRODUÇÃO Para melhorar a aparência de scripts e facilitar a interação com os usuários, pode-se utilizar caixas de diálogo que desenham janelas na tela similares as do modo grá�co, com botões, entradas para texto e menu. Essas caixas são utilizadas para compor interfaces amigáveis com o usuário, para que ele responda perguntas ou escolha opções. O dialog é um executável e recebe todos os parâmetros via linha de comando, então ele geralmente é usado dentro de um script. Veremos aqui algumas tarefas comuns feitas com o dialog, como: escolher uma opção em um menu, escolher um arquivo, uma data ou digitar frases ou senhas. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 2/5 OBJETIVOS Desenvolver scripts com interfaces mais amigáveis; Explicar a restrição à entrada de dados dos usuários de scripts. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 3/5 DIALOG Fonte da Imagem: alexmillos / Shuttertock Com o dialog é possível fazer shell scripts que se parecem com programas grá�cos, em que o usuário vê apenas telas e navega entre elas apertando botões. Utilizando esse conceito de telas, é possível amarrar o usuário ao programa, lhe apresentando as opções disponíveis, sem que ele precise ter acesso direto à linha de comando. CAIXAS DE DIÁLOGO As caixas de diálogo são chamadas por intermédio do comando dialog, que terá seu comportamento determinado por seus parâmetros. Por exemplo, o comando: Esse comando mostra uma janela com o texto “Um texto simples de aviso.” de tamanho 5 linhas por 32 colunas no centro da tela, e um botão “Aceitar”. Apesar de estar em modo texto, a interface interage com o mouse. Os parâmetros dependerão do tipo da caixa de diálogo, mas quatro deles são obrigatórios: Opcionalmente, pode-se utilizar a opção “--title”, que exibe um título na caixa de diálogo. ATIVIDADE Para praticar os conceitos estudados construa um script de inclusão de usuário utilizando uma janela, onde sejam digitados nome e senha do novo usuário. Resposta Correta 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 4/5 Glossário YESNO1.SH BOX-RESPOSTA.SH OPÇÃO "--STDOUT" Exemplo: Tente alterar o script acima para que, após digitar o nome na inputbox, o dado seja exibido numa msgbox. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 5/5 Dica: reaproveite o arquivo box-resposta.sh. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 1/7 Programação para Servidores Aula 8 - Programação avançada 1 – Funções INTRODUÇÃO Nesta aula, vamos estudar as funções. Por vezes, encontramos abordagens que acabam gerando dúvidas. No nosso estudo, vamos demonstrar que as funções nos permitem otimizar partes repetitivas nos códigos. Quando trabalhamos com shell script, basicamente agregamos uma sequência de comandos para tarefas variadas. Nesse mesmo enfoque, dentro de um script, temos diversas ações que se repetem. Para que não precisemos reescrever o mesmo código diversas vezes, usamos as funções. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 2/7 Aqui, veremos ainda que cada parte do kernel, quando “ligado”, ocupa um espaço de memória e passa a ser controlado pelo SO. Os scripts bash possuem funcionalidades que permitem o gerenciamento de processos e a execução paralela de tarefas. Nos nossos exercícios, os efeitos do processamento paralelo serão tímidos, mas, em estações com elevado nível de processamento, o paralelismo (pipeline) é bastante desejável. OBJETIVOS Identi�car a sintaxe de funções em shell script; Explicar o procedimento de passagem de parâmetros e código de retorno; Reconhecer o escopo de uma variável em uma função. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 3/7 FUNÇÕES Uma função é um bloco de código que implementa um conjunto de operações para desempenhar uma tarefa especí�ca. Tal função pode, então, ser chamada a partir de múltiplos lugares de dentro do programa principal ou de outras funções. Ela deve ser de�nida entes de ser utilizada. Isso pode ser feito no início do script ou em um arquivo separado e incluído no programa com o comando "." (ponto). A sintaxe para a de�nição de uma função é: Por exemplo, o trecho de código: Note que esse exemplo exibe duas características: Chamada e execução de funções; e Uma função chamada de dentro de outra. VAMOS PRATICAR! Tente montar o script funcao1.sh com a função acima. Resposta Correta ARGUMENTOS E STATUS DE SAÍDA Funções podem processar argumentos passados durante sua chamada. Assim como scripts, elas recebem argumentos através das variáveis $1, $2, $3 etc. O exemplo abaixo é de uma função que utiliza parâmetros: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 4/7 As funções enxergam somente os parâmetros passados a elas,
Compartilhar