• Nenhum resultado encontrado

Prog Servidores Unidade III parte 3

N/A
N/A
Protected

Academic year: 2019

Share "Prog Servidores Unidade III parte 3"

Copied!
46
0
0

Texto

(1)

Unidade III

Programação Script

Parte 3

Slides 07

(2)

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)

(3)

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.

(4)

É 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:

(5)

Argumentos posicionais e variáveis especiais

As variáveis especiais $

@

, $

#

, $

*

$

0

, $

1

,...,${

99

} fazem

referência aos argumentos posicionais passados ao script.

Variável

Descrição do Argumento

$

$

Identificação do processo do script (PID).

$

#

Quantidade de argumentos passados para o script.

$

@

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.

(6)

Exemplo:

(7)

Exemplo da diferença entre $@ e $*

Crie o script abaixo:

(8)

Exemplo da diferença entre $@ e $* (continuação)

Crie 2 arquivos com nomes com espaços:

Rode o script assim:

ou dessa outra forma:

(9)
(10)
(11)
(12)

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.

(13)

Exemplo:

(14)

O comando

test

É um comando interno do bash que retorna um valor

verdadeiro (0) ou falso (1), dependendo do resultado da

expressão avaliada.

(15)

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.

(16)

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>

]]

(17)

O comando

if

Diferente das outras linguagens, o

if

do shell não testa

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

$?

.

(18)

Sintaxe:

Onde <condição> é uma expressão relacional ou lógica entre

colchetes.

Obedecer à forma

x

[

x

condição

x

]

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 ...

(19)

Estrutura condicional simples

if ... then

if

[

condição

]

then

(20)

Estrutura condicional composta

if ... then ... else

if

[

condição

]

then

comandos (se condição verdadeira)

else

(21)

Estrutura condicional composta aninhada

if [ condição1 ]

then

if

[ condição2 ]

then

comandos

else

comandos

fi

else

if

[ condição3 ]

then

comandos

else

(22)

Aninhamento com

elif

(senão se

el

se

if

)

if [ condição1 ]

then

comandos

elif

[ condição2 ]

then

comandos

elif

[ condição3 ]

then

comandos

else

(23)

Operadores relacionais

Operador

Descrição em inglês

Descrição em

português

-eq

Equal

Igual

-ne

Not equal

Diferente

-gt

Greater than

Maior do que

-ge

Greater than or equal

Maior ou igual

-lt

Less than

Menor do que

-le

Less than or equal

Menor ou igual

(24)

Operadores relacionais

Operador

Descrição em português

=

Igual

!=

Diferente

>

Maior do que

<

Menor do que

-z

String nula (sem conteúdo)

-n

String não nula

(25)

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

]

(26)

Exemplos de comparação entre inteiros:

if [ 3 -eq 5 ]

if [ “$num1”

-

ne “$num2” ]

(27)

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)

(28)

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)

(29)

Operadores de teste de arquivo

Usados em testes com arquivos ou diretórios:

Operador

Descrição em português

-d

É um diretório

-f

É um arquivo normal (não é diretório)

-e

O arquivo existe

-s

É um arquivo não vazio

-r

É um arquivo somente leitura (read-only)

-x

É um arquivo executável

-w

É um arquivo gravável

(30)

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)

(31)

Operadores lógicos

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)

(32)

Exemplos de testes com operadores lógicos

if [ -f $arquivo

o

d $arquivo ] (uma

condição

)

if [ -f $arquivo ] || [ -d $arquivo ] (duas

condições

)

(33)

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.

(34)

No comando case, podemos usar os caracteres abaixo, a

fim de criar padrões de cadeias de caracteres.

(35)

Exemplo 1:

case $opcao in

1) echo

“Você escolheu a

opcao

1”

;;

2) echo

“Você escolheu a

opcao

2”

;;

(36)
(37)
(38)
(39)

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.

;

&

(40)

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

(41)

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 é um caractere imprimível

m é um carac. alfa/numérico

m é um carac. alfabético

m é uma letra minúscula

Executando o exemplo 5 passando / como parâmetro :

(42)

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

.

Lembrando:

&&

“e”

||

“ou”

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

(43)
(44)
(45)

Exemplo 3:

Este script equivale ao exemplo anterior, sem a execução

de teste condicional, apenas de comando

(46)

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.

Referências

Documentos relacionados

BORYOKUDAN nem com os seus membros, e declarar que não possui nenhum antecedente criminal em relação à sociedade. O valor da RENDA MÉDIA MENSAL ※7 do interessado deverá ser acima

3 O presente artigo tem como objetivo expor as melhorias nas praticas e ferramentas de recrutamento e seleção, visando explorar o capital intelectual para

Essa nova compreensão surge quando o aluno percebe a visualização de uma nova representação da reta numérica (incluindo os números negativos) [fig. Nessa nova

Trata-se de um estudo descritivo com abordagem quantitativa O local escolhido como cenário para a pesquisa foi a Faculdade de Enfermagem Nova Esperança de Mossoró – FACENE/RN

Entre o roseiral e o parque, num lugar sombrio, solitário e verde, havia um pequeno jardim rodeado de árvores altíssimas que o cobriam com os seus ramos.. No

vassourar – varrer... Que género de texto acabaste de ler? Justifica a tua resposta. Transcreve alguns versos que ilustrem a azáfama da vassoura. A dona da casa está descontente com

Pode-se afirmar que os objetivos propostos foram alcançados, conseguiu-se com este apresentar o quanto a angústia se faz e é presente na vida do homem, como a

A Lista de Fauna Ameaçada de Extinção e os Entraves para a Inclusão de Espécies – o Exemplo dos Peixes Troglóbios Brasileiros.. The List of Endangered Fauna and Impediments