Introdução ao Shell Script

O artigo traz uma introdução a Shell Script. Criaremos alguns exemplos práticos para que você consiga criar seus próprios scripts de automatização. Shell Script é um tipo de linguagem de programação que é utilizado por administradores Linux/Unix. Também é possível criar scripts para outros sistemas operacionais, mas o meu foco aqui será mesmo os sistemas Linux e suas distribuições.

[ Hits: 20.605 ]

Por: Renato Diniz Marigo em 15/02/2016 | Blog: http://www.renatomarigo.com.br


Usando laços e condicionais em Shell Script



Usando o laço FOR em Shell Script

Podemos usar um laço for, que pode ser interpretado da seguinte maneira: Enquanto uma condição for verdadeira faça os seguintes comandos.

Para ilustrar este exemplo criaremos um documento de texto chamado lista.txt com os seguintes dados:

Esta é a linha: 1
Esta é a linha: 2
Esta é a linha: 3
Esta é a linha: 4
Esta é a linha: 5
Esta é a linha: 6
Esta é a linha: 7
Esta é a linha: 8
Esta é a linha: 9
Esta é a linha: 10

O script a seguir vai ler as linhas do arquivo acima:

#!/bin/bash
for line in $(cat lista.txt)
do
echo "$line"
done

A seguir mostro a execução dele na tela:

Usando o laço While em Shell Script

Nós podemos usar o laço while que é mais simples que o laço for, neste caso também leremos as linhas do arquivo lista.txt:

#!/bin/bash
while read LINE
do
echo $LINE
done < lista.txt

A seguir mostro a execução dele na tela:

Usando o Case em Shell Script

Agora iremos usar a condição case que é muito útil quando quiser dar mais opções para o usuário.

Neste script criaremos duas opções para o usuário, uma opção será listar o conteúdo do /etc/init.d, a outra opção será listar o conteúdo do diretório /etc/kernel, caso o usuário digite qualquer outra coisa diferente destas duas opções será apresentado uma mensagem de erro para o usuário.

A seguir mostro o script:

#!/bin/bash
echo "Script criado para o uso Case"
echo "Opção 1: Listar o conteúdo de /etc/init.d"
echo "Opção 2: Listar o conteúdo de /etc/kernel"
read OPCAO
case $OPCAO in
        1)
        echo "Você escolheu a opção $OPCAO "
        ls /etc/init.d;;
        2)
        echo "Você escolheu a opção $OPCAO "
        ls /etc/kernel;;
        *)echo "Você não digitou uma opção válida";;
esac

A seguir mostro a execução dele na tela:

Criando um menu em Shell Script

Neste próximo script apresentaremos para o usuário um menu de opções, que podemos com este exemplo criar quantas opções quiser, este será bem simples somente para mostrar a estrutura lógica.

Usaremos o exemplo acima para exemplificar somente adicionando uma terceira opção que será a opção de sair do script.

É muito simples transformar o script acima em um menu, o que precisamos fazer é adicionar um laço While no script e também adicionarmos o comando "sleep" para que consigamos ver na tela o resultado do comando:

#!/bin/bash
while true
do
clear;
#Scripts e comandos
done

Nosso script de menu completo ficará assim:

#!/bin/bash
while true
do
clear;
echo "Script criado para o uso Case"
echo "Opção 1: Listar o conteúdo de /etc/init.d"
echo "Opção 2: Listar o conteúdo de /etc/kernel"
echo "Opção 3: Sair"
read OPCAO
case $OPCAO in
        1)
        echo "Você escolheu a opção $OPCAO "
        ls /etc/init.d
        sleep 3;;
        2)
        echo "Você escolheu a opção $OPCAO "
        ls /etc/kernel
        sleep 3;;
        3)
        echo "Você escolheu a opção $OPCAO "
        sleep 3
        exit;;
        *)echo "Você não digitou uma opção válida"
        sleep 3;;
esac
done

A seguir mostro a execução dele na tela:

Usando o IF em Shell Script

Descrevo aqui uma simples opção onde verificaremos se o diretório (/etc/teste) existe ou não.

Para este tipo de verificação usamos a seguinte sintaxe:

#!/bin/bash
if [ -e "/etc/teste" ]
then
echo "O diretório existe"
else
echo "O diretório não existe"
fi

Obs.: note que no comando if existe a opção -e, que significa "Se existir", você pode seguir a tabela a seguir para criar as suas próprias condicionais:

-eq	Igual
-ne	Diferente
-gt	Maior
-lt	Menor
-o	Ou
-d	Se for um diretório
-e	Se existir
-z	Se estiver vazio
-f	Se conter texto
-o	Se o usuário for o dono
-r	Se o arquivo pode ser lido
-w	Se o arquivo pode ser alterado
-x	Se o arquivo pode ser executado

A seguir mostro a execução dele na tela:
Para entender melhor este último conceito, entenderemos o comando "test", que é ótimo para fazer testes em números, textos e arquivos, lembrando que estas opções podem e devem ser usadas nas condicionais de Shell Script.

Um outro exemplo que posso mostrar é quando perguntamos algo ao usuário e dependendo do que for digitado, seguirá um caminho. Apresentaremos para o usuário a pergunta "Quer listar o conteúdo de "/etc/init.d", caso positivo será listado senão não será feito nada.

Para que isso ocorra a nossa sintaxe deve ficar assim:

#!/bin/bash
printf "Deseja exibir estas informações /etc/init.d ?"
read OPCAO
if [[ $OPCAO == "S" || $OPCAO == "s" ]]
then
echo 'O conteúdo será exibido'
ls /etc/init.d
else
echo 'O conteúdo não será exibido'
echo ""
fi

A seguir mostro a execução dele na tela:

Opções úteis do comando test

Descrevo aqui algumas opções, porém todas as opções podem ser verificadas usando o comando que consulta as "Man Pages":

# man test

    File operators:
    
      -a FILE        True if file exists.
      -b FILE        True if file is block special.
      -c FILE        True if file is character special.
      -d FILE        True if file is a directory.
      -e FILE        True if file exists.
      -f FILE        True if file exists and is a regular file.
      -g FILE        True if file is set-group-id.
      -h FILE        True if file is a symbolic link.
      -L FILE        True if file is a symbolic link.
      -k FILE        True if file has its `sticky' bit set.
      -p FILE        True if file is a named pipe.
      -r FILE        True if file is readable by you.
      -s FILE        True if file exists and is not empty.
      -S FILE        True if file is a socket.
      -t FD          True if FD is opened on a terminal.
      -u FILE        True if the file is set-user-id.
      -w FILE        True if the file is writable by you.
      -x FILE        True if the file is executable by you.
      -O FILE        True if the file is effectively owned by you.
      -G FILE        True if the file is effectively owned by your group.
      -N FILE        True if the file has been modified since it was last read.
    
      FILE1 -nt FILE2  True if file1 is newer than file2 (according to
                       modification date).
    
      FILE1 -ot FILE2  True if file1 is older than file2.
    
      FILE1 -ef FILE2  True if file1 is a hard link to file2.
    
    All file operators except -h and -L are acting on the target of a symbolic
    link, not on the symlink itself, if FILE is a symbolic link.
    
    String operators:
    
      -z STRING      True if string is empty.
    
      -n STRING
         STRING      True if string is not empty.
    
      STRING1 = STRING2
                     True if the strings are equal.
      STRING1 != STRING2
                     True if the strings are not equal.
      STRING1 < STRING2
                     True if STRING1 sorts before STRING2 lexicographically.
      STRING1 > STRING2
                     True if STRING1 sorts after STRING2 lexicographically.


Página anterior     Próxima página

Páginas do artigo
   1. Introdução a Shell Script
   2. Nosso segundo script
   3. Declarando variáveis
   4. Interagindo com o usuário
   5. Usando laços e condicionais em Shell Script
   6. Dicas úteis para Shell Script
   7. Enviando dados a um servidor de FTP ou SFTP
Outros artigos deste autor

Zabbix Server 2.0 no Ubuntu Server 12.04 - Instalação e configuração

WordPress com Docker

Nagios 3 + NagiosQL no Ubuntu Server 12.04

VLAN Tagging nos sistemas GNU/Linux derivados do Red Hat

Instalação do CentOS Atomic para Gerenciamento de Containers Docker

Leitura recomendada

Como trabalhar com funções em bash

Criando um banner em flash no Linux

Personalize seu shell na entrada de seu logon

expr - Definição e uso do comando

AWK - Introdução

  
Comentários
[1] Comentário enviado por fabio em 15/02/2016 - 17:21h

Meus parabéns pelo ótimo trabalho!

[2] Comentário enviado por renizgo em 15/02/2016 - 18:10h


[1] Comentário enviado por fabio em 15/02/2016 - 17:21h

Meus parabéns pelo ótimo trabalho!


Obrigado, espero ter ajudado!

[3] Comentário enviado por azk em 16/02/2016 - 00:27h

Simples, objetivo e bem exemplificado.
Uma ótima contribuição.
congratz bro!

[4] Comentário enviado por GabrielSilva em 16/02/2016 - 11:38h

Muito bom o seu tutorial. Obrigado pela ajuda!

[5] Comentário enviado por Freud_Tux em 16/02/2016 - 18:25h

Parabéns!

T+

[6] Comentário enviado por wagnerfs em 16/02/2016 - 22:08h

Parabéns pelo artigo! Vai ser de grande ajuda para àqueles que estão começando no mundo do Shell Script.
_________________________
Wagner F. de Souza
Técnico/Instrutor de Informática
"GNU/Linux for human beings."
LPI ID: LPI000297782

[7] Comentário enviado por renizgo em 16/02/2016 - 23:16h


[6] Comentário enviado por K666 em 16/02/2016 - 22:08h

Parabéns pelo artigo! Vai ser de grande ajuda para àqueles que estão começando no mundo do Shell Script.
_________________________
Wagner F. de Souza
Técnico/Instrutor de Informática
"GNU/Linux for human beings."
LPI ID: LPI000297782


Sim com certeza, obrigado pelo comentário.

[8] Comentário enviado por renizgo em 16/02/2016 - 23:25h


[3] Comentário enviado por azk4n em 16/02/2016 - 00:27h

Simples, objetivo e bem exemplificado.
Uma ótima contribuição.
congratz bro!


Opa obrigado pelo comentário!!!

[9] Comentário enviado por dk.d4rk0 em 17/02/2016 - 02:00h

Parabéns pelo artigo!

[10] Comentário enviado por renizgo em 17/02/2016 - 21:42h


[9] Comentário enviado por dk.d4rk0 em 17/02/2016 - 02:00h

Parabéns pelo artigo!


Valeu!!!!

[11] Comentário enviado por mlmlightman7 em 18/02/2016 - 03:09h

Cara, perfeito. Muito bom mesmo. Parabéns !!!

[12] Comentário enviado por BRKsCosta em 19/02/2016 - 10:47h

Eu fiz exatamente o que está lá, mas quando vou executar o arquivo não dá :/. Mas desde já meus parabéns. Estou usando o editor nano.

[13] Comentário enviado por xerxeslins em 23/02/2016 - 10:44h

Parabéns! Artigo favoritado. Abraço!
--
https://goo.gl/uu8OUX

[14] Comentário enviado por removido em 23/02/2016 - 12:41h

Parabéns cara! Vou favoritar o artigo pq é realmente muito bom! O artigo está claro, com uma excelente organização e com uma didática que não deixa dúvidas!

Continue com o trabalho. Valeu!

[15] Comentário enviado por renizgo em 23/02/2016 - 16:54h


[12] Comentário enviado por BRKsCosta em 19/02/2016 - 10:47h

Eu fiz exatamente o que está lá, mas quando vou executar o arquivo não dá :/. Mas desde já meus parabéns. Estou usando o editor nano.


É tranquilo, o que aparece para ti?

Basicamente você cria o arquivo com o nano no seu caso, depois pelo terminal você dá permissão de execução a ele # chmod +x seuscript, depois executa ele com # ./seuscript.

Vai dar certo!!!

[16] Comentário enviado por renizgo em 23/02/2016 - 16:55h


[14] Comentário enviado por Degomes em 23/02/2016 - 12:41h

Parabéns cara! Vou favoritar o artigo pq é realmente muito bom! O artigo está claro, com uma excelente organização e com uma didática que não deixa dúvidas!

Continue com o trabalho. Valeu!


Obrigado, que bom que conseguir ajudar!!!

[17] Comentário enviado por albfneto em 27/02/2016 - 15:17h

é muito bom. Favoritado.
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts