Buscar

Unidade III – Parte 3

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 23 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 23 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 23 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

24/11/2014
1
CCT0042
Programação para Servidores
Programação Script - 03
Adaptado do Prof. Paulo Estevam
Prof. Márcio Rodrigo
Semestre Letivo: 2014.1
pág.
�
Unidade III – Programação Script
◦ 3.16 – Expansão aritmética estilo C/C++
� O duplo parêntesis (( ))
◦ 3.17 – Argumentos de linha de comando
� Argumentos posicionais e variáveis especiais
� Passando argumentos para outro script
� O comando shift
◦ 3.18 – Teste condicional
� O comando test
� Teste com colchetes
◦ 3.19 – Estruturas condicionais de controle de fluxo
� O comando if (se)
� Estrutura condicional simples
� Estrutura condicional composta
� Aninhamento com elif
� Operadores de testes condicionais
� Operadores relacionais
� Operadores de teste de arquivo
� Operadores lógicos
� O comando case (escolha/caso)
� Estrutura condicional implícita
2
24/11/2014
2
pág.
O duplo parênteses (( ))
�
�
�
Similar ao comando let, o ((...)) permite construir uma expansão
aritmética, bem como um teste lógico.
É uma construção e também um mecanismo para permitir o estilo
C/C++ de manipulação de variáveis no Bash.
Exemplos:
Obs.: Tanto (( )) como let retornam um status de saída ($?).
3
pág.
�
�
�
�
É possível passar um ou mais argumentos para um
script.
Os argumentos são passados através da linha de
comando (no momento da sua execução), separados por
um espaço.
São conhecidos como parâmetros ou “argumentos
posicionais”.
Sintaxe:
nome_do_script arg_1 arg_2 ... argu_n
4
24/11/2014
3
Variável DescriçãodoArgumento
$$ Identificação do processo do script(PID).
$# Quantidade de argumentos passados para os cript.
$@ Todos os argumento passados para o script.
$* Todos os argumento passados para o script.
$0 Nome do script.
$1 Primeiro argumento passado para o script.
$2 Segundo argumento passado para o script.
$3,...,${10},... Terceiro argumento passado e assim por diante.
pág.
Argumentos posicionais e variáveis especiais
� As variáveis especiais $@, $#, $* $0, $1,...,${99} fazem
referência aos argumentos posicionais passados ao script.
Obs.: A partir do décimo argumento, a referência deve ser feita utilizando
chaves.
5
pág.
Exemplo:
Criar e testar o script (args) descrito abaixo.
6
24/11/2014
4
pág.
Exemplo da diferença entre $@ e $*
Crie o script abaixo:
file <nome> � este comando exibe informação sobre o tipo de um arquivo.
Se estiver vazio, exibe “empty”. Se for um diretório, exibe “directory”.
7
pág.
Exemplo da diferença entre $@ e $* (continuação)
Crie 2 arquivos com nomes com espaços:
Rode o script assim:
ou dessa outra forma:
Conclusão: O $@ reconhece os dois arquivos passados como
parâmetros.
8
24/11/2014
5
pág.
Exemplo passando argumentos para outro script
Criar e testar os scripts (arg1 e arg2) descritos a seguir:
9
pág.
arg1
10
24/11/2014
6
pág.
arg2
11
pág.
O comando shift
� O shift desloca os argumentos posicionais para a esquerda,
removendo o primeiro da lista.
�
�
�
�
�
Assim, $2 passa a ser $1, $3 passa a ser $2 e assim
sucessivamente.
Automaticamente o valor da variável $# é decrementado.
O comando shift e não afeta parâmetro $0 que contém
sempre o nome do script.
O deslocamento para a esquerda é de uma posição, podendo
ser de mais de uma, se especificado.
Normalmente o comando shift é usado com estruturas de
repetição.
12
24/11/2014
7
pág.
Exemplo:
Crie uma cópia do script args com o nome args2 e altere-a para:
13
pág.
O comando test
� É um comando interno do bash que retorna um valor
verdadeiro (0) ou falso (1), dependendo do resultado da
expressão avaliada.
Não é uma estrutura condicional de controle de fluxo, mas é utilizado na
sua implementação.
14
24/11/2014
8
pág.
�
�
Sintaxe:
test <expressão>
Sintaxes de <expressão>:
operador arg
ou
arg1 operador arg2
Onde:
◦ operador � pode ser um operador de teste de arquivo, relacional,
lógico.
◦ arg � um operando ou expressão.
Exemplo:
15
pág.
�
�
�
�
�
�
�
Teste com colchetes [ ou [ ] ou [[ ]]
O [ é um comando interno considerado como sinônimo para o
comando test. Versões recentes de shells exigem o colchete de
fechamento.
O [ avalia seus argumentos como uma expressão condicional até
encontrar o ].
O duplo [ ] é outra forma variante do comando [ (test).
Os duplos [[ ]] é uma extensão mais versátil do [ ] (test), a fim de
se evitar erros de uso de operadores lógicos, bem como permitir
expansão de expressões regulares, porém não é padrão POSIX.
Exemplo: Os operadores &&, ||, <, e > funcionam dentro de um teste com [[ ]], ao
contrário de [ ].
O Bash considera os [[ ]] como sendo palavras chaves.
Sintaxes:
[ <expressão> ou [ <expressão> ] ou [[ <expressão> ]]
Obs.: Deve-se usar um espaço após e antes do colchete.
16
24/11/2014
9
pág.
O comando if
� das outras linguagens, o if do shell não testaDiferente
condição.
�
�
�
O if verifica se o resultado do estado de saída de um
comando test é verdadeiro (0) ou falso (1).
Portanto, o que o comando if faz é “testar” a variável $?.
Lembre-se que se a execução do último comando qualquer
foi bem sucedida ou se o resultado do comando test ( [ ] )
tiver sido verdadeiro, a variável $? terá valor zero, caso
contrário seu valor será diferente de zero ou 1 (falso).
17
pág.
� Sintaxe:
�
�
�
Onde <condição> é uma expressão relacional ou lógica entre
colchetes.
Obedecer à forma x[xcondiçãox]x, onde x corresponde a um
espaço.
É o colchete [ que invoca o comando test e o colchete ], que
delimita o fim, não é necessário em versões antigas de shells.
if [ scondição ]
then
comandos
fi
ou
if [ condição ] ; then
comandos ...
fi
if test <condição>
then
comandos
fi
ou
if test <condição> ; then
comandos ...
fi
18
24/11/2014
10
pág.
Estrutura condicional simples
� if ... then
if [ condição ]
then
comandos (se condição verdadeira)
fi
19
pág.
Estrutura condicional composta
� if ... then ... else
if [ condição ]
then
comandos (se condição verdadeira)
else
comandos (se condição falsa)
fi
20
24/11/2014
11
pág.
Estrutura condicional composta aninhada
if [ condição1 ]
then
if [ condição2 ]
then
comandos
else
comandos
fi
else
if [ condição3 ]
then
comandos
else
comandos
fi
fi
21
pág.
Aninhamento com elif (senão se � else if )
if [ condição1 ]
then
comandos
elif [ condição2 ]
then
comandos
elif [ condição3 ]
then
comandos
else
comandos
fi
22
24/11/2014
12
Operador Descriçãoeminglês Descriçãoem
português
-eq Equal Igual
-ne Notequal Diferente
-gt Greaterthan Maiordoque
-ge Greaterthanorequal Maiorouigual
-lt Lessthan Menordoque
-le Lessthanorequal Menorouigual
pág.
Operadores relacionais
Utilizado pelo comando test na comparação entre
variáveis ou valores do tipo inteiro:
23
Operador Descriçãoemportuguês
= Igual
!= Diferente
> Maior do que
< Menor do que
-z String nula (sem conteúdo)
-n String não nula
pág.
Operadores relacionais
Utilizado pelo comando test na comparação entre
strings:
24
24/11/2014
13
pág.
Observação:
� Nas expressões de testes dentro dos colchetes, as
variáveis que contém strings com espaços devem
também estar entre aspas.
variavel1=“Este script”
variavel2=“testa strings”
if [ “$variavel1” != “$variavel2” ]
if [ $variavel1 = $variavel2 ]
25
pág.
Exemplos de comparação entre inteiros:
if [ 3 -eq 5 ]
if [ “$num1” -ne “$num2” ]
if [ “$num1” -ge 5 ]
26
24/11/2014
14
pág.
Exemplos de comparação entre strings:if [ “$nome_arq1” = “$nome_arq2” ] (se são iguais)
if [ “$data1” != “$data2” ] (se são diferentes)
if [ -z “$nome_arq1” ] (se é nula)
if [ -n “$nome_arq1” ] (se não é nula)
27
pág.
Exemplos de comparação entre strings:
if [ “$nome_arq1” = “$nome_arq2” ] (se são iguais)
if [ “$data1” != “$data2” ] (se são diferentes)
if [ -z “$nome_arq1” ] (se é nula)
if [ -n “$nome_arq1” ] (se não é nula)
28
24/11/2014
15
pág.
Operadores de teste de arquivo
Usados em testes com arquivos ou diretórios:
Operador Descrição em português
-d
-f
-e
-s
-r
-x
-w
-nt
-ot
-ef
É um diretório
É um arquivo normal (não é diretório)
O arquivo existe
É um arquivo não vazio
É um arquivo somente leitura (read-only)
É um arquivo executável
É um arquivo gravável
É um arquivo mais recente (Newer than)
É um arquivo mais antigo (Older than)
É o mesmo arquivo (Equal file)
29
pág.
Exemplos de testes com arquivos e diretórios:
if [ -s “$arquivo” ] (arquivo não vazio)
if [ -f “$arquivo” ] (é um arquivo normal)
if [ -d “$arquivo” ] (é um diretório)
if [ -w “$arquivo” ] (arq. com permissão gravação)
if [ -r “$arquivo” ] (arquivo read-only)
if [ -x “$arquivo” ] (arquivo executável)
30
24/11/2014
16
OPERADOR DESCRIÇÃO
&& e(para avaliar duas condições)
|| ou(para avaliar duas condições)
-a e(para avaliar uma condição)
-o ou(para avaliar uma condição)
! não(tanto faz)
pág.
Operadores lógicos
Utilizado pelo comando test para combinar expressões
relacionais/lógicas:
31
pág.
Exemplos de testes com operadores lógicos
if [ -f $arquivo –o –d $arquivo ] (uma condição)
if [ -f $arquivo ] || [ -d $arquivo ] (duas condições)
if [ -f $arquivo –a –s $arquivo ]
32
24/11/2014
17
pág.
O comando case
case $variavel in
padrão1) comando
comando;;
padrão2) comando
comando;;
padrãoN) comando
comando;;
*) comando_default
comando_default;;
esac
�
�
É similar ao comando switch da linguagem C , sendo, porém, útil
para o casamento strings ou padrões de cadeias de caracteres, por
intermédio de expressões regulares.
O código é executado até encontrar o terminador “;;”. A ausência
dele causa erro.
33
pág.
� No comando case, podemos usar os caracteres abaixo, a
fim de criar padrões de cadeias de caracteres.
OBS.: Estes recursos serão vistos de forma mais detalhada no slide
sobre EXPRESSÕES REGULARES.
34
24/11/2014
18
pág.
Exemplo 1:
case $opcao in
1) echo “Você escolheu a opcao 1” ;;
2) echo “Você escolheu a opcao 2” ;;
*) echo “Opção inválida!” ;;
esac
35
pág.
Exemplo 2:
36
24/11/2014
19
pág.
Exemplo 3:
37
pág.
Exemplo 4:
38
24/11/2014
20
pág.
� A versão 4.0 do Bash introduziu dois novos terminadores de
bloco no comando case:
◦ ;;&
Se o bloco de comandos for finalizado com este terminador, o
script não sairá do case e continuará testando os próximos
padrões.
◦ ;&
Se o bloco de comandos for finalizado com este terminador, o
script não sairá do case e executará o próximo bloco sem,
sequer, testar o seu padrão.
39
pág.
Exemplo 5:
Advanced Bash-Scripting Guide - Chapter 37. Bash, versions 2,
3, and 4 <http://tldp.org/LDP/abs/html/bashver4.html>
case "$1" in
[[:print:]] ) echo $1 é um caractere imprimível;;&
# O terminador ;;& testará o próximo padrão
[[:alnum:]] ) echo $1 é um carac. alfa/numérico;;&
[[:alpha:]] ) echo $1 é um carac. alfabético ;;&
[[:lower:]] ) echo $1 é uma letra minúscula ;;&
[[:digit:]] ) echo $1 é um caractere numérico ;&
# O terminador ;& executará o próximo bloco...
%%%@@@@@ ) echo "************************" ;;
# ^^^^^^^^ ... mesmo com um padrão maluco.
esac
40
24/11/2014
21
pág.
�
�
Executando o exemplo 5 passando 3 como parâmetro:
3 é um caractere imprimível
3 é um carac. alfa/numérico
3 é um caractere numérico
Executando o exemplo 5 passando m como parâmetro :
m
m
m
m
é
é
é
é
um caractere imprimível
um carac. alfa/numérico
um carac. alfabético
uma letra minúscula
� Executando o exemplo 5 passando / como parâmetro :
/ é um caractere imprimível
41
pág.
Estrutura condicional implícita
� É uma construção, obtida apenas com o uso de comandos ou
testes lógicos, em que se consegue o desvio do fluxo de
execução de comandos sem o uso do if.
&& � “e” || � “ou”�
�
Lembrando:
Sintaxe:
<comandos> && <se_sucesso_execute_esses_comando_tambem>
<comandos> || <mesmo_se_insucesso_execute_esses_tambem>
<teste_condic> && <se_sucesso_execute_esses_comando_tambem>
<teste_condic> || <mesmo_se_insucesso_execute_esses_tambem>
Pode-se usar parênteses ou chaves para agrupar
(<comando>) && (<se_sucesso_execute_esse_comando_tambem>)
(<comando>) || (<mesmo_se_insucesso_execute_esse_tambem)
42
24/11/2014
22
pág.
Exemplo 1:
43
pág.
Exemplo 2:
44
24/11/2014
23
pág.
Exemplo 3:
Este script equivale ao exemplo anterior, sem a execução
de teste condicional, apenas de comando
Fornecendo o mesmo resultado
45
pág.
�
�
Nos exemplos anteriores pudemos observar que o shell não
avalia as duas expressões. O que ocorre é o seguinte:
◦ O shell avalia a primeira expressão;
� Caso o operador seja "E", se der um erro ele não perde
tempo avaliando a segunda expressão;
� Se for operador "OU" o shell só irá avaliar a segunda
expressão em caso de erro na primeira, porque se der
sucesso não haverá motivo para avaliar a segunda.
Lembre-se: ( ) ou { } permite o agrupamento de comandos.
Com os parênteses os comandos são executados por um
subshell. Com as chaves os comandos são executados no
shell corrente, além de exigir o delimitador “;” após o último
comando, bem como espaços antes e depois das chaves.
46

Outros materiais