Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
24/09/2013 1 Linguagem de Programação de Scripts Bash Script Linguagem de Programação de Scripts Em sistemas operacionais, costuma-se chamar de “shell” todo o ambiente utilizado para interação do usuário com o computador, podendo ser esse ambiente textual ou gráfico. Com essa linguagem, podemos executar um comando de listagem do conteúdo de um diretório, por exemplo, ou combinar diversos desses comandos num arquivo para execução conjunta. Desta forma um arquivo contendo um conjunto de comandos que serão executados (interpretados) por um interpretador pode ser chamado de script. As linguagens utilizadas para escrever scripts de shell são chamadas de linguagens de shell scripting. Iremos estudar uma destas linguagens em especial: o Bash Script. Linguagem de Programação de Scripts Introdução ao Bash O bash (Bourne Again Shell) é hoje o shell em modo texto mais utilizado em sistemas Linux. Atualmente, a grande maioria dos cursos de Linux abordam, em algum nível, a utilização do bash. O interpretador bash define uma linguagem de script bastante poderosa, chamada de Bash Script. O Estudo do Bash Script envolve o conhecimento dos comandos e procedimentos de operação do interpretador bash. Como praticamente todos os sistemas Unix suportam o bash, é possível utilizar o Bash Script não apenas para a administração de redes em geral, mas também como solução de problemas específicos desses sistemas. Linguagem de Programação de Scripts Iniciando no Bash Script Para executar scripts escritos nessa linguagem, podemos utilizar duas estratégias distintas. Para começar, iniciaremos na primeira estratégia de execução, digite no editor de texto “vi” a seguinte instrução: echo “Esse é o meu primeiro script em Bash Script.” Apos escrever essa instrução, salve o arquivo como seu primeiro nome takeda.sh . A extensão de arquivos não e obrigatória em sistemas Linux, porem, quando utilizadas, ajudam na classificação de arquivos. Assim, no caso dos scripts bash, mantenha sempre a extensão “.sh” 24/09/2013 2 Linguagem de Programação de Scripts Apos ter salvo o arquivo, altere sua permissão para que este arquivo possa ser executado. Uma forma de fornecer essa permissão ao arquivo de forma fácil e executando o comando “ chmod + x takeda.sh “. Com a permissão de execução devidamente estabelecida, podemos executar o script da seguinte forma (desde que o diretório corrente seja o diretório que tenha o arquivo) ./takeda.sh Com a execução desse script, será apresentado na tela a seguinte informação textual: Esse é o meu primeiro script em Bash Script. Linguagem de Programação de Scripts A segunda forma de executar esse script não necessita que a permissão do arquivo seja alterada. Para a execução, basta digitar o comando conforme apresentado a seguir: # bash aluno.sh ou # sh aluno.sh Uma característica interessante do Bash Script é que esta linguagem é case sensitive. Outra característica , presente também em praticamente todas as linguagens de script é que não é necessário qualquer marcação o especial para indicar o final de uma instrução, ela é indicada no final de cada linha. A identacao (diferença entre as margens) no Bash Script é utilizada apenas por questões de clareza, sem significado logico. Quando estamos executando scripts no bash, podemos indicar, na primeira linha do script, qual o interpretador devera ser utilizado. Caso não se indique nenhum interpretador, o padrão o bash será utilizado. Linguagem de Programação de Scripts Comentários #!/bin/bash Quando escrevemos programas de computador, geralmente utilizamos esclarecimentos textuais, ou comentários, para aumentar a clareza do código. Para criar comentários em script bash, deve-se utilizar o símbolo tralha (#), também chamado de cerquilha ou sharp, antes do texto que corresponde ao comentário. #!/bin/bash #Esse é um script de exemplo ls /home > temp.txt cat temp.txt Linguagem de Programação de Scripts Interação entre Comandos Comandos podem ser utilizados de forma coordenada para desempenhar determinada tarefa. Utilizando o operador pipe (|), a saída de um comando pode ser utilizada como entrada em outro comando. #ls /home | sort –r > arquivo.txt #cat arquivo.txt Para que a saída de um comando seja redirecionada a um arquivo, deve-se utilizar o sinal de maior (>) ou maior-maior (>>). A diferença entre esses sinais é que o sinal de > apaga o conteúdo já existente, enquanto o >> não remove o conteúdo anterior, apenas adiciona a saída do comando ao final do arquivo. 24/09/2013 3 Linguagem de Programação de Scripts Variáveis Variáveis são posições de memoria utilizadas para o armazenamento de dados. Cada variável possui obrigatoriamente um nome, um tipo e um tamanho, com significados dependentes da linguagem de programação utilizada. No caso do Bash Script, o tipo e o tamanho, por exemplo, não são rigidamente estabelecidos, podendo variar durante e execução do script. O bash reconhece uma variável quando o nome é antecedido pelo símbolo cifrão ($), ou seja, a diferença entre redes e $redes é que a primeira representa um valor textual, enquanto a segunda é uma variável. Contudo, quando a variável for receber algum valor, não se deve utilizar o símbolo $. Linguagem de Programação de Scripts Variáveis nome=Silva idade=38 echo ‘Nome: ’ $nome echo ‘Idade: ’ $idade Saída => Nome: Silva Idade: 38 Obs.: não pode haver espaços entre os símbolos de atribuição (=) e os elementos envolvidos na atribuição de valores. Linguagem de Programação de Scripts Expressões Textuais em Bash Script Quando consideramos expressões textuais, ha diferentes representações que podem ser utilizadas em Bash Script, dependendo do objetivo pretendido. (“”) – Todos os valores contidos entre as aspas duplas serão interpretados; (‘’) – é valido apenas o valor literal; (``) – Considera a execução de qualquer comando inserido entre as crases, retornando a saída desse comando ao script; Linguagem de Programação de Scripts Nome=Silva idade=28 echo ‘Nome: $nome’ echo “Idade: $idade” data=`date +%d/%m/%Y`eA hora=`date +%T` echo “A data atual é $data” echo “A hora atual é $hora” Saída Nome: $nome Idade: 28 A data atual é 20/11/2009 A hora atual é 09:21:47 24/09/2013 4 Linguagem de Programação de Scripts Variáveis Especiais A tabela resume as principais variáveis. Variaveis Utilizacao $0 Nome do Script $1 - $9 Parâmetro passado pela linha de comando $# Número de parametros passados $? Valor de retorno do último comando $$ Número do processo sendo executado (PID) Linguagem de Programação de Scripts echo “O nome do processo é $0 e tem PID $$” echo “Numero de parâmetros digitados: $#” Além dessas variáveis especiais, podemos utilizar também variáveis de ambiente, que podem ser acessadas por qualquer processo. echo “Diretório atual: $PWD” echo “Usuário atual: $USER” Saída: Diretório atual: /home/silva Usuário atual: silva Linguagem de Programação de Scripts Tipagem Dinâmica Quando uma linguagem de programação define que suas variáveis devem possuir um tipo bem definido (e consequentemente um tamanho bem definido), geralmente especificado na declaração da variável e que não mude durante a execução do programa, dizemos que a linguagem é fortemente tipada. Exemplos de linguagens fortemente tipadas são Java, C, C++ e Pascal. Por outro lado, ha linguagens de programação que não definem que suas variáveis tenham um tipo fixo, estabelecido na declaração da variável. Para essas linguagens, o tipo da variável é definida dinamicamente, de acordo com o contexto em que a variável for utilizada. As linguagens de programação que possuem essa característica são chamadas de linguagens fracamente tipadas (ou de tipagem dinâmica). Algumas linguagens com tipagem dinâmica bastante utilizadas são o Bash Script, Python, Perl e PHP. Linguagem de Programação de Scripts Estrutura de Controle Embora as linguagens de programação modernas tendam a facilitar cada vez mais a escrita de código, camuflando operações mais próximas as linguagens de baixo nível, podemos encontrar ainda a presença de estruturas de controle da mesma forma que ocorria em linguagens de programação de vinte ou trinta anos atrás. As marcações utilizadas para controlar a execução dos programas são chamadas de estruturas de controle. As estruturas de controle são divididas em três grupos: Sequência; Seleção; Repetição. 24/09/2013 5 Linguagem de Programação de Scripts Estrutura de Sequência A estrutura de sequência é implícita nos programas e indica que as instruções são executadas uma após a outra, seguindo uma sequência Linguagem de Programação de Scripts Estrutura de Seleção Os Operadores Operadores Aritméticos: + Soma - Subtracção * Multiplicação / Divisão ** Exponencial % Módulo(Resto da Divisão) Para avaliar uma expressão aritmética utiliza-se a função let como no exemplo em baixo Linguagem de Programação de Scripts Estrutura de Seleção Os Operadores #!/bin/bash x=1 let x=x*2+3 #output5 echo "x=$x" let x-- #output4 echo "x=$x" y=2 let x=x + 3**y #output 13 echo “x=$x” Linguagem de Programação de Scripts Estrutura de Seleção A estrutura de seleção básica do Bash Script é o “if”. Essa estrutura é utilizada para avaliar determinada condição e, a partir do resultado, executar ou não um conjunto de uma ou mais instruções. A sintaxe dos blocos de seleção if é apresentada a seguir: if [ condição1 ] then comandos no caso da condição1 ser verdadeira elif [ condição2 ] then comandos no caso da condição2 ser verdadeira else comandos no caso de nenhuma das condições ser verdadeira fi 24/09/2013 6 Linguagem de Programação de Scripts Estrutura de Seleção echo “Digite um número: “ #O comando read lê uma entrada do usuário read entrada numero=20 If [ $entrada –lt $numero ] then echo “O número digitado é menor que $numero” fi echo “Programa Encerrado Linguagem de Programação de Scripts Estrutura de Seleção A opção “-lt” (less than) faz uma comparação entre dois argumentos. Para o bash Script, diferenças mesmo de um espaço em branco podem alterar o significado de uma instrução. Assim: ✔if [ $entrada –lt $numero ] ≠ ✖if [$entrada –lt $numero] Linguagem de Programação de Scripts Estrutura de Seleção A tabela apresenta alguns dos principais símbolos utilizados para formar expressões condicionais, como aquelas usadas em instruções if. Linguagem de Programação de Scripts Estrutura de Seleção Deve-se ter cuidado com a utilização dos operadores condicionais. Por exemplo, a diferença entre os operadores condicionais "–eq” e “=“ é que o primeiro deve ser utilizado para comparações numéricas, enquanto que o operador “=“deve ser utilizado para comparações entre expressões textuais. O mesmo é valido para os operadores “–ne” e “!=“. 1. var=5 var=5 2. if [ $var –eq 5 ] if [ “$var” = “5”] 3. then then 4. echo “5 = 5” echo “5 = 5” 5. fi fi 24/09/2013 7 Linguagem de Programação de Scripts Estrutura de Seleção Além de definir instruções que serão executadas quando uma condição for valida como verdadeira, podemos definir instruções que serão executadas quando uma condição for avaliada como falsa. Para isso, utilizamos a cláusula “else”. 1. echo “Digite um número: “ 2. read entrada 3. numero=20 4. If [ $entrada –lt $numero ] 5. then 6. echo “O número digitado é menor que $numero .” 7. else 8. echo “O número digitado é maior ou igual que $numero .” 9. fi Linguagem de Programação de Scripts Estrutura de Seleção Além da clausula ïf” e de suas opções de utilização, podemos usar também a clausula “case”. A sintaxe do bloco de seleção “case”é apresentado a seguir: 1. case variável in 2. <opcao1>) # uma ou mais instruções 3. ;; 4. <opcao2>) # uma ou mais instruções 5. ;; 6. *) # instruções default 7. ;; 8. esac Linguagem de Programação de Scripts Estrutura de Seleção A clausula “case” avalia o valor da variável e compara com as opções presentes no bloco de seleção, de cima para baixo. Quando a primeira opção que corresponda ao valor da variável for encontrada, as instruções indicadas serão executadas e o bloco “case” como um todo será encerrado. A clausula default, indicada pela opção *, será executada apenas se nenhuma das opções presentes no bloco “case” for selecionada. Esta clausula é opcional. Linguagem de Programação de Scripts Estrutura de Seleção 1. echo “Escolha uma das opções referentes ao Brasil:” 2. echo “(1) Língua” 3. echo “(2) Moeda” 4. echo “(3) Capital” 5. echo “(4) Continente” 6. 7. read entrada 8. 9. case $entrada in (inicia a instrução case) 10. 1) echo “A Língua oficial do Brasil é o Português” 11. ;; (indica que não ha mais instruções referentes a esta opção, no caso a opção "1)”) 12. 2) echo “A moeda do Brasil é o Real" 13. ;; 14. 3) echo “A capital do Brasil é Brasília” 15. ;; 16. 4) echo “O Brasil esta na América do Sul” 17. ;; 18. *) echo “Opção invalida" (opção default, caso não digite uma opção valida) 19. ;; 20. esac (O Bloco “case” é encerrado com a clausula “esac”) 24/09/2013 8 Linguagem de Programação de Scripts Estrutura de Seleção Outra estrutura de seleção ‘e o “select”. Essa estrutura cria um menu automático a partir de uma lista de valores, por um comando ou arquivo contendo os valores para o processamento. select <variável> in <lista-de-opções> do # uma ou mais opções done Ex: Por comando Ex: Por arquivo entrada 1. select arq in `ls` 1. echo “Escolha uma opcao:” 2. do 2. select numero in `cat entrada` 3. cat $arq 3. do 4. done 4. echo “Resultado: “ $[$numero * 2] 5. done Linguagem de Programação de Scripts Estrutura de Repetição Bash Script disponibiliza um conjunto de estruturas de repetição de diferentes sintaxes e com funcionalidades variadas. A seguir serão apresentadas as formas mais comuns de utilização dessas estruturas. A clausula “while” ‘e utilizada para repetir um bloco de instruções enquanto uma dada condição for avaliada como verdadeira. Essa ‘e uma estrutura básica de repetição, disponível em praticamente todas as linguagens de programação imperativas. Linguagem de Programação de Scripts Estrutura de Repetição A sintaxe da clausula “while”: While [condição] do # uma ou mais instruções; done Linguagem de Programação de Scripts Estrutura de Repetição A estrutura “while”, inicialmente, avalia a condição de controle. Essa avaliação ‘e repetida sempre antes que as instruções definidas nos blocos sejam executadas. Em qualquer um dessas avaliações, o bloco de repetição será encerrado se a condição for avaliada como falsa. contador=0 while [ $contador –lt 10 ] do echo “*” contador=$(($contador+1)) done 24/09/2013 9 Linguagem de Programação de Scripts Estrutura de Repetição Deve-se utilizar uma notação especial para operações aritméticas. Considerando o exemplo anterior, devemos utilizar uma das seguintes opções: a) contador=$[$contador+1]; b) contador=$[contador+1]; c) contador=$(($contador+1)); d) let “contador+=1” Linguagem de Programação de Scripts Estrutura de Repetição O exemplo seguir apresenta uma outra utilização da estrutura de repetição “while”. A execução desse script será encerrada quando o usuário digitar a palavra “sair” (em letras minúsculas). echo “Digite \”sair\” para encerrar” read entrada while [ $entrada != sair”] do echo “Você deve digitar \”sair\” para encerrar.” read entrada done echo “Programa encerrado.” Linguagem de Programação de Scripts Estrutura de Repetição O caractere barra invertida (\) para exibir na tela as aspas duplas. Esse caractere deve ser usado para que o bash não confunda as aspas de visualização com as aspas utilizadas para delimitar as expressões textuais. A clausula “until” funciona de forma semelhante ao “while”, com a diferença de que o until testa se a condição é falsa para continuar o laço. echo “Digite \”sair\”para encerrar” read entrada until [ $entrada = “sair” ] do echo “Você deve digitar \”sair\”para encerrar.” read entrada done echo “Programa encerrado.” Linguagem de Programação de Scripts Estrutura de Repetição Há ainda outra forma de construção de estruturas de repetição, através da cláusula “for”. Existem diversas formas de utilização de estruturas “for” em Bash Script. Uma dessas formas, que é semelhante às estruturas de linguagens como Java e C, é apresentada a seguir: for [variável] in [valor] do #uma ou mais instruções done 24/09/2013 10 Linguagem de Programação de Scripts Estrutura de Repetição Um bloco de repetição for é organizado em três partes, como exemplo apresentado a seguir: for i in $(seq 10) do echo “ Esse é o número: $i” done for x in * do mv "$x" "${x}.bak"; done Linguagem de Programação de Scripts Break e Continue Para oferecer um controle adicional a blocos de repetição, as cláusulas “break”e “continue” podem ser utilizadas. A instrução continue permite que a interação atual de um laço seja encerrada imediatamente após a execução dessa instrução. Já a interação break é utilizada para encerrar por completo as estruturas de laço que contenham essa instrução. Linguagem de Programação de Scripts Break e Continue for cont in $(seq 10) Resp: 1; 4; 9; 16; 36 do if [ $cont –eq 7 ] then break fi if [ $cont –eq 5 ] then continue fi echo $[ $count ** 2 ] contador=$(($contador+1)) done Linguagem de Programação de Scripts Execução em Foreground e Background Quando executamos um programa em foreground, o shell fica esperando ele terminar para depois habilitar novamente entradas pela linha de comando. Com a execução em background, não temos esse “problema”. Para executar um programa em background, basta colocar, ao final da chamada do programa shell, o simbolo “&”. 24/09/2013 11 Linguagem de Programação de Scripts Definindo Funções Bash Script permite que sejam acrescentadas funções aos scripts para facilitar as tarefas de programação. Funções são blocos de código que podem ser utilizados em qualquer parte do scripts, quantas vezes for necessário. O código é escrito apenas uma vez, sendo repetida apenas a chamada da função. A sintaxe para definição de funções é apresentada a seguir: nome_da_funcao ( ) { #uma ou mais instrução } Linguagem de Programação de Scripts Definindo Funções Para executar a função, basta usar o nome da função como se fosse a execução de um comando de bash. O exemplo apresenta a utilização de funções. Apenas como lembrete, a definição da função deve sempre aparecer antes de qualquer chamada a essa função. Linguagem de Programação de Scripts Definindo Funções quadrado ( ) { echo “Digite um número:” read entrada echo “$entrada elevado ao quadrado é $((entrada **2))" } echo “Programa Iniciado.” #chamando a função quadrado #nova chamada quadrado Linguagem de Programação de Scripts Definindo Funções As variáveis definidas dentro das funções possuem escopo global e não são removidas após a finalização da função. Uma alternativa para definir as variáveis das funções com escopo local é adicionar a clausula “local”, seguida da variável, no inicio da função. quadrado ( ) { local entrada echo “Digite um número:” read entrada echo “$entrada elevado ao quadrado é $((entrada **2))" } echo “Programa Iniciado.” #chamando a função quadrado 24/09/2013 12 Linguagem de Programação de Scripts Agendando a Execução de Scripts Os scripts do sistema ou mesmo os scripts criados pelos usuário podem ser agendados para execuções futuras, de forma programada e automática. Em sistemas Linux, uma estratégia para execução programada de scripts é feita através do daemon cron. Ha diversas formas de configurar esse daemon, dependendo da distribuição do sistema linux sendo utilizado. O agendamento é um recurso poderoso para a administração de redes, uma vez que permite a execução sistemática de scripts.