programação de scripts - intranet.ifs.ifsuldeminas.edu.br · 7 conceitos básicos de scripts ....
TRANSCRIPT
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)
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
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
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.
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
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
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
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)
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:
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:
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:
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:
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
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.
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
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:
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
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:
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á.
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:
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