Fundamentos de Programação Aplicada a Redes ­ 
Shell Script
Linux Shell
                                       Frederico Madeira
                                     LPIC­1, LPIC­2, CCNA
                                     fred@madeira.eng.br
                                      www.madeira.eng.br
Shell

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 Shell
Bourne(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
Comandos

– 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
Argumento

   –   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
Arquivos

- 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
Atribuições

•   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
Variáveis
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
Prática
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
Características de um Shell

- Metacaracteres
Caracteres com significado especial
Ex: &, >, <, |


- Caracteres Coringas (wildcards)
Caracteres especiais usados junto com os argumentos
Ex: *, ?, [abc], [a-c],[!0-9]
Conceitos


- Entrada Padrão (stdin)
Entrada padrão de comandos para o shell
Ex: teclado, pipe


- Saída Padrão (stdout)
Saída padrão do do comando
Ex: tela, arquivo


- Saída de Erro (stderr)
Saída padrão para erros de execução do comando
Ex: 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
Redirecionamento

> : 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 Saída Padrão/Erro
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
Lógica


&& - 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”
Redirecionamento Saída Padrão/Erro
Prática

1. Redirecione a saída de erro dos comandos abaixo para o arquivo /tmp/error.log

tar xvfz teste.tar.gz
ifconfig ppp0
ifconfig eth0

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):
                  Comando                    Mensagem         Mensagem em caso de NOK
                                                OK
cat /etc/passwd                             Listagem OK      Falha na listagem

cat /etc/audit                              Listagem OK      Falha na listagem
Fundamentos de Programação Aplicada a Redes ­ 
Shell Script
Linux Shell
                                       Frederico Madeira
                                     LPIC­1, LPIC­2, CCNA
                                     fred@madeira.eng.br
                                      www.madeira.eng.br

Linux shell

  • 1.
    Fundamentos de Programação Aplicada a Redes ­  Shell Script Linux Shell Frederico Madeira LPIC­1, LPIC­2, CCNA fred@madeira.eng.br www.madeira.eng.br
  • 2.
    Shell Shell “É qualquer interfacede 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”
  • 3.
    Shell Exemplos de Shell Bourne(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
  • 4.
    Comandos – Definem comoo 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
  • 5.
    Argumento – 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
  • 6.
    Arquivos - 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
  • 7.
    Atribuições • 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
  • 8.
    Variáveis Armazenam informações duranteexecuçã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
  • 9.
    Prática 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)”
  • 10.
    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
  • 11.
    Características de umShell - Metacaracteres Caracteres com significado especial Ex: &, >, <, | - Caracteres Coringas (wildcards) Caracteres especiais usados junto com os argumentos Ex: *, ?, [abc], [a-c],[!0-9]
  • 12.
    Conceitos - Entrada Padrão(stdin) Entrada padrão de comandos para o shell Ex: teclado, pipe - Saída Padrão (stdout) Saída padrão do do comando Ex: tela, arquivo - Saída de Erro (stderr) Saída padrão para erros de execução do comando Ex: tela, arquivo
  • 13.
    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
  • 14.
    Conceitos $ - Definiçãode variáveis .xxxx - arquivos ocultos | - pipe & (como bg) - Envia aplicativo para background --help – Obtém ajuda sobre utilização do comando
  • 15.
    Redirecionamento > : Redirecionaa 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
  • 16.
    Redirecionamento Saída Padrão/Erro 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
  • 17.
    Redirecionamento Saída Padrão/Erro Comandook, 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
  • 18.
    Lógica && - equivalenteao 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”
  • 19.
    Redirecionamento Saída Padrão/Erro Prática 1.Redirecione a saída de erro dos comandos abaixo para o arquivo /tmp/error.log tar xvfz teste.tar.gz ifconfig ppp0 ifconfig eth0 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): Comando Mensagem Mensagem em caso de NOK OK cat /etc/passwd Listagem OK Falha na listagem cat /etc/audit Listagem OK Falha na listagem
  • 20.
    Fundamentos de Programação Aplicada a Redes ­  Shell Script Linux Shell Frederico Madeira LPIC­1, LPIC­2, CCNA fred@madeira.eng.br www.madeira.eng.br