formação de administradores de redes linux lpi – level 1 senac ti fernando costa shell script e...
TRANSCRIPT
![Page 1: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/1.jpg)
Formação de Administradores de Redes Linux
LPI – level 1
SENAC TIFernando Costa
Shell Script e Exercícios
![Page 2: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/2.jpg)
Conceitos Iniciais
• O que é Shell?? – . programa que conecta e interpreta os comandos – . linguagem de programação completa interpretada – . possui variáveis; – . construções condicionais e interativas; – . ambiente adaptável ao usuário;
• Simplicidade do Shell – . Pipeline – . Sistemas de arquivos – . Sistema operacional UNIX
![Page 3: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/3.jpg)
Conceitos Iniciais
• Quando usar : • Interativamente
– . Realizar uma operação simples, uma única vez
– . Interagir com o comando
![Page 4: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/4.jpg)
Conceitos Iniciais
• O Shell Script deverá ser utilizado sempre que for necessário realizar:
– . um procedimento complexo usando muitas linhas de comando;
– . um procedimento do qual todos os usuários poderão beneficiar se;
– . um comando simples usado inúmeras vezes;
– . uma tarefa numa data planejada;
– . integrar informações de vários sistemas existentes;
![Page 5: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/5.jpg)
Conceitos Iniciais
• Produtividade • Linguagem interpretada não compilada • Um programador médio pode duplicar ou triplicar
sua produtividade com o uso do Shell • Comparação de Bruce Cox (pai do Objetive C)
– shell 1 linha de código – linguagem orientada a objeto 10 linhas de código – linguagem C 100 linhas de código
![Page 6: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/6.jpg)
Conceitos Iniciais
• Construção de um Shell Script: • Edite um arquivo -> vi meu programa • Esse arquivo deve conter na primeira linha: • #! /bin/bash • # -> utilize para comentar uma linha • /bin/rm arquivo • É recomendável passar o ``caminho'' (path) dos comandos.
![Page 7: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/7.jpg)
Conceitos iniciais
• Exemplo– vi startup– a – who am i– pwd – echo Meu diretório Home eh $HOME [ESC]– ZZ– $ chmod +x startup
![Page 8: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/8.jpg)
Conceitos Iniciais
• vi myecho
• a
• echo $1 [ESC]
• ZZ
• chmod +x myecho
• myecho LPI
• LPI
![Page 9: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/9.jpg)
Conceitos Iniciais
• Posição de Argumentos
cmd arg1
arg2
arg3
arg4
arg5
arg6
... arg9
$0 $1 $2 $3 $4 $5 $6 ... $9
![Page 10: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/10.jpg)
Conceitos Iniciais
• Posição de Argumentos
$# -> Número de argumentos$* -> Todos os argumentos$$ -> O PID do processo corrente
![Page 11: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/11.jpg)
Conceitos Iniciais
• Exercício– Fazer um script que faça as seguintes tarefas
• Listar os diretórios• Mostrar as partições ativas do sistema• Mostrar a memória disponível• Mostrar os processos ativos do usuário
![Page 12: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/12.jpg)
Conceitos Iniciais
![Page 13: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/13.jpg)
Exemplos de Redirector
• Entrada padrão (stdin - standard input): onde o comando vai ler seus dados de entrada.
• Saída padrão (stdout - standard output): onde o comando vai escrever seus dados de saída.
• Saída de erro (stderr - standard error): onde o comando vai enviar mensagens de erro.
![Page 14: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/14.jpg)
Exemplos de Redirector
![Page 15: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/15.jpg)
Exemplos de Redirector• Saída em arquivo: a saída padrão (stdout) do comando é desviada para um arquivo usando o operador ">". Vejamos um exemplo:• • ls > listagem.txt• • Entrada de arquivo: a entrada padrão (stdin) pode ser obtida a partir de um arquivo usando o operador "<". Um exemplo:• • rev < listagem.txt• • Uso combinado: os dois operadores podem ser usados simultaneamente.• • rev < listagem.txt > listrev.txt• • Concatenação: a saída padrão pode ser concatenada a um arquivo existente usando-se o operador ">>", como mostra o exemplo:• • ls /etc >> listagem.txt• • Saída de erros: a saída de erros (stderr) pode ser redirecionada juntamente com a saída standard. Para isso basta usar o
modificador "&1" em conjunção com "2>" ou "2>>". Vejamos um exemplo:– ppgia:~> ls /xpto > teste.txtls: /xpto: No such file or directory ppgia:~> ll /xpto 2> erro.txt ppgia:~> cat error.txtls: /xpto: No such file or directory
![Page 16: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/16.jpg)
Conceitos Iniciais
![Page 17: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/17.jpg)
Conceitos Iniciais
![Page 18: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/18.jpg)
Filtros:
Conceitos Iniciais
STDIN
(teclado)
FILTRO
STDOUT (tela)
STDERR (tela)•grep -i “Arthur” capit1
Autor: Lowel Arthur
Rei Arthur e os Cavaleiros da Távola
•cat arquivo
![Page 19: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/19.jpg)
Conceitos Iniciais
•Você pode pensar na maior parte dos comandos do Shell como filtros.
•Cada comando também possui duas saídas:
•saída-padrão --> stdout
•saída-de-erro --> stderr
•Cada comando filtra dados da entrada-padrão ou transforma-os
de algum modo, passando-os à saída-padrão. Quaisquer erros
encontrados são passados à saída-de-erro.
![Page 20: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/20.jpg)
Comandos Iniciais
• Comandos de Impressão
• ECHO – Escreve argumentos em stdout.
• Sintaxe: – echo [opções] string
• Opções: – n : não adiciona uma nova linha no stdout antes de imprimir a string, deixando o cursor
na linha da mensagem escrita.
• CAT – Concatena e imprime. O comando cat não altera dados, ele toma a stdin e a reproduz no
stdout. Possui também a opção de varrer o arquivo mas não pára a cada tela do terminal.
• Sintaxe: – cat [opções] [ | file1 file2 ...]
• Opções: – n : lista as linhas do arquivo numerando as
![Page 21: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/21.jpg)
Comandos Iniciais• cat • Exemplos:
– 1. cat capt1 capit2 > livro – livro irá conter capit1,2 – 2. cat capt3 >> livro – anexe capit3 no livro – 3. cat capit1 – lista capit1 no terminal – 4. cat n capit1 – lista capit1 numerando as linhas – 5. cat > arq1 – direciona o stdin para o terminal e stdout para arq1, assim tudo que for
digitado será gravado no arq1. Para encerrar tecle CTRL D.
![Page 22: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/22.jpg)
Comandos Segurança
• CHMOD • Para tornar o arquivo do Shell executável, é necessário alterar a
permissão do arquivo. • Sintaxe: • chmod [quem] operação acesso arquivo • Opções: • quem: u(usuário), g(grupo), o(outros), a (todos) • operação: +(atribuir), (remover), = • acesso: r(read), w(write), x(execução),
![Page 23: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/23.jpg)
Comandos Segurança
• Se a sua shell for executar o comando FTP você deverá alterar a
• permissão do arquivo que contém o usuário e a senha para
• somente o dono ler, gravar e executar. • Exemplos:
– chmod u=rwx,go= arquivo – ls la – rwx 1 lilliam supsof 110 Sep 25 16:33 arquivo
![Page 24: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/24.jpg)
Comandos de Leitura
• READ
• Sintaxe read var1 [var2...]
• Usado em shell para ler texto de forma interativa
• Usado com a opção \c por questão de formatação
![Page 25: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/25.jpg)
Comandos de Leitura
• Exemplo
• Cat getname
• echo “Entre com se nome: \c”
• Read SEUNOME
• echo Olah, $SEUNOME
![Page 26: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/26.jpg)
Comandos de Leitura
• Exemplo2
• echo first second third fourth
• Read word1 word2 word3 word4
• echo $word4 $word3 $word2 $word1
![Page 27: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/27.jpg)
• Exercícios• Faça um programa que mostra na tela
seus argumentos.• Exemplo saída:
– echoarg Meu Primeiro Programa– Meu Primeiro Programa
• Ainda com base nesse programa suprima a última linha em branco.
Comandos de Leitura
![Page 28: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/28.jpg)
Resumo
• cat : concatena diversos arquivos na saída padrão.
• tac : idem, mas inverte a ordem das linhas. • more : permite a paginação do fluxo de dados. • tr : troca de caracteres entre dois
conjuntos. • head : seleciona as "n" linhas iniciais do fluxo de
dados.
![Page 29: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/29.jpg)
Resumo
• tail : seleciona as "n" linhas finais do fluxo de dados.
• wc : conta o número de linhas, palavras e bytes do fluxo.
• sort : ordena as linhas segundo critérios ajustáveis.
• uniq : remove linhas repetidas, deixando uma só linha.
• sed : para operações complexas de strings (trocas, etc).
![Page 30: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/30.jpg)
Resumo
• grep : seleciona linhas contendo uma determinada expressão.
• cut : seleciona colunas do fluxo de entrada. • rev : reverte a ordem dos caracteres de cada
linha do fluxo de entrada. • tee : duplica o fluxo de entrada (para um
arquivo e para a saída standard).
![Page 31: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/31.jpg)
Exercícios
1. Determine quanto arquivos normais (não diretórios nem links) existem em /usr.
2 . Qual a sequência de comandos para se obter uma listagem dos usuários da máquina. As informações podem ser obtidas no arquivo /etc/passwd.
![Page 32: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/32.jpg)
Comandos de Seleção
![Page 33: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/33.jpg)
Comandos de Seleção
• SED• Edita e altera dados.• Sintaxe:
sed [opções] stdin > stdout• Opções:• -e “script” : edita e altera dados
Onde script pode ser:“s/string antiga/string nova/g”“/string pertencente à linha a ser deletada/d”“s/string a ser deletada//g”
• -f arquivo : contém os scripts que devem ser executados. Não coloca-los entre aspas duplas.
![Page 34: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/34.jpg)
Comandos de Seleção
![Page 35: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/35.jpg)
Comandos de Seleção
![Page 36: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/36.jpg)
Comandos de Seleção
![Page 37: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/37.jpg)
Comandos de Transformação
![Page 38: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/38.jpg)
• Exercícios
• Leia o arquivo /etc/passwd e crie um novo arquivo chamado /home/senacti/usuarios ordenado pelo nome do usuário
Comandos de Seleção
![Page 39: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/39.jpg)
Outros Comandos
• Cd - altera o diretório corrente• ls - lista o conteúdo do diretório• pwd - mostra qual é o diretório corrente• mkdir - cria diretório• rmdir - deleta diretório• cp - copia arquivo• mv - renomeia arquivo• rm - deleta arquivo
![Page 40: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/40.jpg)
Comandos
Exemplos:ls -lacat arquivomv arqvelho arqnovopwdmkdir meudir
![Page 41: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/41.jpg)
Substituição de Comandos
• Você pode capturar a saída de um comando colocando-o entre (`)-crase
• Exemplo– CURDIR=`pwd` ou CURDIR=$(pwd)– echo $CURDIR
![Page 42: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/42.jpg)
Comando expr
• Os argumentos são usados como elementos
• A expressão é avaliada• O resultado é escrito na saída padrão• Exemplo
– Expr 17 + 61– 78
• Use expr para criar um contador– index=`expr + $index + 1`
![Page 43: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/43.jpg)
Códigos de Retorno
• Exemplo• grep root /etc/passwd• echo $?• 0• grep john /etc/passwd• echo $?• 1• echo $?• 0
![Page 44: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/44.jpg)
Códigos de Retorno
• true• echo $?• 0• false• echo $?• 1• echo $?• 0
![Page 45: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/45.jpg)
Comando IF
if cmd
then
cmda
cmdb
....
fi
if cmd
then
cmda
cmdb
else
cmdx
fi
![Page 46: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/46.jpg)
Comando IF
if grep $1 /etc/passwd > /dev/nullthen
echo $1 Encontradoexit 0
elseecho $1 Não encontradoexit 1
fi
![Page 47: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/47.jpg)
Comando IF
• Execução• Finder root
– Root Encontrado
• Echo $?– 0
• Finder Fernando– Fernando Não Encontrado
• Echo $?– 1
![Page 48: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/48.jpg)
Comando IF
• Vamos escrever um script que nos diga se uma determinada pessoa, que será passada por parâmetro, fez login no seu computador:
– $ cat talogado– #– # Verifica se determinado usuario esta "logado"– #
– if who | grep $1– then– echo $1 esta logado– else– echo $1 nao esta logado– fi
![Page 49: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/49.jpg)
Comando IF
• Repare que a execução do talogado gerou uma linha correspondente à saída do who, que não traz proveito algum para o programa; diria até que o ideal seria que ela não aparecesse. Para tal, existe um buraco negro do UNIX que todas as coisas que lá são colocadas desaparecem sem deixar vestígio. Este buraco negro, chamado /dev/null, é um arquivo especial do sistema, do tipo device, no qual todos estão aptos a gravar ou ler (neste último caso, ganhando imediatamente um EOF).
![Page 50: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/50.jpg)
Comando IF
– $ cat talogado– #– # Verifica se determinado usuario esta "logado" - versao 2– #
– if who | grep $1 > /dev/null Incluí /dev/null redirecionando a saída do who– then– echo $1 esta logado– else– echo $1 nao esta logado– fi– $ talogado alex– alex esta logado Não apareceu a linha indesejada
![Page 51: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/51.jpg)
Comando IF
• Faça um exemplo que leia dois parâmetros e verifique se esses parâmetros são usuários válidos na máquina. As saídas possíveis são– $1 e $2 São ambos válidos– Somente $1 foi encontrado– Somente $2 foi encontrado– Nenhum dos dois foi encontrado
![Page 52: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/52.jpg)
Comando IF
• Para saber se o conteúdo de uma variável é numérico ou não, poderíamos fazer:
– if expr $1 + 1 > /dev/null 2> /dev/nullResultado de expr e erro que irão para /dev/null
– then– echo Eh um numero– else– echo Nao eh um numero– fi
Se o resultado de qualquer operação feita pelo expr resultar em zero, seu código de retorno será diferente de zero, então no exemplo acima, caso o conteúdo da variável fosse -1, o resultado do if seria inválido. Experimente fazer expr -1 + 1 ou expr 0 + 0 e em seguida teste o código de retorno.
![Page 53: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/53.jpg)
Comando Test
• A essa altura dos acontecimentos você irá me perguntar: ora, se o comando if só testa o conteúdo da variável $?, o que fazer para testar condições?
• Para isso o Shell tem o comando test, que na sua forma geral obedece a seguinte sintaxe:
– test <expressão>
• Veja o exemplo a seguir
![Page 54: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/54.jpg)
Comando Test– $ cat pedi– #– # Testa a resposta a um pedido. Deve ser (S)im ou (N)ao– #
– resp=$1– if test $resp = N Saída do test é entrada do if– then– echo Ela nao deixa...– else– if test $resp = S Um if dentro do outro dificulta a legibilidade– then– echo Oba, ela deixou!!!– else– echo Acho que ela esta na duvida.– fi– fi
• Veja a execução.....
![Page 55: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/55.jpg)
Comando Test
– $ pedi S– Oba, ela deixou!!!– $ pedi N– Ela nao deixa...– $ pedi A– Acho que ela esta na duvida.– $ pedi Xiii, esqueci de passar o parâmetro...– pedi[6]: test: argument expected Ué, o que houve?– pedi[10]: test: argument expected Ídem...– Acho que ela esta na duvida.
![Page 56: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/56.jpg)
Operações Comparação
• Comparação
![Page 57: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/57.jpg)
Operações Comparação
![Page 58: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/58.jpg)
Exemplo
#!/bin/bash if test $UID = 0 then
adduser $1 echo $2 | passwd $1 --stdin
echo echo "Usuário $1 adicionado com sucesso"
else echo Pra criar usuários requer poderes de
root. fi
![Page 59: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/59.jpg)
Exemplo• #Script pra testar esta condição: • cat /tmp/testar #!/bin/bash mkdir /tmp/teste if [ $? -eq 0 ];then
echo $? echo "comando executado com sucesso!"
else echo $? echo "falha na execução do comando." exit
fi
![Page 60: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/60.jpg)
1- Exercício
• Faça um script que execute a seguinte função:– executa o comando 'cd'. se NÃO CONSEGUIU
executar 'mkdir' • cd algumdiretorio || mkdir algumdiretorio
– Retornar a configuração de Rede• Endereço IP• NetMask• MAC • Gateway
![Page 61: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/61.jpg)
2 -Exercicio• Recebe dois números como parâmetro e mostra a relação
entre eles. Exemplo:prompt$ ./relacao.sh 3 53 é menor 5
• Recebe um número como parâmetro e o diminui até chegar a zero, mostrando na tela cada passo, numa mesma linha. Exemplo:
• prompt$ ./zerador.sh 5• 5 4 3 2 1 0• prompt$ ./zerador.sh 10• 10 9 8 7 6 5 4 3 2 1 0
![Page 62: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/62.jpg)
3 -Exercício• Recebe duas palavras como parâmetro e checa
se a primeira palavra está contida dentro da segunda. Só mostra mensagem informativa em caso de sucesso, do contrário não mostra nada. Exemplo:
• prompt$ ./substring.sh ana banana• ana está contida em banana• prompt$ ./substring.sh banana maria• prompt$ ./substring.sh banana• prompt$ ./substring.sh• prompt$
![Page 63: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/63.jpg)
4 - Exercício
• Do arquivo /etc/passwd, mostra todos os shells (último campo) que os usuários usam. Não mostrar linhas repetidas. Exemplo:
• prompt$ ./shells.sh• /bin/bash• /bin/false• /bin/sync• /sbin/halt• /sbin/shutdown
![Page 64: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/64.jpg)
5 -Exercício
• Mostra na tela todos os parâmetros recebidos na linha de comando, contando−os.
• Exemplo:• prompt$ ./parametros.sh a b c d e f• Parâmetro 1: a• Parâmetro 2: b• Parâmetro 3: c• Parâmetro 4: d• Parâmetro 5: e• Parâmetro 6: f
![Page 65: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/65.jpg)
While
while [ condition ]do
command1command2command3......
done
![Page 66: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/66.jpg)
While
•Exemplo• while true Loop de leitura• do• read isto• if [ ! "$isto" ] Se o campo estiver vazio...• then• exit• else • continue• fi• ...• done
![Page 67: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/67.jpg)
For
• for var in lista_de_palavras do – no corpo do loop, temos $var = a próxima palavra da lista
• done
![Page 68: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/68.jpg)
For
• Exemplofor i in segunda terca quarta quinta sextado echo os dias da semana sao $idone• ./dias
– os dias da semana sao segunda– os dias da semana sao terca– os dias da semana sao quarta– os dias da semana sao quinta– os dias da semana sao sexta
![Page 69: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/69.jpg)
Exemplo
#!/bin/bashi=1teste=`echo $1 | cut -c1`if [ "$teste" = / ]then echo dir1: / i=2fifor x in `echo $1 | tr / '\012'`do echo "dir$i: $x" let i++done
![Page 70: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/70.jpg)
For
• O comando for é ótimo para ler um arquivo seqüencial. Veja o exemplo abaixoarquivo=`cat /etc/group`
for i in $arquivo
do echo $i
echo ---------
done
![Page 71: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/71.jpg)
6 -Exercícios
• Faça o exemplo anterior apresentando apenas o nome do grupo
• Faça um script que informe que o root se logou na máquina
• Faça um script de um relógio
![Page 72: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/72.jpg)
Casecase $variable-name in
pattern1) command.....command;;
pattern2) command.....command;;
patternN) command.....command;;
*) command.....command;;
esac
![Page 73: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/73.jpg)
Exemplo#! /bin/bash while truedoclearcat <<!------------------------------------------------------------------------------| || Menu de Usuario || || || 1 - ls || 2 - ps -f |
| 3 - who || 4 - exit || || || Digite sua Opcao : || || || || || || || || || |------------------------------------------------------------------------------!
while tput cup 11 34 ; read opt [ "$opt" = "" ]do :done case $opt in 1) clear ls ;; 2) clear ps -f ;; 3) clear who ;; 4) clear echo Adios Amigo exit 0 ;; *) clear echo opcao invalida for x in 1 2 3 4 5 6 7 8 do echo "\a\c" sleep 1 done ;; esac
echo Tecle Enter para continuar "\c" readdone
![Page 74: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/74.jpg)
7 - Exercício
• O que faz o script abaixo?
#!/bin/bash val=`expr ${1:-0} + ${2:-0} + ${3:-0}` echo $val
• Faça um script com as seguintes funções:– Criar um usuário
• Nome do usuário (critica se existir)• Nome do home do usuário• Pede a senha do usuário
![Page 75: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/75.jpg)
8 -Exercício
• Faça um script que monte um menu, como mostra abaixo– Script de Administracao
• 1 – Ver processos ativos• 2 – Mostra dos files systems da máquina• 3 – Mostra a quanto tempo a máquina está no ar• 4 – Usuários ativos na máquina• 5 – Versão do kernel• 6 – Lista de usuários da máquina• 7 – Sair do sistema
![Page 76: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/76.jpg)
Exercícios
• 3. O que faz o script abaixo?echo O primeiro argumento é: $1echo O segundo argumento é: $2echo O terceiro argumento é: $3echo O quarto argumento é: $4echo " n n n"shiftecho "Shiftou... n"echo Agora o primeiro argumento é: $1echo Agora o segundo argumento é: $2echo Agora o terceiro argumento é: $3echo Agora o quarto argumento é: $4
![Page 77: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/77.jpg)
Exercícios
echo "Entre com o arquivo a ser alterado: "read fileecho "Texto a substituir: "read oldtextecho "Texto a colocar: "read newtexted - $file <<!g/$oldtext/s//$newtext/gwq!
![Page 78: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/78.jpg)
Exercícios
echo "Escreva o nome do arquivo e a palavra a ser pesquisada:"
read file wordif grep $word $file > /dev/nullthen echo "A palavra $word existe no arquivo
$file."fi
![Page 79: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/79.jpg)
Exercícios
DIA=$1MES=$2ANO=$3DIA=`expr $DIA - 1`if [ $DIA -eq 0 ]; then
MES=`expr $MES - 1`if [ $MES -eq 0 ]; then
MES=12ANO=`expr $ANO - 1`
fiDIA=`cal $MES $ANO`DIA=`echo $DIA | awk '{ print $NF }'`
fiecho $DIA $MES $ANO
![Page 80: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/80.jpg)
Exercícios
• Crie um arquivo com o seguinte conteúdo(sitevistado)jamiesob mucus.slime.com tonsloye xboys.funnet.com.fr tonsloye sweet.dreams.com root sniffer.gov.au jamiesob marvin.ls.tc.hk jamiesob never.land.nz jamiesob guppy.pond.cqu.edu.au tonsloye xboys.funnet.com.fr tonsloye www.sony.com janesk horseland.org.uk root www.nasa.gov tonsloye warez.under.gr tonsloye mucus.slime.com root ftp.ns.gov.au tonsloye xboys.funnet.com.fr root linx.fare.com root crackz.city.bmr.au janesk smurf.city.gov.au jamiesob mucus.slime.com jamiesob mucus.slime.com
![Page 81: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/81.jpg)
exercícios
• Sites proibidos(siteproibido)
mucus.slime.com xboys.funnet.com.fr warez.under.gr crackz.city.bmr.au www.hotwarez.com.br
![Page 82: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/82.jpg)
Exercícios
#!/bin/bash # ARQUIVO: list # numLinha=1 while read linha do echo "$numLinha $linha" numLinha=`expr $numLinha + 1`
done < $1
![Page 83: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/83.jpg)
Exercícios
• A partir do script anterior, crie um arquivo chamado newarq2 com as linhas numeradas
![Page 84: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/84.jpg)
Exercícios
• O que faz o script abaixo? Faça-o funcionarwhile read linha do usuario=`echo $linha | cut -d" " -f1` site=`echo $linha | cut -d" " -f2` if [ "$usuario" = "$1" ] then echo "$usuario visitou $site" fi done < netwatch
![Page 85: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/85.jpg)
Exercícios
O que faz esse script
for verifUsuario in $* do
while read linha do while read verifSite do usuario=`echo $linha | cut -d" " -f1` site=`echo $linha | cut -d" " -f2` if [ "$usuario" = "$verifUsuario" -a "$site" = "$verifSite" ] then echo "$usuario visitou o site proibido $site" fi done < netproib
done < netwatch done
![Page 86: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/86.jpg)
Exercícios
• Fazer um script que dê bom dia se for manhã, boa tarde, se for tarde ou boa noite de for noite
• Crie um script para informar que o root se logou na máquina.
• Crie um script para fazer ordenar 3 números
• Faça um script que avise quando o processamento da máquina ultrapassar 50%
![Page 87: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/87.jpg)
Sinais e Traps
• Sinais são enviados para processos de várias formas – Pelo kernel, quando um processo faz besteira – Pelo usuário, usando o teclado (^C, ^\,
encerrando a sessão) – Usando o comando kill
• Ação normal: o processo morre – Porém, um processo pode ignorar os sinais ... – ... ou captura-los para fazer algo
![Page 88: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/88.jpg)
Interrupções
• Os principais sinais de interrupção mascaráveis são:– 1 = SIGHUP / HANGUP
Sinal enviado ao processo pelo sistema operacional quando a shell ou sessão a partir da qual o script foi executado é finalizada.
– 2 = SIGINT / INTERRUPT Sinal enviado pelo sistema operacional ao processo em execução em uma sessão interativa, quando o usuário pressiona CTRL+C.
– 15 = SIGTERM / TERMINATE Sinal padrão enviado pelo comando kill para informar que o processo deve terminar.
![Page 89: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/89.jpg)
Sinais e Traps0 Fim do shell1 Hangup2 Interrupt (^C)3 Quit(^\)4 Illegal Instruction5 Trace trap6 IOT instruction7 EMT instruction8 Floating point exception(bug de programa)9 Morte certa (kill -9)10 Bus error(bug de programa)11 Violação de segmentação(bug de programa)12 Bad argument13 Pipe write error14 Alarm15 Software termination signal (kill sem argumentos)
![Page 90: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/90.jpg)
Exercícios
• O que faz o trap nesse exemplo?#!/bin/bashtempfile=/tmp/temp.$$trap "rm -f $tempfile" 0 1 2ls -la > $tempfilecp $tempfile /tmp/resultadofor i in $*do echo $idone
![Page 91: Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa Shell Script e Exercícios](https://reader035.vdocuments.pub/reader035/viewer/2022081720/552fc110497959413d8c56d9/html5/thumbnails/91.jpg)
Fernando [email protected]