Post on 24-May-2015
description
Muitas vezes é necessário fazer um mesmo comando ou conjunto de comandos para
um determinado fim no terminal linux, com o passar do tempo isso pode acabar se
tornando cansativo e até estressante. Para facilitar essa situação e aliviar ações
repetitivas podemos utilizar o shell Scripts.
De maneira grosseira um Shell Scritp nada mais é que uma sequência de comandos do
próprio Linux que são executados em uma determinada sequência para um
determinado fim.
Para criar um shell script é necessário seguir alguns passos:
1.1. Crie um arquivo
No terminal ou modo gráfico crie um arquivo que possa ser editado para que se torne o
primeiro shell script a ser criado.
Exemplo:
Listagem 1: Criação do shell1.sh
touch shell1.sh
Figura 1: Criação do arquivo shell1.sh
Onde:
touch - Comando utilizado para criar um arquivo vazio.
1.2. Dê direito de execução para o arquivo criado
Para que seja possível executar o shell script é preciso atribuir ao mesmo o direito de
execução, para isso é necessário usar o comando chmod com a opção +x.
Exemplo:
Listagem 2: Adição do direito de execução ao arquivo shell1.sh
chmod +x shel11.sh
Figura 2: Atribuindo direito de execução ao arquivo shell1.sh
Antes de atribuir o direito de execução, o arquivo era visto pelo terminal da cor padrão
(neste caso preto), com o direito de execução agora passou a ser verde.
Figura 3: Visão do arquivo shell1.sh antes da atribuição do direito de execução para o
arquivo shell1.sh
Abaixo é possível ver a imagem após execução do chmod.
Figura 4: Visualização do arquivo shell1.sh após a atribuição do direito de execução
para o mesmo
1.3. Abra o arquivo recém criado para editá-lo
Neste artigo foi utilizado o editor de texto vim que pode ser acessado através terminal,
porém fica a critério do leitor utilizar qualquer editor gráfico como gedit para alterar o
arquivo recém criado.
Exemplo:
Listagem 3: Abertura do arquivo shell1.sh para edição
vim shell1.sh
Figura 5: Figura demonstrando a sintaxe do comando vim para edição do arquivo
shell1.sh
A primeira linha escrita do shell script é utilizada para informar qual modelo de shell
será utilizado para criar o shell script (ksh, sh, bash), a linha pode ser vista abaixo:
Listagem 4: Visão da primeira linha shell script
#!/bin/bash
Código visto no vim:
Figura 6: Visão do trecho de código inicial no terminal
Abaixo é possível ver o código quando editado pelo gedit.
Figura 7: Visão do código do shell script através do gedit
Esta linha especifica qual shell será responsável por executar o shell scritp que será
criado, neste exemplo o shell responsável será o bash que está localizado na pasta /bin.
Após a linha que contém o código refrente ao tipo de shell é possível inserir os
comandos desejados.
Neste exemplo vamos fazer um shell que abre a baia do leitor de cd e após 3 segundos
a mesma será fechada. O código pode ser visto abaixo:
Listagem 5: Shell Script que abre a gaveta do leitor de cd
#!/bin/bash
echo "Abrindo gaveta..."
eject
sleep 1
echo "A gaveta será fechada..."
sleep 1
eject -t
Figura 8: Figura com o conteúdo do shell script shell1.sh
Onde:
echo - Comando responsável por exibir uma mensagem na tela.
eject - Comando responsável por fazer a baia do leitor de cd ejectar.
eject -t - Comando reponsável por fazer a baia do leito de cd voltar para seu
estado inicial.
sleep - Comando que pausa um o terminal por um tempo em segundos pré
determinado.
1.3.1 Inserão de comentários
Os comentários são de suma importância para deixar informações para manipulação
futura do shell script. Para inserir um comentário em códigos de shell script basta
inserir o #(cerquilha ou jogo da velha) na frente da linha que você deseja comentar:
Sintaxe: #comentário
Onde:
comentário – Comentário em si.
Exemplo:
Listagem 6: Shell Script com comentário
#!/bin/bash
#Eu sou um comentário.
echo “Existe um comentário neste shell script”
Figura 10: Figura que demonstra a execução do shell1.sh
Caso o shell1.sh esteja em diretório diferente do qual você se localiza, execute shell
script da seguinte maneira:
Sintaxe: /.../diretorio/shel1.sh
Onde:
/.../diretorio - diretório no qual o shell está localizado.
Exemplo: /tmp/maguscode/shel1.sh
Figura 11: Execução do shell1.sh a partir de um diretório diferente
A utilização de variáveis em shellscript é muito importante como em qualquer
linguagem de programação. Para criar uma variável em shell script é bem simples,
basta seguir a sintaxe abaixo:
Sintaxe: nome_variável=VALOR
Onde:
nome_variavel – Nome da variável.
VALOR – Valor atribuído a variável criada.
Exemplos:
Neste exemplo foram criadas as variáveis “cor_casa” que tem como atributo o valor
“verde”, e a variável “numero” que tem como atributo o valor 32.
Listagem 7: Criação de variável
cor_casa=verdenumero=32
Para se utilizar a variável basta utilizar o $ (Cifrão) na frente do nome da variável,
como pode ser visto no código do shell script baixo.
Listagem 8: Exemplo de shell script que exibe conteúdo da variável na tela
#!/bin/bashcor_casa=VERDEecho “A cor da casa é $cor_casa”exit
A saída será: A cor da casa é VERDE
2.1 Utilizando saída de comando como valor de variável
Para direcionar a saída de um determinado comando para uma variável, basta escolher
uma das seguintes sintaxes:
Sintaxe: nome_variavel=$(comando) ou nome_variavel=`comando`
Onde:
nome_variavel – Nome da variável que receberá a saída do comando.
comando – Comando a ser executado.
No exemplo será criado um shell script chamado total.sh que tem como objetivo contar
o total de linhas (arquivos) que um diretório tem.
Listagem 9: Script shell que conta o total de arquivos em um diretório
#!/bin/bash
total_linhas=$(ls | wc -l)
echo “Existe $total_linhas neste diretório.”
Esse script shell exibe na tela a quantidade de arquivos existe em um determinado
diretório.
Figura 12: Demonstração do total de arquivos do diretório /tmp
Saída do script executado:
Figura 13: Saída da execução do shell script total.sh
Figura 13: Saída da execução do shell script total.sh
2.2 Capturar valores do teclado
Uma maneira de capturar o que um determinado usuário digita é atravez do comando
read.
Sintaxe: read $variavel;
Onde:
$variavel – Nome da variável que recebera o valor do teclado.
Será feito shell script chamado qualnome.sh no qual o usuário digita um nome e o
mesmo é exibido na tela.
Listagem 10: Exemplo utilizando captura do valor da variável através do teclado
#!/bin/bash
echo Qual seu nome: read nome;
echo “Bem vindo $nome”
exit
Figura 14: Nome do usuário digitado durante a execução do shellscript
3.1 Comando if
O comando if é um comando para tomada de decisão. O mesmo realiza uma
determinada ação quando um requisito é atendido.
Sintaxe:
if [ condição ]; then
ação
fi
Onde:
condição - Condição para continuar no laço
ação - Comandos ou comportamentos que serão executados dentro do laço
Será criado um exemplo no qual o usuário digitará um valor na tela e só sera exibida
uma mensagem na tela caso esse valor seja igual ao numero 3.
Listagem 11: Utilização do comando if
#!/bin/bash
echo -n "Digite um algo: "
read valor_digitado
if [ "$valor_digitado" -eq "3" ];
then
echo Você digitou o numero 3
fi
Figura 15: Demonstração do código com o comando condicional if no shell script
Figura 16: Demonstração da saida do shell script que contém um comando condicional
if
3.1 Comando if/else
O comando if/else é um comando para tomada de decisão. O if faz com que uma
determinada ação seja executada quando um requisito é atendido, caso contratrio será
utilizado o que estiver no bloco do comando else.
Sintaxe:
if [ condição ]; then
ação
fi
Onde:
condição - Condição para continuar no laço
ação - Comandos ou comportamento que será executado dentro do laço.
Será criado um exemplo no qual o usuário digitará um valor na tela e só será exibida
uma mensagem na tela caso esse valor seja igual ao numero 3.
Listagem 12: Utilização do comando if/else
#!/bin/bash
echo -n "Digite um algo: "
read valor_digitado
if [ “$valor_digitado” -eq “3” ];
then
echo “Você digitou o numero 3”
else
echo "Você digitou o caracter $valor_digitado";
fi
Figura 17: Demonstração do código com o comando condicional if no shell script
Figura 18: Demonstração da saída do shell script que contém um comando condicional
if
3.3. Comando elif
O comando elif é um comando para tomada de decisão. O comando elif depende do
comando if e o mesmo funciona de maneira similar ao else/if, porém o elfi também tem
uma condição, que será executada caso um condição seja tendida.
Sintaxe:
if [ condição ]; then
ação
elif [condição]; then
ação
elif [condição]; then
ação
fi
Onde:
condição - Condição para continuar no laço
ação - Comandos ou comportamento que será executado dentro do laço.
Será criado um exemplo no qual o usuário digitará um valor na tela e só será exibida
uma mensagem na tela caso esse valor seja igual ao numero 3,4 ou 5.
Listagem 13: Utilização do comando if/elif
#!/bin/bash
echo -n "Digite um algo: "
read valor_digitado
if [ “$valor_digitado” -eq “3” ];
then echo "Você digitou o numero 3"
elif [ “$valor_digitado” -eq “4” ]; thenecho "Você digitou o numero 4"
elif [ “$valor_digitado” -eq “5” ]; thenecho "Você digitou o numero 5"
else echo “Você não digitou nenhum número aceito”
fi
Figura 19: Demonstração do código com o comando condicional elif no shell script
Figura 20: Demonstração da saida do shell script que contém um comando condicional
elif
3.4. Comando case
O comando case, assim como o if, é um comando para tomada de decisão.
Sintaxe:
case variavel in
opcao1) acao1
;;
opcao2)
acao2
;;
opacaoN)
acaoN
;;
esac
Onde:
variavel – Variável que será verificada.
opcao1/2/N – Possíveis estados da variavel.
acao1/2/N – Ação a ser tomada quando a opção do mesmo for escolhida.
Será criado um script utilizando case que exibe uma mensagem quando é pressionada a
teclada 2 e outra quando é apertada a tecla 3.
Listagem 14: Exemplo utilizando comando case
#!/bin/bash
echo "Digite 1 ou 2"read opcao;
case "$opcao" in
"1")echo "Você digitou 1";
;;"2")
echo "Você digitou 2";
esac
exit
Figura 21: do código com o laço for no shell script
Figura 22: Demonstração da saida do shell script que contém um laço while
4.1 Laço for
O laço for é uma executa uma ação repetitivamente até que uma condição seja
atendida.
Sintaxe:
for contador in limite_contador;
do
acao
done
Onde:
contador - Variável que será utilizada no laço for.
limite_contador - Limite que o contador poderá atingir. Quando o limite for
atingido o laço terminará.
ação - Comandos ou comportamento que será executado dentro do laço.
Para exemplo o laço será criado um shellscript simples que exibi na tela uma
mensagem 4 vezes.
Listagem 15: Utilização do laço for
#!/bin/bash
limite_contador=4
for contador in {1..4};
do
echo "Messagem exibida $contador vez".
sleep 1;
done
Figura 23: Demonstração do código com o laçofor no shell script
Figura 24: Demonstração da saída do shell script que contém um laço while
4.2 Laço while
O while é um tipo de laço que existe em várias linguagens de programação. O mesmo
executa uma ação enquanto um requisito não é atendido.
Sintaxe:
while [ condicao ]
do
acao
done
Onde:
condicao - Condição para continuar no laço
ação - Comandos ou comportamento que será executado dentro do laço.
Agora será criado um shell script simples que exibi na tela uma mensagem quatro
vezes.
Listagem 16: Utilização do laço while
#!/bin/bash
contador=1
while [ $contador -ne 4 ];
doecho "Messagem exibida $contador vez".sleep 1;((contador=$contador+1))
done
Figura 26: Demonstração da saída do shell script que contém um laço while
Assim como em qualquer "linguagem de programação" o shell script proporciona a
utilização de funções.
Sintaxe:
nome_funcao ()
{
funcao_2;;
}
nome_funcao_2 ()
{
acao
}
nome_funcao
Onde:
nome_funcao – Funcão criada.
acao – Ação a ser tomada.
nome_funcao_2;; - Chamada da função nome_funcao_2.
nome_funcao – Função que dará inico ao shell script.
Será criado um shell script para no qual é possível escolher se será feito uma tabuada
do 2 ou do 3 sendo que cada uma é feita por uma função.
Listagem 17: Utilização de funções
#!/bin/bash
principal(){escolha=-1while [ $escolha -ne 0 ];do
echo "Escolha uma opção"echo "1- Fazer tabuada do 2";echo "2- Fazer tabuada do 3";echo "0- Sair";
echo -n ":";
read escolha;
if [ "$escolha" -eq "1" ];then gerarTabuada2
elif [ "$escolha" -eq "2" ];then gerarTabuada3
fi
done}
gerarTabuada3(){
for i in {1..10}; do echo "$i*3="$i*3done
}
gerarTabuada2(){
for i in {1..10}; do echo "$i*2="$i*2done
}
principal
Figura 27: Demonstração do código fonte de um shell script com funções
Figura 28: Demonstração da saida do shell script com funções
Como foi possível ver ao longo do artigo, a criação de shell script pode vir a ser muito
útil para usuários de Linux, seja para pequenas funções que são feitas repetidamente
todo os dias ou funções mais complexas.
Flavio Moraes
Seu último script não funciona. A correção que fiz foi testada em várias distribuições e está
funcionando. A correção é essa:
#!/bin/bash
principal()
{
escolha=-1
while [ $escolha -ne 0 ];
do
echo "Escolha uma opcao"
echo "2 - fazer tabuada do 2";
echo "3 - fazer tabuada do 3";
echo "0 - Sair";
echo -n ": ";
read escolha;
if [ "$escolha" -eq "2" ];
then
gerarTabuada2
elif [ "$escolha" -eq "3" ];
then
gerarTabuada3
fi
done
}
gerarTabuada3()
{
for ((i=0; i<11; i++))
do
echo "$i*3=" `expr $i \* 3`
done
}
gerarTabuada2()
{
for i in {1..10}; do
echo "$i*2=" `expr $i \* 2`
done
}
principal