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.574 ]

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

Instalação do Fail2Ban no CentOS 7

Instalação do Docker no CentOS 7

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

VLAN Tagging nos sistemas GNU/Linux derivados do Red Hat

Tutorial de instalação do Squid no CentOS

Leitura recomendada

Programando em Shell Script para iniciantes

Slackware - Script de instalação de programas

Introdução ao Fortran (parte 1)

Backup automático em Shell Script

Simples e rápido: matando todos os processos de um usuário

  
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