Pular para o conteúdo

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.
Renato Diniz Marigo renizgo
Hits: 23.282 Categoria: Shell Script Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Parte 5: 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:
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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.


O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   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

Nagios 3 + NagiosQL no Ubuntu Server 12.04

VLAN Tagging nos sistemas GNU/Linux derivados do Red Hat

Debian Linux 4 iniciando o Windows como terminal server

Instalação do WordPress no CentOS 7

Instalação de um Servidor Web

Algoritmos em Shell Script

Cobrando com o SQUID

Introdução a LUA, uma poderosa linguagem de programação

Programando em Shell Script para iniciantes

Programando em shell script (conceitos básicos)

#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.
#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: Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva.

Contribuir com comentário

Entre na sua conta para comentar.