1 Gestão de Redes Corporativas: Tecnologias e Segurança Administração de Sistemas Operacionais...
Transcript of 1 Gestão de Redes Corporativas: Tecnologias e Segurança Administração de Sistemas Operacionais...
1
Gestão de Redes Corporativas: Gestão de Redes Corporativas: Tecnologias e Segurança Tecnologias e Segurança
Administração de Sistemas Administração de Sistemas OperacionaisOperacionais
Programação ShellProgramação Shell
Vera Schuhmacher – [email protected]
2
Script shell
O programa shell interpreta os comandos que você digita e os traduz para comandos que o kernel compreende.• o shell é uma linguagem de programação completa, possuindo variáveis, construções condicionais, interativas e ambiente adaptável ao usuário.• Os comandos do Shell se comunicam entre si por meio de uma interface simples e coerente chamada pipeline.• O Shell permite que o usuário realize suas atividades sem afetar qualquer outro processo que não lhe pertence. Quando um usuário conecta-se a um sistema Unix, o sistema operacional inicia automaticamente uma cópia do Shell, sob a qual o usuáriopoderá realizar qualquer função disponível.
3
Script shell
Nome Shell Desenvolvido por Onde Comentários
BASH ( Bourne-Again SHell )
Brian Fox and Chet Ramey
Free Software Foundation
Shell mais utilizado nas versões linux, é o shell padrão do Unix. Prompt $
CSH (C SHell) Bill Joy University of California (For BSD)
Sintaxe similar a linguagem C. Traz vantagens adicionais ao Bourne shell como reutilizar e visualizar comandos previamente digitados. Prompt %
KSH (Korn SHell) David Korn AT & T Bell Labs --
TCSH - -- TCSH é compativel com UNIX C shell (CSH
Para verificar shell disponível em sua máquina : $ cat /etc/shells
Para verificar o shell ativo $ echo $SHELL
4
Script shell
Quando Utilizar ?
– procedimentos complexos usando muitas linhas de comando– procedimento do qual todos os usuários poderão beneficiar-se– uma tarefa numa data planejada– integrar informações de vários sistemas existentes
5
Script shell - Shell como linguagem
escrevendo programas em Shell1) digitando os comandos e executando-os interativamente– o prompt normal $ troca para > quando se inicia a digitarcomandos na Shell– a seguir o programa é executado
2) armazenando os comandos em um arquivo e invocando da mesma forma que um programa– usando um editor de textos comum
6
Script shell
Exemplo de programa interativo– determinar todos os arquivos que contém o string POSIX
$ for arquivo in *> do> if grep -l POSIX $arquivo> then> more $arquivo> fi> done
arquivo é uma variável e$arquivo seu conteúdo
grep e more são comandosgrep: pesquisa em um ou mais arquivos por linhas que
casam com uma expressão regular dada ( -l: listar)more: mostra o conteúdo do arquivo, uma tela de cada vez
7
Script shell
Exemplo de shell script-> arquivo chamado primeiro.sh-> .sh sem significado-> # indica comentário-> /bin/sh =shell default-> exit 0 código de retorno, 0 indica sucesso
#!/bin/sh# primeiro.sh# compilar apenas os arqs.# contendo string POSIXfor file in *doif grep -l POSIX $filethenmore $filefidoneexit 0
#!/bin/sh# primeiro0.sh
clearecho “Os arquivos do diretório são:”ls –l|more
8
Script shell
COMO ESCREVER SEU SCRIPT
1. Escolha um editor de textos e inicie sua execução 2. Digitar script3. Salvar4. Acertar permissões de execução para o dono:
chmod u+x nome_scriptPara executar se o PATH for conhecido apenas digite o nome
do script, se não é possível fazê-lo de diferentes maneiras bash nome_scriptsh nome_script./nome_script
9
Script shell
Escreva o seguinte script, salve e execute.Nome do script: espteste
# Script para imprimir informações sobre o usuário logadoclearecho “Ola $USER"echo “Hoje é \c ";dateecho “O numero de usuarios ativos e: \c" ; who | wc -lecho "Calendario"cal 2005exit 0
10
Script shell - Caracteres especiaisAspas duplas “ “ - string– mostra o string e substitui variáveis (se existir)Aspas simples ´ - string– mostra o string e não substitui variáveis (se existir)Crase ` - comando– o resultado do comando é usado em outputBarra Invertida \Transforma caracter especial em caracter normal# – permite a inserção de comentários no script
# testando variaveisset dia = 19echo “ Hoje é dia $dia”resultado = Hoje é dia $diaset maquina = `hostname`echo $resultado $maquina
11
Script shell - Variáveis
Variáveis de ambiente - são variáveis pré-definidas– Todas as variáveis de ambiente são definidas noinício da Sessão do Usuário● Variáveis de ambiente comuns a todos os usuáriossão encontrados no arquivo /etc/profile● Variáveis de ambiente de usuário são encontradosno arquivo ~HOME/.profile● Primeiro é lido o arquivo /etc/profile e depois oarquivo ~HOME/.profile
Digite set para verificar as variáveis de ambiente
exemplos: HOME, PATH, $#, $$
12
Script shell - Manipulando Variáveis
Variáveis locais –atuam somente durante a execução do ShellAtribuição de valor :
Para verificar as variáveis locais digite set
nome=“joao”idade=16meudir=`ls –l`set
13
Script shell - Manipulando Variáveis
Um detalhe importante: NÃO PODE EXISTIR ESPAÇOS ENTRE OS ELEMENTOS DA DECLARAÇÃO/ATRIBUIÇÃO
● Quando a string atribuída a variável possuir espaços, é necessário a utilização de aspas duplas no início e no final da string.● As variáveis são case-sensitive, isto é, existe diferenças entre maiúsculas e minúsculas.
nome=“joao”idade=16meudir=`ls –l`
A=5a=5
14
Script shell - Manipulando Variáveis
Variáveis globais – permanecem ativas durante toda a sessão de login
Atribuição de valor :
• export nome (torna a variável global)• Para verificar as variáveis globais digite o comando env|more• Para apagar uma variável digite unset
unset nome
TERM=VT100export TERM nome=“joao”export nome
15
Script shell - Manipulando Variáveis
Realizando Cálculos
Através do prompt do Shell podemos realizar
• onde $(( )) é a função de cálculo $A porque estamos solicitando o conteúdo da variável A e B
A=5B=3SOMA=$(($A+$B))
16
Script shell - Manipulando Variáveis
● Definir uma variável J com o valor 5 e mostrar na tela● Definir uma variavel SALA cujo conteúdo deve ser “Laboratorio D” e a seguir mostrar na tela● Apagar as variáveis J e SALA criadas anteriormente
17
Script shell - Manipulando Variáveis
read -> captura de variável no teclado, termina ao pressionarmos o returnecho -> impressão no vídeo
read nomeread idadeecho “ bom dia $nome voce tem apenas $idade anos?”
Faça um script e grave-o no arquivo esp01. O Script deve solicitar as seguintes informações:
Digite Primeiro Nro:
Digite Segundo Nro:
Após a entrada de dados imprima no vídeo a seguinte frase:
O Usuario XXX digitou os numeros XX e XX
A soma dos números foi XXX
18
Script shell - Echo - Opções
● -n Do not output the trailing new line.● -e Enable interpretation of the following backslash escaped characters in the strings:● \a alert (bell)● \b backspace● \c suppress trailing new line● \n new line● \r carriage return● \t horizontal tab
echo -e "Amanhã vou pescar \a\t\t com meu amigo\n"
19
Script shell – Parâmetros posicionais
Variáveis adicionais são criadas quando a shell é invocada com parâmetros
• $# -> quantidade de parâmetros passados• $1, $2, ... parâmetros dados ao script• $* -> lista de todos os parâmetros• $0 -> nome do programa• $* -> todos os argumentos• $$ -> número do PID
20
Script shell
Nome:posici
inicio=“Ola"echo $inicioecho “O programa $0 iesta rodando agora"echo “O segundo parametro foi $2"echo " O primeiro parametro foi $1"echo “A lista de parametros é $*"echo “O diretorio home da conta $USER e $HOME"echo “Por favor entre com uma nova saudação inicial"read inicioecho $inicioecho “Final do script"exit 0
Para executar:
./posici joana paulo ana
21
Script shell - Teste de Condição
• Comando de teste com duas sintaxes:
[ ] ou testAs condições de teste podem ser feitas em 3
categorias:• Comparação de strings, aritmética e de arquivos
22
Script shell - Teste de Condição
if condição
then
comandos
elsecomandos
fi
echo “Por favor estamos no periodo mautino?”read horaif [ $hora = “sim" ]; thenecho “Bom dia"elseecho “Boa noite"fiexit 0
23
Script shell - Teste de Condição
Comparação de strings
Verdadeiro se:
• string1 = string2 São iguais
• string1 != string2 Não são iguais
• -n string String não é nulo
• -z string String é null (vazio)
24
Script shell - Comparação alfanuméricos
#!/bin/bash
varx="Bom dia"
read dia
if [ $dia = $varx = dia ]; then
echo "A comparação de String é verdadeira"
else
echo "A Comparação de Striong é falsa"
fi
25
Script shell - Teste de Condição
Comparação AritméticaVerdadeiro se:• expr1 -eq expr2 São iguais• expr1 -ne expr2 Não são iguais• expr1 -gt expr2 expr1 > expr2• expr1 -ge expr2 expr1 >= expr2• expr1 -lt expr2 expr1 < expr2• expr1 -le expr2 expr1 <= expr2• ! expr Not expr
26
Script shell - NUMÉRICOS
#!/bin/bashecho -n "digite o valor do número: "read var1if [ $var1 -eq 1 ]then
echo "Vc escolheu o Valor um"elif [ $var1 -eq 2 ]; then
echo "Vc escolheu o valor dois"elif [ $var1 -eq 3 ]; then
echo "Vc escolheu o valor três"else
echo "Vc escolheu uma opção inválida"fi
27
Script shell - Teste de Condição
Comparação entre ArquivosVerdadeiro se:• -d fileÉ diretório • -s file Tamanho não é zero• -e file Existe • -f file É arquivo regular• -w file Pode ser escrito• -x file É executável• -r file É legível
28
Script shell - ARQUIVOS
#!/bin/bashecho -n "digite o nome do arquivo: "read var1if [ -f "$var1" ]then
echo "$var1 é um arquivo normal"if [ ! -s "$var1" ]; then
echo "Este arquivo está vazio"else
echo "Este arquivo não está vazio"fiif [ -r "$var1" ]; then
echo "O arquivo tem permissão de leitura"else
echo "O arquivo não tem permissão de leitura"fi
elseif [ -d "$var1" ]; then
echo "$var1 é um diretório"fi
fi
29
Script shell - Teste de Condição
Retome o script esp01, verifique o valor do primeiro número, se este for maior do que o segundo multiplique-os e apresente o resultado. Se for inferior ao segundo número subtraia o primeiro do segundo e apresente o resultado.
30
Script shell - Laços
for variavel in valores
do
comandos
donefor i in 1 2 3 4 5do
echo “ passou $i”doneexit 0
for i in $(ls –l)do
echo “ ** arquivo $i **”more $iread oi
doneexit 0
31
Script shell – Controle IncondicionalO comando "break" para incondicionalmente a execução de qualquer ramo, e prossegue a Execução na instrução seguinte ao "done", "fi" ou "esac". Se não existirem instruções após este o programa termina.
O comando "continue" faz com que o programa reinicie imediatamente um novo ciclo, ignorando o que resta dos comandos entre o "do" e o "done".
c=0
for file in *
do
If grep -l POSIX $file
then
more $file
continue
fi
c=$(($c+1)
if [ $c –eq 5 ]
then
break
fi
Echo “** passou por aqui **”
done
exit 0
32
Script shell - Laços
• Utilizando-se do laço for, escreva um script (esp02) onde:
• O usuário irá informar o nome do diretório do qual deseja mover os arquivos e e o nome do diretório destino.
• Mover apenas arquivos simples, não mover diretórios.• A cada movimento de arquivo mostre o nome do arquivo
copiado.• Ao finalizar informe o total de arquivos movidos
Script Movimentação Automática
Digite nome do diretório a ser copiado:
Digite nome do diretório destino:
33
Script shell - Laços
while condição
do
comandos
done foo=1while [ "$foo" -le 20 ]doecho “passou pelo laço $foo"foo=$(($foo+1))doneexit 0
34
Script shell - Laços
until condição
do
comandos
done
#!/bin/shuntil who | grep "$1" > /dev/nulldosleep 60done# Agora toca o sinal e anuncia a entrada do #usuarioecho -e \\aecho "*** $1acaba de se logar no sistema ***"exit 0
O script fica em loop até que o usuário informado em $1 se logue no sistema
35
Script shell -case variavel in
pattern [ | pattern] ...) comandos;;
pattern [ | pattern] ...) comandos;;
esac#!/bin/shecho “Digite o codigo do curso, 1- direito, 2- letras, 3-medicina”read cursocase $curso in1) echo “seu credito custa R$ 30,00";;2 ) echo “seu credito custa R$ 20,00";;3 ) “seu credito custa R$ 50,00";;* ) echo “Resposta incorreta";;esacexit 0
36
Script shell - case
Escreva um script utilizando-se do case onde seja possível ao usuário utilizar o menu abaixo:
** menu de opções **01 – criar diretorio02 – copiar arquivo03 – mostra usuários ativos04 – lista diretório05 - remove diretório00 - fim
opção:** **
-Na opção 1 solicite o nome do diretorio-Na opção 2 solicite nome do arquivo de origem e destino-Na opção 4 e 5 solicite o nome do diretorio-Mantenha o menu em loop até a digitação 00 para finalizar
37
Script shell - Funçõesnome _da_função () {
Comandos
}#!/bin/shfoo() {echo “a função foo esta executando"}echo “inicio do script"fooecho "script finalizado"
38
Links Interessantes
• http://aurelio.net/shell/canivete.html• http://www.moredata.pt/whitepapers/manual-prog-shell/
shell.htm• http://www.maxmaxine.pop.com.br/apostilas.htm• http://cdfinfo.in2p3.fr/Services/Informatique/DOCU/
munix.html#Creating%20KORN%20shell%20scripts