Post on 27-Jun-2015
description
Fundamentos de Programação Aplicada a Redes Shell ScriptLinux Shell
Frederico MadeiraLPIC1, LPIC2, CCNAfred@madeira.eng.brwww.madeira.eng.br
Shell
“É qualquer interface de usuário para o SO Unix. que receba
do usuário um input e a converta em instrução para que o SO
entenda.”
Shell Script
“É um arquivo que contém uma série de comandos, funções,
rotinas que são executadas quando o shell script é executado.
Se digitarmos comando a comando diretamente no shell, o
resultado será o mesmo”
Shell
Exemplos de ShellBourne(sh), C shell (csh), Korn (ksh) - comercial, bash (free)
Fonte: Linux Magazine, vol 01. Por Julio Cezar Neves
Qual Shell estou usando ?[root@localhost fred_m]# echo $SHELL/bin/bash
Shell
– Definem como o programa será executado.
– Consiste em uma ou mais palavras, que são separadas por espaços ou TABs.
– A primeira palavra é o comando
– As palavras restantes são os argumentos/parâmetros
Ex:
• [root@localhost fred_m]# vi teste.txt
• [root@localhost fred_m]# ls /tmp
• [root@localhost fred_m]# ls
Comandos
– Informação extra passada para a execução do comando
– Podem ser nome de objetos ou definir como o comando irá funcionar
– Ex: [root@localhost fred_m]# cat /proc/cpuinfo
– Opções
• Argumentos especiais que dá ao comando instruções específicas de como se comportar
• Usualmente consiste em um – seguido de uma letra
EX: – [root@localhost fred_m]# uname -s– [root@localhost fred_m]# uname -m– [root@localhost fred_m]# uname -p– [root@localhost fred_m]# uname -a
• Podem conter seus próprios argumentos
EX: – [root@localhost fred_m]# lp -d lp1 -h myfile
Onde: -d define a impressora lp1 | -h imprimir banner | myfile arquivo a ser impress
Argumento
- Arquivos Regulares
– Arquivos de texto
- Arquivos Executáveis
– Também chamados de programas
– São executados como comandos
– Podem ser:
• Compilados
• Shell Scripts
- Diretórios
Arquivos
• Identificada quando o Shell encontra um sinal de igualdade (=)
• Separa dois campos sem espaços em branco, entre o (=).
• Criam variáveis
• Variáveis podem ser lidas pelo comando echo
Ex:
Errado:
[root@madeira ~]# $VAR=a
bash: =a: command not found...
Certo:
[root@madeira ~]# VAR=ab
Atribuições
Armazenam informações durante execução do script ou sistema
– Atribuindo valor
VARIAVEL=“Teste Linux”
– Exibindo o valor
echo $VARIAVEL
– Atribuindo a saída de um comando
VARIAVEL=$(date)
VARIAVEL=`date`
– Limpando uma variável
unset VARIAVEL
– Listando todas as variáveis
env ou set
Variáveis
Aspas “ ”
Ex.: echo “Sou o usuario $USER”
Apóstrofos ' '
Ex.: echo 'Sou o usuario $USER'
Ex.: echo 'Linha com espaços :'
Barra invertida \
Ex.: echo \\
Crase
ex.: echo “Este host chama-se `uname -n`”
Parêteses
ex.: echo “Este host chama-se $(uname -n)”
Prática
– Atribuindo valor
NOME=”Frederico Madeira”
– Exibindo o valor
echo $VARIAVEL
– Atribuindo a saída de um comando
HOJE=$(date +"%Y%m%d")
echo $HOJE
AGORA=`+"%H:%M"`
echo $AGORA
– Visualizando todas as variáveis
set
env
– Limpando uma variável
unset NOME
unset HOJE AGORA
Prática
- MetacaracteresCaracteres com significado especialEx: &, >, <, |
- Caracteres Coringas (wildcards)Caracteres especiais usados junto com os argumentosEx: *, ?, [abc], [a-c],[!0-9]
Características de um Shell
- Entrada Padrão (stdin) Entrada padrão de comandos para o shellEx: teclado, pipe
- Saída Padrão (stdout) Saída padrão do do comandoEx: tela, arquivo
- Saída de Erro (stderr) Saída padrão para erros de execução do comandoEx: tela, arquivo
Conceitos
É Case Sensitive
.. - Indica o diretório anterior
. - Indica o diretório atual
~ - Indica o diretório home do usuário
# - Comentário
[fred_m@localhost teste]$ - Indica conexão sem privilégios de root
[root@localhost teste]# - Indica conexão com privilégios de root
Conceitos
$ - Definição de variáveis
.xxxx - arquivos ocultos
| - pipe
& (como bg) - Envia aplicativo para background
--help – Obtém ajuda sobre utilização do comando
Conceitos
> : Redireciona a saída padrão do comando a esquerda para o arquivo a direita, sobrescrevendo todo o conteúdo.
>> : Redireciona a saída padrão do comando a esquerda para o arquivo a direita, adicionando o conteúdo ao final do arquivo.
| : Pipe, redireciona a saída padrão do primeiro comando para a entrada padrão 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
Redirecionamento
stderr (2): Saída de Erro.
Para redirecionar a saída de erro, usamos: 2>
stdout(1): Saída do comando
Para redirecionar a saída do comando, usamos: 1>
Para redirecionar ambas usamos: &>
Ex:
Saída 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
Saída de erro
[fred@localhost Linux]$ ping www.madeira.eng.br1
ping: unknown host www.madeira.eng.br1
Redirecionamento Saída Padrão/Erro
Comando ok, redir saída de erro
[fred@localhost Linux]$ ping -c 1 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 saída de erro
[fred@localhost Linux]$ ping -c 1 www.madeira.eng.br1 2> /dev/null
Comando ok, redir saída do comando
[fred@localhost Linux]$ ping -c 1 www.madeira.eng.br 1> /dev/null
Comando errado, redir saída 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 saída do comando e saída de erro
[fred@localhost Linux]$ ping -c 1 www.madeira.eng.br &> /dev/null
Comando errado, redir saída do comando e saída de erro
[fred@localhost Linux]$ ping -c 1 www.madeira.eng.br1 &> /dev/null
Redirecionamento Saída Padrão/Erro
&& - equivalente ao E. O próximo comando só será executado se o anterior
tiver sido bem sucedido.
|| - equivalente ao OU. Se o comando anterior não for bem sucedido, será executado o próximo 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 “Formatação OK” || echo “Erro na formatação”
Lógica
Prática
1. Redirecione a saída de erro dos comandos abaixo para o arquivo /tmp/error.log
2. Repita a questão anterior, redirecionando também a saída padrão para /tmp/saida.log (Não sobrescreva os arquivos)
3. Execute os comandos abaixo e retorne as seguintes mensagens (Execute o com ando com um usuário normal):
Redirecionamento Saída Padrão/Erro
Comando Mensagem OK
Mensagem em caso de NOK
cat /etc/passwd Listagem OK Falha na listagem
cat /etc/audit Listagem OK Falha na listagem
tar xvfz teste.tar.gz
ifconfig ppp0
ifconfig eth0
Fundamentos de Programação Aplicada a Redes Shell ScriptLinux Shell
Frederico MadeiraLPIC1, LPIC2, CCNAfred@madeira.eng.brwww.madeira.eng.br