Escolar Documentos
Profissional Documentos
Cultura Documentos
Informática de
Gestão/ TeSP de
Tecnologias e
S i s t e ma s O p e r a t i v o s
Programação de
Sistemas de
Informação
Tópicos abordados:
– Programação em BASH
– Exercícios
1 Introdução
#!/bin/bash
2 Interpretador bash
# Isto é um comentário
echo “olá” # Isto também é um comentário
Figura 4 – Comentários
Com exceção da primeira linha (que indica qual o interpretador do shell script),
todos os caracteres à direita do carater # são considerados comentários.
É possível executar vários comandos numa linha desde que estejam separados
pelo carater ;.
echo “olá”; echo “aqui”
Figura 5 – Separador de comandos
2.3 Variáveis
<nome_variável>=<valor>
Não são permitidos espaços, nem antes, nem depois do caracter =. Apenas
caracteres alfanuméricos podem ser utilizados como identificadores válidos de
variáveis. Os valores do tipo string que contenham espaços devem ser especificados
entre “”.
#!/bin/bash
var1=123
var2=ola
var_3=”olá mundo”
Figura 6 – Declaração explícita de variáveis
#!/bin/bash
frase="O meu nome no sistema é $USER"
# A linha seguinte irá escrever para o ecrã a string:
# O meu nome no sistema é so_xyy
echo $frase
Figura 9 – Declaração de variável interpretada
Por outro lado deve-se usar plicas para atribuir literalmente um valor à variável,
como se mostra a seguir:
#!/bin/bash
frase=’O meu nome no sistema é $USER’
# A linha seguinte irá escrever para o ecrã a string:
# O meu nome no sistema é $USER
echo $frase
Figura 10 – Declaração de variável literal
2.4.1 Aritméticos
+- Soma
-- Subtração
*- Multiplicação
/- Divisão
** - Exponencial
% - Módulo
Para avaliar uma expressão aritmética utiliza-se a função let. De seguida são
mostrados alguns exemplos.
#!/bin/bash
a=123
let a=$a+1
let “a=$a+1” # faz o mesmo que a linha anterior
let “a = $a + 1 ” # faz o mesmo que a linha anterior
let b=2**4
echo $a # a = 126
echo $b # b = 16
Figura 12 – Avaliação de expressões aritméticas
2.4.2 Lógicos
&& - E
|| - Ou
2.4.5 Ficheiros
-e - Devolve verdade caso o ficheiro exista
-f - Devolve verdade se o ficheiro é regular e não uma diretoria
-s - Devolve verdade se o ficheiro existe e o tamanho é maior que 0
-d - Devolve verdade caso se trate de uma diretoria
... (consultar a página de manual para obter a lista dos restantes operadores)
2.5.1 If
if [ condição ]
then
comandos no caso da condição1 ser verdadeira
elif [ condição2 ]
then
comandos no caso da condição2 ser verdadeira
then
elif [ condição3 ]
then
comandos no caso da condição3 ser verdadeira
else
comandos no caso de nenhuma das condições ser verdadeira
fi
Nota: a condição do if deverá ser precedida e seguida de um espaço.
2.5.2 Exemplos
#!/bin/bash
if [ 1 –eq 2 ]
then
echo 'As variáveis são iguais.'
else
echo 'As variáveis são diferentes.'
fi
Figura 13 – Estrutura if
2.5.3 Case
A estrutura case é similar à estrutura switch da linguagem C.
case variável in
const1) comando1; comando2 ;;
const2) comando3; comando4 ;;
*) comando_default ;;
esac
2.5.4 Exemplo
#!/bin/bash
echo "Digite um comando (who, list, ou cal)"
read comando
case "$comando" in
who)
echo "A executar who..."
who
;;
list)
echo "A executar ls..."
ls
;;
cal)
echo "A executar cal..."
cal
;;
*)
echo "Comando inválido. As escolhas possíveis
são:who,list,ou cal"
;;
esac
Figura 15 – Estrutura case
2.6.1 For
for variavel in lista_valores
do
comando1
comando2
done
2.6.2 Exemplos
#!/bin/bash
lista=`ls –a`
for i in $lista
do
echo $i
done
Figura 17 – Demonstração da estrutura for
#!/bin/bash
for i in *.c; do
cp $i ~/backup/
done
Figura 18 – Demonstração da estrutura for
2.6.3 While
while [ condição ]
do
commandos;
done
#!/bin/bash
var=3
while [ $var -ge 1 ]; do
ls
let "var=$var-1"
done
Figura 20 – Demonstração da estrutura while
Se precisarmos executar num shell script outro script externo para que esta faça
alguma função, sem que ter de reescrever todo o código, apenas necessitamos de incluir
o seguinte comando no shell script:
source <nome_ficheiro_bash_shell_script>
4 Variáveis especiais
#!/bin/bash
# chamar a função da seguinte forma: ./nome_script 1 2 3 4 5
echo "Numero de parametros: $#"
cont=0
while [ $# -ne 0 ]; do
echo $1
shift
done
Figura 23 – Utilização da função shift
Funções são blocos de comandos que podem ser definidos para uso posterior em
qualquer parte do código. Praticamente todas as linguagens usam funções que ajudam a
organizar o código. Vejamos a sintaxe de uma função:
Nome_funcao() {
comando1
comando2
...
}
Tal como é possível passar parâmetros para um shell script também é possível
passar parâmetros para uma função. O modo como se obtêm esses parâmetros e o modo
como são passados é idêntico. O exemplo seguinte mostra as várias fases do uso de
parâmetros: a camada da função com a passagem dos parâmetros, a obtenção dos
6 Exemplo final
#!/bin/bash
Principal()
{
opcao=0
while [ $opcao -ne 9 ]
do
echo ""
echo ""
echo ""
echo "Exemplo em bash shell"
echo "------------------------------------------"
echo "Opcoes:"
echo
echo "1. Backup dos ficheiros .c"
echo "2. Listagem da pasta ~/backup"
echo "9. Sair"
echo
echo -n "Qual a opcao desejada? "
read opcao
case $opcao in
1) Backup ;;
2) Listar ;;
9) exit ;;
*) "Opcao desconhecida." ; echo ;;
esac
done
}
Backup()
{
if [ ! -d ~/backup/ ]
then
mkdir ~/backup
echo "Directoria de backup criada"
fi
Listar()
{
if [ -d ~/backup/ ]
then
echo '... a listar directoria: ~/backup'
lista=`ls -a ~backup/*.c`
for i in $lista
do
echo $i
done
echo "--OK--"
else
echo 'A directoria ~/backup nao existe'
fi
}
Principal
Figura 27 – Exemplo final
7 Exercícios