Gerencia de redes
196 pág.

Gerencia de redes


DisciplinaAdministração103.291 materiais762.424 seguidores
Pré-visualização50 páginas
a mensagem de erro 
 21.3.3 Parâmetros
Quando um script é chamado, pode receber parâmetros na linha de comando 
$ vi soma
#!/bin/bash
val=`expr ${1:-0} + ${2:-0} + ${3:-0}`
echo A soma eh $val
$ soma 2 3 5
A soma eh 10
$ soma 2 3
A soma eh 5
$ soma
A soma eh 0
Isso é equivalente: 
#!/bin/bash 
echo A soma eh `expr ${1:-0} + ${2:-0} + ${3:-0}`
Tratamento de parâmetros 
Variável Propósito
$0 O nome do programa shell
$1 até $9 Os primeiros 9 parâmetros
$# O número de parâmetros
$* Todos os parâmetros do programa
Campus São José 84
Área de Telecomunicações
Odilson Tadeu Valle
Observe que $10 não é o parâmetro 10, é $1 concatenado com "0".
Isso não significa que só podemos ter 9 parâmetros: não há limite (quase).
Veremos como acessar os demais parâmetros depois.
Exemplo:
$ vi l
#!/bin/bash
ls -l $*
$ ./l
<mostra o conteúdo do diretório corrente>
$ ./l ./ ../
<mostra o conteúdo do diretório corrente e do diretório pai>
Como formar parâmetros 
\u2022 Os exemplos abaixo parecem iguais mas o primeiro tem 4 parâmetros, o 
segundo tem 1 parâmetro e o terceiro tem 3 parâmetros 
$ echo a b c d
a b c d
$ echo &quot;a b c d&quot;
a b c d
$ echo &quot;a b&quot; c d
a b c d
 21.4 Entrada-Saída Básica
A saída é feita basicamente da saída de outros comandos que estão no script. 
Se precisar de um &quot;print&quot;, usa-se o comando echo.
A leitura de informação da entrada padrão é feita com o comando do shell &quot;read&quot;.
$ cat testaread
#!/bin/bash
read x
echo Voce falou $x
$ cat lenome
#!/bin/bash
echo -n &quot;Favor digitar seu nome: &quot;
read nome
echo &quot;Seu nome eh $nome&quot;
 21.5 Testes
 21.5.1 Um problema a resolver
Você acabou de ser nomeado administrador de sistema numa empresa. O 
administrador anterior saiu correndo quando descobriu que um servidor principal 
da empresa estava sendo usado para guardar pornografia, warez (software 
pirata) e instruções para a fabricação de bombas caseiras. Suspeita-se que várias 
pessoas da empresa, além do ex-administrador de sistema, estavam envolvidas 
com a captação dessa informação. Pediu-se que você fizesse um programa para 
identificar pessoas que acessam sites &quot;indesejáveis&quot; e avisá-los da política de 
empresa acerca do uso apropriado da Internet com recursos da empresa. 
Campus São José 85
Área de Telecomunicações
Odilson Tadeu Valle
Idealmente, você deve produzir um relatório informando quem acessa quais sites 
restritos e quantas visitas foram feitas. A informação a ser analisada está num 
arquivo &quot;netwatch&quot; que contém uma lista das pessoas e dos acessos que elas 
fizeram .
Um exemplo do arquivo segue abaixo:
ARQUIVO: netwatch
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
Os sites proibidos estão contidos num arquivo &quot;netproib&quot;: 
ARQUIVO: netproib
mucus.slime.com
xboys.funnet.com.fr
warez.under.gr
crackz.city.bmr.au
www.hotwarez.com.br
Desenvolva um script que satisfaça os requisitos. Você pode ignorar qualquer 
consideração de ética, privacidade e censura.
 21.5.2 Comandos de testes no shell
if comando
then
 comandos executados se &quot;comando&quot; retornar status &quot;ok&quot; (0)
else
 comandos executados se &quot;comando&quot; retornar status &quot;não ok&quot; (diferente de 0)
fi
if comando1
then
 comandos executados se &quot;comando1&quot; retornar status &quot;ok&quot; (0)
elif comando2
 comandos executados se &quot;comando2&quot; retornar status &quot;ok&quot; (0)
else
 comandos executados se não entrar nos &quot;if&quot; acima
fi
Campus São José 86
Área de Telecomunicações
Odilson Tadeu Valle
comando1 && comando2
# construção na linha acima eh equivalente a (porta E):
if comando1
then
 comando2
fi
comando1 || comando2
# construção na linha acima eh equivalente a (porta OU):
if comando1
then
 :
else
 comando2
fi
 21.5.3 Início do script scan
#!/bin/bash
# ARQUIVO: scan
if [ $# -eq 0 ]; then
 echo &quot;Falta parametro - Rode o script ./scan.sh usuario1 [usuario2 ...]&quot;
 exit
fi
if ls netwatch && ls netproib
then
 echo &quot;Achei netwatch e netproib&quot;
else
 echo &quot;Nao pode achar um dos arquivos de dados - caindo fora&quot;
 exit 1
fi
O comando exit encerra o shell e retorna um status para o processo &quot;pai&quot;.
 21.5.4 Testes com [ ... ]
O comando &quot;test&quot; e a construção [ ... ] são equivalentes e permitem testar 
condições envolvendo strings e arquivos.
Exemplo, o último script poderia ser reescrito como: 
#!/bin/bash
# ARQUIVO: scan
if [ -r netwatch ] && [ -r netproib ]
then
 echo &quot;Achei netwatch e netproib&quot;
else
 echo &quot;Nao pode achar um dos arquivos de dados - caindo fora&quot;
 exit 1
fi
As opções de [ ... ] seguem: 
\u2022 Testes de strings
Campus São José 87
Área de Telecomunicações
Odilson Tadeu Valle
Expressão Verdeiro se
-z string tamanho de string é 0
-n string tamanho de string não é 0
string1 = string2 dois strings são iguais
string != string2 dois strings não são iguais
string string não é nulo
\u2022 Testes numéricos
Expressão Verdeiro se
int1 -eq int2 O primeiro inteiro é igual ao segundo
int1 -ne int2 O primeiro inteiro NÃO é igual ao segundo
int1 -gt int2 O primeiro inteiro é maior que segundo
int1 -ge int2 O primeiro inteiro é maior ou igual ao segundo
int1 -lt int2 O primeiro inteiro é menor que segundo
int1 -le int2 O primeiro inteiro é menor ou igual ao segundo
\u2022 Testes de arquivos
Expressão Verdeiro se
-r file file existe e é pode ser lido
-w file file existe e é pode ser gravado
-x file file existe e é pode ser executado
-f file file existe e é normal (regular)
-d file file existe e é diretório
-h file file existe e é link simbólico
-c file file existe e é dispositivo especial a 
caractere-b file file existe e é dispositivo especial a bloco
-p file file existe e é pipe
-u file file existe e tem bit setuid ligado
-g file file existe e tem bit setgid ligado
-k file file existe e tem bit sticky ligado
-s file file existe e tem tamanho diferente de zero
\u2022 Operadores adicionais
Expressão Propósito
! inverte expressão lógica
-a operador AND
Campus São José 88
Área de Telecomunicações
Odilson Tadeu Valle
-o operador OR
( expr ) agrupar expressões
 21.5.5 A construção case
echo -n &quot;Sua reposta: &quot;
read resp
case &quot;$resp&quot; in
Y* | y*)
 resp=&quot;sim&quot;
 ;;
N* | n*)
 resp=&quot;nao&quot;
 ;;
*)
 resp=&quot;talvez&quot;
 ;;
esac
echo $resp
Observe o casamento de expressões regulares, acima.
 21.6 Laços
 21.6.1 O comando while
while comando
do
 comandos executados enquanto &quot;comando&quot; retornar status &quot;ok&quot;
done
O que o seguinte programa faz? 
#!/bin/bash
# ARQUIVO: list
#
numLinha=1
while read linha
do
 echo &quot;$numLinha $linha&quot;
 numLinha=`expr $numLinha + 1`
done < $1
R. Lista o arquivo com numeração de linhas!
O que o seguinte programa faz? 
while read linha
do
 usuario=`echo $linha | cut -d&quot; &quot; -f1`
 site=`echo $linha | cut -d&quot; &quot; -f2`
 if [ &quot;$usuario&quot; = &quot;$1&quot; ]
 then
 echo &quot;$usuario visitou $site&quot;
Campus São José 89
Área de Telecomunicações
Odilson Tadeu Valle
 fi
done < netwatch
R. Dado um usuário informa quais sites visitados pelo mesmo!
 21.6.2 O comando for
for var in lista_de_palavras
(também pode ser usado: for var in `cat /root/lista_de_palavras)
do
 no corpo do loop, temos $var = a próxima palavra da lista
done
O que o seguinte programa faz? 
for verifUsuario in $*
do
 while read linha
 do
 while read verifSite
 do
 usuario=`echo $linha | cut -d&quot; &quot; -f1`
 site=`echo $linha | cut -d&quot; &quot; -f2`
 if [ &quot;$usuario&quot; = &quot;$verifUsuario&quot; -a &quot;$site&quot; = &quot;$verifSite&quot;