380 likes | 463 Views
Gestão de Redes Corporativas: Tecnologias e Segurança. Administração de Sistemas Operacionais Programação Shell Vera Schuhmacher – shummy@unisul.br vera.schuhmacher@gmail.com. Script shell.
E N D
Gestão de Redes Corporativas: Tecnologias e Segurança Administração de Sistemas Operacionais Programação Shell Vera Schuhmacher – shummy@unisul.br vera.schuhmacher@gmail.com
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ário poderá realizar qualquer função disponível.
Script shell Para verificar shell disponível em sua máquina : $ cat /etc/shells Para verificar o shell ativo $ echo $SHELL
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
Script shell - Shell como linguagem escrevendo programas em Shell 1) digitando os comandos e executando-os interativamente – o prompt normal $ troca para > quando se inicia a digitar comandos 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
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 comandos grep: 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
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 # primeiro0.sh clear echo “Os arquivos do diretório são:” ls –l|more #!/bin/sh # primeiro.sh # compilar apenas os arqs. # contendo string POSIX for file in * do if grep -l POSIX $file then more $file fi done exit 0
Script shell COMO ESCREVER SEU SCRIPT Escolha um editor de textos e inicie sua execução Digitar script Salvar Acertar permissões de execução para o dono: chmod u+x nome_script Para executar se o PATH for conhecido apenas digite o nome do script, se não é possível fazê-lo de diferentes maneiras bash nome_script sh nome_script ./nome_script
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
Script shell - Caracteres especiais Aspas 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 output Barra Invertida \ Transforma caracter especial em caracter normal # – permite a inserção de comentários no script # testando variaveis set dia = 19 echo “ Hoje é dia $dia” resultado = Hoje é dia $dia set maquina = `hostname` echo $resultado $maquina
Script shell - Variáveis Variáveis de ambiente - são variáveis pré-definidas – Todas as variáveis de ambiente são definidas no início da Sessão do Usuário ● Variáveis de ambiente comuns a todos os usuários são encontrados no arquivo /etc/profile ● Variáveis de ambiente de usuário são encontrados no arquivo ~HOME/.profile ● Primeiro é lido o arquivo /etc/profile e depois o arquivo ~HOME/.profile Digite set para verificar as variáveis de ambiente exemplos: HOME, PATH, $#, $$
Script shell - Manipulando Variáveis Variáveis locais –atuam somente durante a execução do Shell Atribuição de valor : Para verificar as variáveis locais digite set nome=“joao” idade=16 meudir=`ls –l` set
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=16 meudir=`ls –l` A=5 a=5
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=VT100 export TERM nome=“joao” export nome
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=5 B=3 SOMA=$(($A+$B))
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
Script shell - Manipulando Variáveis read -> captura de variável no teclado, termina ao pressionarmos o return echo -> impressão no vídeo read nome read idade echo “ 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
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"
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
Script shell Nome:posici inicio=“Ola" echo $inicio echo “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 inicio echo $inicio echo “Final do script" exit 0 Para executar: ./posici joana paulo ana
Script shell - Teste de Condição • Comando de teste com duas sintaxes: [ ] ou test As condições de teste podem ser feitas em 3 categorias: • Comparação de strings, aritmética e de arquivos
Script shell - Teste de Condição if condição then comandos else comandos fi echo “Por favor estamos no periodo mautino?” read hora if [ $hora = “sim" ]; then echo “Bom dia" else echo “Boa noite" fi exit 0
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)
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
Script shell - Teste de Condição Comparação Aritmética Verdadeiro 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
Script shell - NUMÉRICOS #!/bin/bash echo -n "digite o valor do número: " read var1 if [ $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
Script shell - Teste de Condição Comparação entre Arquivos Verdadeiro 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
Script shell - ARQUIVOS #!/bin/bash echo -n "digite o nome do arquivo: " read var1 if [ -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" fi if [ -r "$var1" ]; then echo "O arquivo tem permissão de leitura" else echo "O arquivo não tem permissão de leitura" fi else if [ -d "$var1" ]; then echo "$var1 é um diretório" fi fi
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.
Script shell - Laços for variavel in valores do comandos done for i in 1 2 3 4 5 do echo “ passou $i” done exit 0 for i in $(ls –l) do echo “ ** arquivo $i **” more $i read oi done exit 0
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:
Script shell - Laços while condição do comandos done foo=1 while [ "$foo" -le 20 ] do echo “passou pelo laço $foo" foo=$(($foo+1)) done exit 0
Script shell - Laços until condição do comandos done #!/bin/sh until who | grep "$1" > /dev/null do sleep 60 done # Agora toca o sinal e anuncia a entrada do #usuario echo -e \\a echo "*** $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
Script shell - case variavel in pattern [ | pattern] ...) comandos;; pattern [ | pattern] ...) comandos;; esac #!/bin/sh echo “Digite o codigo do curso, 1- direito, 2- letras, 3-medicina” read curso case $curso in 1) 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";; esac exit 0
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 diretorio 02 – copiar arquivo 03 – mostra usuários ativos 04 – lista diretório 05 - remove diretório 00 - 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
Script shell - Funções nome _da_função () { Comandos } #!/bin/sh foo() { echo “a função foo esta executando" } echo “inicio do script" foo echo "script finalizado"
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