Você está na página 1de 29

ADMINISTRAODEREDESI

LINUX
ShellScript
FredericoMadeira
LPIC1,CCNA
fred@madeira.eng.br
www.madeira.eng.br

Shell Script

Shell

qualquer interface de usurio para o SO Unix. que receba


do usurio um input e a converta em instruo para que o SO
entenda.
Shell Script
um arquivo que contm uma srie de comandos, funes,
rotinas que so executadas quando o shell script executado.
Se digitarmos comando a comando diretamente no shell, o
resultado ser o mesmo

Shell Script
Conceitos do Shell
Variveis
Armazenam informaes durante execuo do script
- Atribuindo valor
VARIAVEL=Teste Linux
- Exibindo o valor
echo $VARIAVEL
- Atribuindo a sada de um comando
VARIAVEL=$(date)
VARIAVEL=`date`
- Limpando uma varivel
unset VARIAVEL
- Listando todas as variveis
env ou set

Shell Script
Conceitos do Shell
Redirecionamento
> : Redireciona a sada padro do comando a esquerda para o arquivo a direita,
sobrescrevendo todo o contedo.
>> : Redireciona a sada padro do comando a esquerda para o arquivo a
direita, adicionando o contedo ao final do arquivo.
| : Pipe, redireciona a sada padro do primeiro comando para a entrada padro
do segundo comando.
Ex:
$ cat /etc/passwd | grep root > /tmp/root
$ ping -c 1 www.madeira.eng.br > /dev/null
OBS: /dev/null , representa lugar nenhum

Shell Script
Conceitos do Shell
Redirecionamento sada da erro
stderr (2): Sada de Erro.
Para redirecionar a sada de erro, usamos: 2>
stdout(1): Sada do comando
Para redirecionar a sada do comando, usamos: 1>
Para redirecionar ambas usamos: &>
Ex:
Sada do comando
[fred@localhost Linux]$ ping www.madeira.eng.br
PING www.madeira.eng.br (69.16.250.4) 56(84) bytes of data.
64 bytes from noc88.noc88.com (69.16.250.4): icmp_seq=1 ttl=45 time=300 ms
Sada de erro
[fred@localhost Linux]$ ping www.madeira.eng.br1
ping: unknown host www.madeira.eng.br1

Shell Script
Conceitos do Shell
Redirecionamento sada da erro
Comando ok, redir sada de erro
[fred@localhost Linux]$ ping www.madeira.eng.br 2> /dev/null
PING www.madeira.eng.br (69.16.250.4) 56(84) bytes of data.
64 bytes from noc88.noc88.com (69.16.250.4): icmp_seq=1 ttl=45 time=250 ms
Comando errado, redir sada de erro
[fred@localhost Linux]$ ping -c 1 www.madeira.eng.br1 2> /dev/null
Comando ok, redir sada do comando
[fred@localhost Linux]$ ping -c 1 www.madeira.eng.br 1> /dev/null
Comando errado, redir sada do comando
[fred@localhost Linux]$ ping -c 1 www.madeira.eng.br1 1> /dev/null
ping: unknown host www.madeira.eng.br1
Comando ok, redir sada do comando e sada de erro
[fred@localhost Linux]$ ping -c 1 www.madeira.eng.br &>

/dev/null

Comando errado, redir sada do comando e sada de erro


[fred@localhost Linux]$ ping -c 1 www.madeira.eng.br1 &> /dev/null

Shell Script
Conceitos do Shell
Lgica

&& - equivalente ao E. O prximo comando s ser executado se o anterior


tiver sido bem sucedido.
|| - equivalente ao OU. Se o comando anterior no for bem sucedido, ser
executado o prximo comando. OU um OU outro.
Ex:
$ ping -c 1 www.madeira.eng.br && echo Site est ok || echo Site fora do ar
Forma mais elegante:
$ ping -c 1 www.madeira.eng.br &> /dev/null && echo Site est ok || echo
Site fora do ar
$ mkfs.ext3 /dev/sda1 && echo Formatao OK || echo Erro na formatao

Shell Script
Conceitos do Shell
Teste Condicional IF
if [ $NOME = Fred ]
then
echo Seja bem vindo Fred
else
echo Acesso no Permitido
fi
Teste Condicional TEST
test CONDIO && echo Condio verdadeira || echo Condio falsa

Shell Script
Conceitos do Shell
Teste Condicional Case
Permite a comparao de uma varivel com muitos valores
case $VALOR in
1)
echo Voc escolheu 1
;;
2)
echo Voc escolheu 2
;;
*)
echo Voc no escolheu nem 1 e nem 2
;;
esac

Shell Script
Testes para test e if
-b
-c
-d
-e
-f
-g
-G
-k
-L
-O
-p
-r
-s
-S
-t
-u
-w
-x
-nt
-ot
-ef

Testes em arquivos
um dispositivo de bloco
um dispositivo de caractere
um diretrio
o arquivo existe
um arquivo normal
o bit SGID est ativado
o grupo do arquivo o do usurio atual
o sticky-bit est ativado
o arquivo um link simblico
o dono do arquivo o usurio atual
o arquivo um named pipe
o arquivo tem permisso de leitura
o tamanho do arquivo maior que zero
o arquivo um socket
o descritor de arquivos N um terminal
o bit SUID est ativado
o arquivo tem permisso de escrita
o arquivo tem permisso de execuo
o arquivo mais recente (NewerThan)
o arquivo mais antigo (OlderThan)
o arquivo o mesmo (EqualFile)

Testes em variveis
Comparao Numrica
-lt
menor que (LessThan)
-gt maior que (GreaterThan)
-le
menor igual (LessEqual)
-ge maior igual (GreaterEqual)
-eq
igual (EQual)
-ne
diferente (NotEqual)
Comparao de Strings
=
igual
!=
diferente
-n
no nula
-z
nula

!
-a
-o

Operadores Lgicos
NO lgico (NOT)
E lgico (AND)
OU lgico (OR)

Shell Script

Erros Comuns na Execuo


- Comando no encontrado
- Script no encontra-se em um diretrio existente no $PATH
- Tente execut-lo usando o caminho absoluto
- Tente execut-lo usando ./
- Permisso Negada
- Atribua permisso de execuo ao shell script
- Erro de Sintaxe
- O Script foi executado, porm, algum dos comandos existentes nele esto
especificados incorretamente

Shell Script

Boas Prticas na escrita de Shell Scripts

- Comente o cdigo
- Deixe o cdigo organizado
- Separe o cdigo usando funes (Se necessrio)
- Trate a Sada

Shell Script

Exemplo de Shell Script


vi status.sh
#!/bin/bash # Define o interpretador dos comandos
date
df -h
free

Executando o Shell Script


- O script deve ser executvel.
$ chmod +x status.sh
$ ./status.sh

Shell Script

Melhorando a sada na tela


vi status.sh
#!/bin/bash # Define o interpretador dos comandos
echo Data/Hora:
date
echo Espao livre nas parties do sistema:
df -h
echo Memria disponvel no sistema:
free

OBS: A opo -n no comando echo no emite uma nova linha ao final do


contedo ecoado.
Ex: echo -n xyz

Shell Script

Interagindo com o Usurio


vi status.sh
#!/bin/bash # Define o interpretador dos comandos
echo Verificao do sistema, devo prosseguir [sn] ?
read RESPOSTA
test $RESPOSTA = n && exit
echo Data/Hora:
date
echo Espao livre nas parties do sistema:
df -h
echo Memria disponvel no sistema:
free

Shell Script

Melhorando o cdigo
#!/bin/bash # Define o interpretador dos comandos
# Shell Script que exibe informaes sobre disco/memria
# Desenvolvido por: Frederico Madeira <fred@madeira.eng.br>
# Pede confirmao antes de executar o shell
echo Verificao do sistema, devo prosseguir [sn] ?
read RESPOSTA
# Se foi digitado n, encerre o script
test $RESPOSTA = n && exit
# Data e hora corrente
echo Data/Hora:
date
# Exibe informao sobre a partio
echo Espao livre nas parties do sistema:
df -h
# Exibe informao sobre a memria
echo Memria disponvel no sistema:
free

Shell Script
Prtica 1
Faa um script chamado "testa-arquivos.sh", que pede ao usurio para
digitar um arquivo
Exemplo de uso:
$ testa-arquivos
Digite o arquivo: /etc/passwd
O arquivo digitado foi /etc/passwd

Shell Script
Resposta Prtica 1
#!/bin/bash # Define o interpretador dos comandos
# Este script recebe um nome de um arquivo como input do usurio
# Desenvolvido por: Frederico Madeira <fred@madeira.eng.br>
# Pede confirmao antes de executar o shell
echo -n Digite o nome do arquivo :
read FILE
# Informa o nome do arquivo digitado.
Echo O arquivo digitado foi$FILE

Shell Script

Prtica 2
Melhore o script "testa-arquivos.sh", que pede ao usurio para
digitar um arquivo e testa se este arquivo existe. Se sim, diz se
um arquivo ou um diretrio.
Utilize o comando test.
Exemplo de uso:
$ testa-arquivos
Digite o arquivo: /naoexiste
O arquivo '/naoexiste' no foi encontrado
$ testa-arquivos
Digite o arquivo: /tmp
/tmp um diretrio
$ testa-arquivos
Digite o arquivo: /etc/passwd
/etc/passwd um arquivo

Shell Script

Resposta Prtica 2
#!/bin/bash # Define o interpretador dos comandos
# Este script recebe um nome de um arquivo como input do usurio
# Desenvolvido por: Frederico Madeira <fred@madeira.eng.br>
# Pede confirmao antes de executar o shell
echo -n Digite o nome do arquivo :
read FILE
# Informa o nome do arquivo digitado.
Echo O arquivo digitado foi$FILE
# Realizao dos testes:
# Testa se um diretrio
test -d "$FILE" && echo "$FILE um diretrio"
# Testa se um arquivo
test -f "$FILE" && echo "$FILE um arquivo"
# Testa se existe
test ! -e "$FILE" && echo "$FILE no existe"

Shell Script

Prtica 3
Melhore o script "testa-arquivos.sh", que pede ao usurio para
digitar um arquivo e testa se este arquivo existe. Se sim, diz se
um arquivo ou um diretrio.
Utilize o comando if.
Exemplo de uso:
$ testa-arquivos
Digite o arquivo: /naoexiste
O arquivo '/naoexiste' no foi encontrado
$ testa-arquivos
Digite o arquivo: /tmp
/tmp um diretrio
$ testa-arquivos
Digite o arquivo: /etc/passwd
/etc/passwd um arquivo

Shell Script

Resposta Prtica 3
# Realizao dos testes:

if [ -d "$RESP" ]
then
echo "$RESP um diretrio"
else
if [ -f "$RESP" ]
then
echo "$RESP um arquivo"
else
if [ ! -e "$RESP" ]
then
echo "$RESP nao existe"
fi
fi
fi

Shell Script

Prtica 4
Crie um script que exiba informaes sobre o sistema. Ele deve ter a seguinte
interface:
1) Espao livre nos discos
2) Status da Memria do sistema
3) Informaes sobre o Processador
4) Endereo IP
5) Quem est logado no sistema

Shell Script

Resposta Prtica 4

#!/bin/bash # Define o interpretador dos comandos


# Exibio do Menu
echo "1) Espao Livre nos Discos"
echo "2) Status da Memria do Sistema"
echo "3) Informaes sobre o Processador"
echo "4) Endereo IP"
echo "5) Quem est logado no sistema"
echo ""
echo -n "Escolha a opo: "
# Leitura da opo do usurio
read OPCAO

Shell Script
Resposta Prtica 4 - Cont

# Trata a opo escolhida pelo usurio


case $OPCAO in
1) df -h
;;
2) free
;;
3) cat /proc/cpuinfo
;;
4) /sbin/ifconfig
;;
5) w
;;
*) echo "No foi escolhida uma opo vlida"
;;
esac

Shell Script

Prtica 5
Crie um script que faa um backup da pasta /etc e envie para um servidor
remoto via NFS.
O nome do arquivo de backup deve ser: bkp_etc_IP_AAAAMMDD.tar.gz, onde:
IP=IP do computador
AAAA = ano com 4 dgitos
MM = ms com 2 dgitos
DD = dia com 2 dgitos

Shell Script
Resposta Prtica 5
Atravs do man do comando date vemos que:
$ date +%d
27
$ date +%m
03
$ date +%Y
03
#!/bin/bash
#Definio de variveis
IP=192.168.0.XX
DIA=`date +%d`
MES=`date +%m`
ANO=`date +%Y`
ARQUIVO_BKP= bkp_etc_$IP_$ANO$MES$DIA.tar.gz
DIR_TMP=/tmp

Shell Script

Resposta Prtica 5 - Cont


# REALIZANDO BACKUP
# Acesso o diretrio temporrio
cd $DIR_TMP
# Fao o backup da pasta
tar cvfz $ARQUIVO_BKP /etc
# ENVIANDO VIA NFS
# Criao do pto de montagem
mkdir /media/rede
# montanto a pasta NFS
mount -t nfs 192.168.0.xx:/dir /media/rede
# Copiando o arquivo de backup para o servidor e se tiver sucesso, remova o
# arquivo original
cp $ARQUIVO_BKP /media/rede && rm $ARQUIVO_BKP
# Desmontando a pasta
umount /media/rede

ADMINISTRAODEREDESI
LINUX
ShellScript
FredericoMadeira
LPIC1,CCNA
fred@madeira.eng.br
www.madeira.eng.br

Você também pode gostar