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.