Shell Script
PARTE 2
Funções
Assim como em qualquer "linguagem de programação" o shell script proporciona a utilização de
funções.
Sintaxe:
nome_funcao ()
{
funcao_2;;
}
nome_funcao_2 ()
{
acao
}
nome_funcao
Funções
Onde:
nome_funcao – Funcão criada.
acao – Ação a ser tomada.
nome_funcao_2;; - Chamada da função nome_funcao_2.
nome_funcao – Função que dará inico ao shell script.
Será criado um shell script para no qual é possível escolher se será feito uma tabuada do 2 ou do
3 sendo que cada uma é feita por uma função.
Funções
#!/bin/bash
principal() {
escolha=-1
while [ $escolha -ne 0 ];
do
echo "Escolha uma opção"
echo "1- Fazer tabuada do 2";
echo "2- Fazer tabuada do 3";
echo "0- Sair";
echo -n ":";
read escolha;
if [ "$escolha" -eq "1" ];
then
gerarTabuada2
elif [ "$escolha" -eq "2" ];
then
gerarTabuada3
fi
done
}
Funções
gerarTabuada3() {
for i in {1..10};
do
echo "$i*3="$i*3
done
}
gerarTabuada2() {
for i in {1..10};
do
echo "$i*2="$i*2
done
}
principal
PASSANDO ARGUMENTOS PARA AS
FUNÇÕES
Como, depois de declaradas, podemos usar as funções assim como usamos os comandos,
também podemos passar argumentos para funções, assim como fazemos com os comandos.
Os argumentos são armazenados da mesma forma que os parâmetros, quando usamos
comandos. Ou seja, o nome do script é armazenado na variável '$0', o 1º argumento fica na
variável '$1', o 2º na '$2', ... O número total de argumentos na '$#' e todos são armazenados na
'$@'.
PASSANDO ARGUMENTOS PARA AS
FUNÇÕES
#!/bin/sh
args()
{
echo "Nome: $0"
echo "Total: $#"
echo "Primeiro: $1"
echo "Segundo: $2"
echo "Terceiro: $3"
echo
echo "Todos: $@"
echo
}
args arg1 arg2 arg3
CÓDIGOS DE RETORNO (RETURN CODES)
Como vimos, todo e qualquer comando do Unix retorna algum código. '0' caso tenha dado tudo
certo e outro número para mostrar que houve um erro, onde números diferentes são usados
para indicar erros diferentes.
O bash armazena o código de retorno do último comando na variável '$?'.
Por exemplo, digite no terminal:
$ comando_inexistente
$ echo $?
Que exibirá o erro, pro caso do comando não existir.
Agora, teste um comando que funcione bem:
$ ls
$ echo $?
RETURN
Como estes códigos de saída são amplamente usados no *Unix, é uma boa prática fazer o
mesmo em seus scripts. Usa-se o comando return [|inteiro], ao invés de exit [|inteiro]nas
funções de seu script, pois queremos somente que a função termine, não o script, e retornando
um inteiro para o script, fazendo uma comunicação deste com a função.
Se não usarmos um return em uma função, o '$?' armazenará o código de retorno do último
comando da função.
Podemos escrever só 'return' sem retornarmos explicitamente um número. Quando a função
encontra 'return' ela termina imediatamente (não executa o que vem em seguida) e '$?'
armazenará o código de retorno do último comando antes de encontrar da função chegar em
'return'.
Ou retornamos algo específico de nosso propósito. Dentro de condicionais, por exemplo:
RETURN
if(tudo certo)
return 2112
else
return 666
VARIÁVEIS GLOBAIS
* Aqui vai uma pequena e importante ressalva, para você que já vem de outra linguagem de
programação:
Por padrão, as variáveis em Shell são globais. Se desejar ter uma variável local em suas funções,
as declare como 'local'. Exemplo:
local VAR='Existem variáveis locais!
Sem isso, as variáveis que você cria dentro das função estarão disponíveis por todo o script, ou
caso já existam serão sobrescritas. Portanto, cuidado, dê nomes únicos para as suas variáveis ou
adicione o local na frente.
Variáveis em vetores
O shell permite o uso de variáveis em forma de array. Ou seja, vários valores podem ser
guardados em uma variável seguindo a ordem de uma indexação. Assim como não é necessário
declarar o tipo de variável no início do programa, também não é preciso declarar que uma
variável será usada como vetor
Um array é criado automaticamente se for atribuído um valor em uma variável da seguinte
forma: nomevar[indice]=valor, onde índice é um número maior ou igual a zero. Exemplo:
camada[0]=Física
camada[1]=Enlace
camada[2]=Redes
Variáveis em vetores
Outra forma de se atribuir valores em array é:
nomevar=(valor1, valor2, ..., valorn).
Variáveis do sistema
Existem algumas variáveis que são próprias do sistema e outras que são inicializadas
diretamente pelo shell. Algumas dessas variáveis, denominadas variáveis do shell são explicadas
abaixo:
◦ HOME - Contém o diretório home do usuário.
◦ LOGNAME - Contém o nome do usuário atual.
◦ IFS - Contém o separador de campos ou argumento (Internal Field Separator ). Geralmente, o IFS é um
espaço, tab, ou nova linha. Mas é possível mudar para outro tipo de separador.
◦ PATH - Armazena uma lista de diretórios onde o shell procurará pelo comando digitado.
◦ PWD - Contém o diretório corrente.
Variáveis do sistema
◦ PS1 - Esta é denominada Primary Prompting String.
◦ Ou seja, ela é a string que está no prompt que vemos no shell. Geralmente a string utilizada é:
• \s O nome do shell.
• \u Nome do usuário que está usando o shell.
• \h O hostname
• \w Contém o nome do diretório corrente desde a raiz.
• \d Mostra a data no formato: dia_da_semana mês dia.
• \nnn Mostra o caracter correspondente em números na base octal.
• \t Mostra a hora atual no formato de 24 horas, HH:MM:SS.
• \T Mostra a hora atual no formato de 12 horas, HH:MM:SS
Variáveis do sistema
PS2 - Esta é denominada Secondary Prompting String. Ela armazena a string do prompt
secundário. O padrão usado é o caracter >. Mas pode ser mudado para os caracteres mostrados
acima.
MAIL - É o nome do arquivo onde ficam guardados os e-mails.
COLUMNS - Contém o número de colunas da tela do terminal.
LINES - Contém o número de linhas da tela do terminal.
Download

Oficina Shell Script – Parte 2