37
Programação de Scripts Prof. Kleber Rezende [email protected] Conceitos Básicos de Scripts

Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Programação de Scripts

Prof. Kleber Rezende

[email protected]

Conceitos Básicos de Scripts

Page 2: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

O que é o shell?

O Shell pode ser definido como o interpretador

de instruções e comandos.

Quando o usuário ou sistema executa qualquer

comando, o Shell é responsável pela correta

'interpretação' deste.

O "prompt" do Shell é a linha de comando do

Unix e Linux, que recebe os comandos digitados

pelo usuário para serem executados.

2 Conceitos Básicos de Scripts

Page 3: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

O que é o shell?

Além dos comandos básicos para navegar entre

diretórios e manipular arquivos, ele também

possui todas as estruturas de uma linguagem de

programação, como IF, FOR, WHILE, variáveis e

funções. Com isso, também é possível usar o shell

para fazer scripts e automatizar tarefas.

Este será o nosso foco: scripts em shell.

3 Conceitos Básicos de Scripts

Page 4: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Shell Script Um script é um arquivo que guarda vários

comandos e pode ser executado sempre que preciso. Os comandos de um script são os mesmos que se digita no prompt.

Por exemplo, se de tempos em tempos você quiser saber informações do sistema como horário, ocupação do disco e os usuários que estão logados, é preciso digitar três comandos:

4 Conceitos Básicos de Scripts

Page 5: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

5 Conceitos Básicos de Scripts

prompt# date

prompt # df

prompt # w

• É melhor fazer um script chamado "sistema" e colocar estes comandos nele. O conteúdo do arquivo "sistema" seria o seguinte:

#!/bin/bash

date

df

w

Page 6: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Conceitos Básicos de Scripts 6

E para chamar este script, basta agora executar apenas um comando:

prompt # ./sistema

Isso é um shell script. Um arquivo de texto que contém comandos do sistema e pode ser executado pelo usuário.

IMPORTANTE: Antes de executar um script, você deve torná-lo um arquivo executável

Page 7: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Melhorando o código do script Com o tempo, o script vai crescer, mais

comandos vão ser adicionados e quanto maior, mais difícil encontrar o ponto certo onde fazer a alteração ou corrigir algum erro.

Para poupar horas de estresse, e facilitar as manutenções futuras, é preciso deixar o código visualmente mais agradável e espaçado, e colocar comentários esclarecedores.

7 Conceitos Básicos de Scripts

Page 8: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Melhorando o código do script

#!/bin/bash

# sistema - Script que mostra informações sobre o sistema

# Autor: Fulano da Silva

# O date mostra a data e a hora correntes

echo "Data e Horário:"

date

echo

# O df mostra as partições e quanto cada uma ocupa no disco

echo "Uso do disco:"

df

echo

# O w mostra os usuários que estão conectados nesta máquina

echo "Usuários conectados:"

w

8 Conceitos Básicos de Scripts

Page 9: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Melhorando o código do script Para adicionar um comentário, basta iniciar a

linha com um "#" e escrever o texto do comentário em seguida.

Estas linhas são ignoradas pelo shell durante a execução.

O cabeçalho com informações sobre o script e seu autor também é importante para ter-se uma visão geral do que o script faz, sem precisar analisar todo o código.

9 Conceitos Básicos de Scripts

Page 10: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Variáveis As variáveis são a base de qualquer script. É

dentro delas que os dados obtidos durante a execução do script serão armazenados.

Para definir uma variável, basta usar o sinal de igual "=" e para ver seu valor, usa-se o comando echo.

Conceitos Básicos de Scripts 10

Page 11: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Variáveis

prompt$ VARIAVEL="um dois tres"

prompt$ echo $VARIAVEL

um dois tres

prompt$ echo $VARIAVEL $VARIAVEL

um dois tres um dois tres

prompt$

11 Conceitos Básicos de Scripts

Page 12: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Variáveis Não podem haver espaços ao redor do igual "="

Também é possível armazenar a saída de um comando dentro de uma variável.

Ao invés de aspas, o comando deve ser colocado entre "$(...)";

E finalmente, o comando "unset" apaga uma variável.

12 Conceitos Básicos de Scripts

Page 13: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Variáveis

prompt$ HOJE=$(date)

prompt$ echo "Hoje é: $HOJE"

Hoje é: Sáb Abr 24 18:40:00 BRT 2004

prompt$ unset HOJE

prompt$ echo $HOJE

prompt$

13 Conceitos Básicos de Scripts

Page 14: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Expressões aritméticas O shell também sabe fazer contas. A construção

usada para indicar uma expressão aritmética é "$((...))", com dois parênteses.

14 Conceitos Básicos de Scripts

prompt$ echo $((2*3))

6

prompt$ echo $((2*3-2/2+3))

8

prompt$ NUM=44

prompt$ echo $((NUM*2))

88

prompt$ NUM=$((NUM+1))

prompt$ echo $NUM

45

Page 15: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Expressões aritméticas Há também a opção do comando let, também

para número inteiros:

Sintaxe: let <expressão>

15 Conceitos Básicos de Scripts

Page 16: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Expressões aritméticas #!/bin/bash

echo “Entre com dois números:”

read A

read B

let C=0

let C=A+B

echo "Resultado:"

echo $C

16 Conceitos Básicos de Scripts

Page 17: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Expressões aritméticas Para calcular expressões com números reais,

devemos usar a sintaxe mostrada no exemplo abaixo:

Onde “scale=2” significa duas casas após a vírgula.

O pipe bc “|bc” significa que estamos usando a calculadora do sistema.

17 Conceitos Básicos de Scripts

A="5.5"

B="2.2"

S=$(echo "scale=2;$A/$B"|bc)

Page 18: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Exercícios 1. Faça um script que leia nome, curso, disciplina e as três notas de um

aluno. Na saída será exibido o nome e a média do aluno.

2. Faça um script que leia um valor em centímetros e mostre o mesmo valor em metros.

3. Faça um script que mostre a eficiência de um jogador em um treino de pênaltis. Para isso leia quantas tentativas e quantos acertos.

4. Faça um script que leia o nome, cargo e salário de um funcionário. Dê um aumento de 34.5% a este funcionário. Mostre o salário antigo, o atual e a diferença entre eles.

5. Faça um script que calcule o tempo gasto em uma viagem de carro. Para isso entre com a distância que será percorrida e a velocidade média em que o carro correrá.

6. Faça um script que calcule o consumo de combustível de um carro em uma viagem. Para isso entre com a autonomia do carro (km/litro) e a distância que será percorrida.

Conceitos Básicos de Scripts 18

Page 19: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Recebimento de opções e parâmetros Assim como os comandos do sistema que

possuem opções e parâmetros, os scripts também podem ser preparados para receber dados via linha de comando.

Dentro do script, algumas variáveis especiais são definidas automaticamente, por exemplo: "$1" contém o primeiro argumento recebido na linha de comando, "$2" o segundo, e assim por diante.

19 Conceitos Básicos de Scripts

Page 20: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Recebimento de opções e parâmetros O acesso é direto, basta referenciar a variável que

o valor já estará definido.

Assim é possível criar scripts que tenham opções como --help, --version e outras.

Além disso, existem outras variáveis especiais:

20 Conceitos Básicos de Scripts

Variável Especial Significado

$# Mostra a quantidade de parâmetros que foram passados para o

script.

$* Lista todos os parâmetros passados para o script

$? Mostra se o último comando foi executado com sucesso ou não,

sendo que retorna o valor 0 como sucesso e o valor 1 como erro.

Page 21: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Recebimento de opções e parâmetros

#!/bin/bash

# argumentos - mostra o valor das variáveis

especiais

echo "O nome deste script é: $0"

echo "Recebidos $# argumentos: $*"

echo "O primeiro argumento recebido foi: $1"

echo "O segundo argumento recebido foi: $2"

21 Conceitos Básicos de Scripts

Page 22: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Recebimento de opções e parâmetros

prompt$ ./argumentos um dois três

O nome deste script é: ./argumentos

Recebidos 3 argumentos: um dois três

O primeiro argumento recebido foi: um

O segundo argumento recebido foi: dois

22 Conceitos Básicos de Scripts

Page 23: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

O comando test O canivete suíço dos comandos do shell é o

"test", que consegue fazer vários tipos de testes em números, textos e arquivos. Ele possui várias opções para indicar que tipo de teste será feito, algumas delas:

23 Conceitos Básicos de Scripts

Page 24: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

O comando test

24 Conceitos Básicos de Scripts

Testes em variáveis Testes em arquivos

-lt Núm. é menor que (LessThan) -e Arquivo existe

-gt Núm. é maior que (GreaterThan) -d É um diretório

-le Núm. é menor ou igual (LessEqual) -f É um arquivo normal

-ge Núm. é maior ou igual (GreaterEqual) -r Arquivo tem permissão de leitura

-eq Núm. é igual (EQual) -s O tamanho do arquivo é maior que zero

-ne Núm. é diferente (NotEqual) -w Arquivo tem permissão de escrita

= String é igual -nt O arquivo é mais recente (NewerThan)

!= String é diferente -ot O arquivo é mais antigo (OlderThan)

-n String é não nula -ef O arquivo é o mesmo (EqualFile)

-z String é nula -a E lógico (AND)

-o OU lógico (OR)

Page 25: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

O comando test

prompt$ ./testa-arquivos

Digite o arquivo: /naoexiste

O arquivo '/naoexiste' não foi encontrado

prompt$ ./testa-arquivos

Digite o arquivo: /tmp

/tmp é um diretório

prompt$ ./testa-arquivos

Digite o arquivo: /etc/passwd

/etc/passwd é um arquivo

25 Conceitos Básicos de Scripts

Tente fazer o script "testa-arquivos", que pede ao usuário para digitar um arquivo e testa se este arquivo existe. Se sim, diz se é um arquivo ou um diretório. Exemplo de uso:

Page 26: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

O comando test

prompt$ ./relacao.sh 3 5

3 é menor que 5

prompt$ ./relacao.sh 5 3

5 é maior que 3

prompt$ ./relacao.sh 5 5

5 é igual a 5

prompt$

26 Conceitos Básicos de Scripts

Faça um script que receba dois números como parâmetro e mostre a relação entre eles. Exemplo:

Page 27: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

O comando test

#!/bin/bash

echo "entre com 2 números reais"

read n1

read n2

r=$(echo "$n1 >= $n2" | bc)

echo $r

test "$r" -eq "0" && echo "$n1 < que $n2"

test "$r" -ne "0" && echo "$n1 >= que $n2"

27 Conceitos Básicos de Scripts

Para fazer comparações com números reais o comando test não é recomendado.

Neste caso podemos usar a seguinte estratégia:

Page 28: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

A Estrutura Condicional if

28 Conceitos Básicos de Scripts

Diferente de outras linguagens, o if testa um comando e não uma condição.

Porém como já conhecemos qual o comando do shell que testa condições, é só usá-lo em conjunto com o if.

Por exemplo, para saber se uma variável é maior ou menor do que 10 e mostrar uma mensagem informativa na tela, pode-se fazer assim:

Page 29: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

A Estrutura Condicional if

if test "$VARIAVEL" -gt 10

then

echo "é maior que 10"

else

echo "é menor que 10"

fi

29 Conceitos Básicos de Scripts

Page 30: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

A Estrutura Condicional if

if [ "$VARIAVEL" -gt 10 ]

then

echo "é maior que 10"

else

echo "é menor que 10"

fi

30 Conceitos Básicos de Scripts

Há um atalho para o test , que é o comando [. Ambos são exatamente o mesmo comando, porém usar o [ deixa o if mais parecido com o formato tradicional de outras linguagens:

Obs.: Se usar o [, também é preciso fechá-lo com o ], e sempre

devem ter espaços ao redor.

Page 31: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

A Estrutura Condicional if

if expressão1 && expressão2

then

comandos

else

comandos

fi

31 Conceitos Básicos de Scripts

Você pode utilizar os operadores lógicos && (E) e || (OU) para montar suas expressões lógicas.

if expressão1 || expressão2

then

comandos

else

comandos

fi

Page 32: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

A Estrutura Condicional if

if [ “$1” –gt 10 ] && [ “$1” –lt 70 ]

then

echo “Dentro do intervalo [10..70]”

else

echo “Fora do intervalo [10..70]”

fi

32 Conceitos Básicos de Scripts

Exemplo:

Page 33: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

A Estrutura Condicional if

if expressão1

then

comandos

else if expressão2

then

comandos

fi

fi

33 Conceitos Básicos de Scripts

Você pode ainda utilizar estruturas if aninhadas, lembrando que para cada if deve existir um fi, indicando o fim da estrutura.

if expressão1

then

comandos

elif expressão2

then

comandos

fi

Page 34: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

A Estrutura Condicional if

if [ “$1” –ge 6 ]

then

echo “APROVADO”

else if [ “$1” –ge 3 ]

then

echo “RECUPERAÇÃO”

else

echo “REPROVADO”

fi

fi

34 Conceitos Básicos de Scripts

Exemplo:

Page 35: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Comando Case

case "$variavel" in

texto1) comandos que serão executados;;

texto2) comandos que serão executados;;

texto3) comandos que serão executados;;

esac

35 Conceitos Básicos de Scripts

O comando CASE executa uma ação caso o conteúdo de uma variável seja igual a um determinado valor exato.

Ele é usado da seguinte forma:

Repare que após as listas de comandos a serem executados existem sempre ";;". Isso, mostra ao case, que todos comandos a ser executados já foram executados, sem o ";;" o script simplesmente mostrará erros e não funcionará.

Page 36: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Comando Case

echo "Digite Oi, Tchau, Amor ou Odiar"

read texto

case "$texto" in

Oi)

echo "Oi! Tudo bom?"

;;

Tchau)

echo "Tchau. Até Mais!"

;;

Amor) echo "Eu amo você";;

Odiar) echo "Eu não odeio você";;

*) echo "Você não digitou nenhuma das opções";;

esac

36 Conceitos Básicos de Scripts

Exemplo:

Page 37: Programação de Scripts - intranet.ifs.ifsuldeminas.edu.br · 7 Conceitos Básicos de Scripts . Melhorando o código do script #!/bin/bash # sistema - Script que mostra informações

Comando Case

if [ "$texto" = "Oi" ]

then

echo "Oi! Tudo bom?"

elif [ "$texto" = "Tchau" ]

then

echo "Tchau. Até Mais!"

elif [ "$texto" = "Amor" ]

then

echo "Eu amo você"

elif [ "$texto" = "Odiar" ]

then

echo "Eu não odeio você"

else

echo "Você não digitou nenhuma das opções"

fi

37 Conceitos Básicos de Scripts

Versão usando if