Académique Documents
Professionnel Documents
Culture Documents
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
NOVO!
favorito (23)
imprimir
anotar
Login
Baixe o APP
Cursos #ShowMeTheCode
tirar dvidas
DevMedia
Curtir Pgina
1 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Login
Baixe o APP
exit
vi exemplo1.sh
touch exemplo1.sh
2 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Baixe o APP
Login
pressionar ESC para edit-lo, assim, ao se fazer isso, o caractere ':' aparece, ento
digite:
!chmod 777 %
vi exemplo1.sh
3 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Baixe o APP
Login
#!/bin/SHELL_ATUAL
#!/bin/bash
echo "Seu nome de usurio :"
whoami
echo "Info de hora atual e tempo que o computador est ligado:"
uptime
echo "O script est executando do diretrio:"
pwd
Este cdigo nos fornece algumas informaes sobre o usurio, algumas informaes
da mquina e sobre o local de armazenamento do nosso script.
Para salvarmos o arquivo digitamos ESC e depois :wq para gravar as alteraes e
sair.
Para executar o script, h dois pontos a considerar:
4 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Login
Baixe o APP
no prompt:
./exemplo1.sh
2. Se voc tiver salvo o seu arquivo em outro diretrio qualquer, voc precisar
informar o path completo at ele. Considerando que ele esteja em /tmp/scripts:
/tmp/scripts/exemplo1.sh
O comando echo exibe na tela a string entre aspas duplas. Caso voc no
queira que ela que entre aspas duplas, simplesmente no as fornea no
comando echo;
O comando whoami exibe o usurio logado no sistema;
O comando uptime exibe a hora atual, o tempo decorrido desde que o
computador foi ligado, o nmero de usurios logados e uma mdia do nmero
de processos carregados nos ltimos um, cinco e 15 minutos;
O comando pwd exibe o diretrio no qual o arquivo est rodando.
Toda string que contiver espaos deve estar entre aspas duplas.
Inserindo comentrios
Comentrios em cdigos so muito importantes. Explicar o que est sendo feito e
dar informaes sobre o funcionamento do cdigo permite ao desenvolvedor
economizar tempo para entend-lo.
Para inserir comentrios no seu script, basta iniciar a linha com o caractere '#',
como no cdigo da Listagem 2 e execuo na Figura 2.
Listagem 2. Shell script com comentrios.
#!/bin/bash
#Este um comentrio
#Este outro comentrio
echo "Este script contm comentrios."
5 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Login
Baixe o APP
nome_da_variavel=valor
onde:
nome_da_variavel: sequncia de caracteres que deve comear por qualquer
letra maiscula ou minscula ou underscore (_);
valor: qualquer dado que deva ser valorado varivel.
Nota: Observe que no deve haver espaos entre o sinal de igual e o nome e o
valor da varivel.
Para utilizarmos o valor da varivel coloca-se o $ (cifro) na frente de seu nome,
como mostra o exemplo da Listagem 3.
Listagem 3. Declarando e utilizando variveis.
6 de 23
02/09/2016 00:42
http://www.devmedia.com.br/introducao-ao-shell...
CDIGOS
ASSINE MVP
site=www.devmedia.com.br
Login
Baixe o APP
meu_numero_favorito=13
_cidade=Porto Alegre
echo Um timo site para voc aprender a programar e se manter atualizado : $site
echo Meu nmero favorito : $meu_numero_favorito
echo Minha cidade natal : $_cidade
Agora, se voc deseja printar o nome da prpria varivel, basta colocar uma barra
invertida '\' antes do $, assim, ela nega o caractere seguinte e normalmente
utilizada para caracteres de scape (ou seja, caracteres que j tem uma funo
especca, mas que voc deseja somente utilizar em um nome ou valor, sem
execut-los). Vejamos um exemplo na Listagem 4.
Listagem 4. Printando o nome de uma varivel ao invs de seu contedo.
#!/bin/bash
nome=fernanda
echo O nome da varivel \$nome
7 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Baixe o APP
Login
echo $system_info
Veja que o comando df-h executar e a sua sada (resultado dessa execuo) ser
armazenada na varivel system_info.
read nome_da_variavel_para_armazenar_o_valor_a_ser_lido
#!/bin/bash
echo Qual o nome de uma de suas msicas favoritas?
read nome_musica;
echo Voc gosta de ouvir $nome_musica!
if [ CONDICAO ];
then
AES
Fi
8 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Login
Baixe o APP
if test CONDICAO;
then
AES
Fi
Mas normalmente se utiliza os colchetes por ser mais compacto e para car mais
semelhante ao formato em outras linguagens. De qualquer forma, a escolha sua.
Nota: Em outras linguagens de programao o if testa uma condio, mas em shell
script o if testa a sada de um comando.
Vamos a um exemplo em que o usurio dever digitar um nmero e vericaremos
se ele est em um determinado intervalo, como mostra a Listagem 6.
Listagem 6. Utilizando o condicional if...then
#!/bin/bash
echo Digite um nmero qualquer:
read numero;
if [ $numero -gt 20 ];
then
echo Este nmero maior que 20!
9 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Baixe o APP
Login
O comando else
Existe a possibilidade de tambm tratar o caso em que o nosso teste falha. Para isso
temos o comando else, cuja sintaxe :
if [ CONDICAO ];
then
AES_1
else
AES_2
fi
Onde:
CONDICAO: teste que, se verdadeiro, passar o controle para o bloco dentro do
10 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Login
Baixe o APP
#!/bin/bash
echo Digite um nmero qualquer:
read numero;
if [ $numero -ge 0 ];
then
echo O nmero $numero positivo!
else
echo O nmero $numero negativo!
fi
O comando elif
H casos em que temos mais de uma condio a ser testada, todas correlacionadas.
Para isso temos o comando elif, cuja sintaxe :
if [ CONDICAO_1 ];
then
AES_1
elif [ CONDICAO_2 ];
then
AES_2
elif [ CONDICAO_3 ];
then
AES_3
.
.
.
.
elif [ CONDICAO_N ];
11 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Login
Baixe o APP
Fi
Onde:
CONDICAO_1 CONDICAO_N: teste que, se verdadeiro, passar o controle
para o bloco dentro do respectivo then;
AES_1 AES_N: comandos a serem executados se os resultados de
CONDICAO_1 CONDICAO_N forem verdadeiros.
A seguir temos um exemplo que apresenta um menu para o usurio escolher uma
opo. Baseado nesta escolha, a hora e a data sero exibidas; uma diviso ser
efetuada e seu resultado ser exibido, e uma mensagem ser exibida com o nome
que o usurio fornecer, como mostra a Listagem 8.
Listagem 8. Utilizando o comando elif.
#!/bin/bash
echo "Selecione uma opo:"
echo "1 - Exibir data e hora do sistema"
echo "2 - Exibir o resultado da diviso 10/2"
echo "3 - Exibir uma mensagem
read opcao;
if [ $opcao == "1" ];
then
data=$(date +"%T, %d/%m/%y, %A")
echo "$data"
elif [ $opcao == "2" ];
then
result=$((10/2))
echo "divisao de 10/2 = $result"
elif [ $opcao == "3" ];
then
echo "Informe o seu nome:"
read nome;
echo "Bem-vindo ao mundo do shell script, $nome!"
fi
12 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Baixe o APP
Login
result=$((10/2))
O comando case
O comando case tem a mesma funcionalidade do if...then...elif, com a diferena de
sua sintaxe ser mais compacta e enxuta:
case VARIAVEL in
CASO_1)
AES_1
;;
CASO_2)
AES_2
;;
CASO_N)
AES_N
;;
esac
Onde:
VARIAVEL: varivel que ter seu valor vericado;
CASO_1 CASO_N: possveis estados da varivel;
AES_1 AES_N: aes a serem tomadas caso a varivel combine com
CASO_1 CASO_N, respectivamente.
Por exemplo, modicando o exemplo anterior temos o cdigo da Listagem 9.
Listagem 9. Utilizando o comando case.
13 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Baixe o APP
Login
LOOPS Condicionais
Loops so muito teis para car iterando sobre determinadas aes at que uma
condio seja satisfeita e interrompa o lao.
O primeiro deles o for, cuja sintaxe :
Onde:
VARIAVEL: varivel cujo valor ser inicializado e incrementado, respeitando os
limites dos valores do conjunto fornecido;
VALOR_1, VALOR_2 VALOR_N: valores que VARIAVEL poder assumir durante
o loop;
AES: aes a serem tomadas repetidamente at que o valor de VARIAVEL
14 de 23
02/09/2016 00:42
CDIGOS
ASSINE MVP
http://www.devmedia.com.br/introducao-ao-shell...
Login
Baixe o APP
{VALOR_1..VALOR_N};
#!/bin/bash
echo Testando o loop for
for i in {10..0};
do
echo $i
done
Outra forma de criarmos sequncias de valores com o comando seq, como mostra
a Listagem 11.
Listagem 11. Exemplo de uso do loop for com o comando seq com intervalo.
#!/bin/bash
echo Testando o comando seq
for i in $(seq 1 5 100);
do
echo $i
done
15 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Baixe o APP
Login
Listagem 12. Exemplo de uso do loop for com o comando seq sem intervalo.
#!/bin/bash
echo Testando o comando seq
for i in $(seq 1 100);
do
echo $i
done
Loop while
Enquanto o loop for mais ideal para quando sabemos at quanto contar, o loop
while bom para quando no temos essa noo, mas sabemos de uma condio
que dever ser atendida para que o lao termine. Sua sintaxe :
while [ CONDICAO ];
do
AES
done
Onde:
CONDICAO: condio cuja veracidade determina a permanncia no lao;
AES: aes a serem tomadas enquanto CONDICAO for verdadeira.
Vamos na Listagem 13 um exemplo que exibe ao usurio o que ele digitou,
enquanto ele no informar -1.
Listagem 13. Exemplo de uso do loop while.
#!/bin/bash
echo Informe o que voc quiser, -1 para sair
read dado;
while [ $dado != -1 ];
16 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Baixe o APP
Login
read dado;
done
#!/bin/bash
echo Informe at que valor positivo e maior que zero contar:
read valor;
i=1
while [ $i -le $valor ];
do
echo $i
((i=$i+1))
done
Funes
O uso de funes imprescindvel para separar, organizar e estruturar a lgica de
qualquer algoritmo, seja em shell script ou qualquer outra linguagem de
programao. Sua sintaxe muito simples:
nome_funcao()
{
AES
}
#!/bin/bash
main()
{
echo "Escolha uma opo:"
17 de 23
02/09/2016 00:42
CDIGOS
ASSINE MVP
http://www.devmedia.com.br/introducao-ao-shell...
Baixe o APP
Login
read opcao;
case $opcao in
"1")
esvaziar_lixeira
;;
"2")
calcular_fatorial
;;
esac
}
esvaziar_lixeira()
{
echo "Esvaziando a lixeira..."
path="${HOME}/.local/share/Trash/files"
cd "$path"
for file in *
do
rm -rf "$file"
done
echo "Done!"
}
calcular_fatorial()
{
echo "Informe um nmero:"
read numero;
i=1
fat=1
while [ $i -le $numero ]
do
fat=$(($fat*$i))
i=$(($i+1))
done
echo "fatorial de $numero $fat"
}
main
Nota: Lembre-se sempre de chamar a funo principal (no nosso caso, main) no
nal do seu script, do contrrio, nada acontecer quando voc o executar.
Argumentos
Normalmente um programa recebe argumentos como entrada, ou seja, dados
fornecidos pelo usurio ou por outro programa, os quais devem ser consumidos
18 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Baixe o APP
Login
Em shell script no poderia ser diferente: temos nomes especiais para designar os
argumentos recebidos por um script:
$0 contm o nome do script que foi executado;
$1 $n contm os argumentos na ordem em que foram passados (1
argumento em $1, 2 argumento em $2, etc.).
$# - contm o nmero de argumentos que foi passado (ou seja, no considera
o nome do script em $0);
$* - retorna todos os argumentos de uma vez s.
Vamos ao exemplo da Listagem 16 e sua execuo exibida na Figura 3.
Listagem 16. Exemplo de uso de argumentos em scripts.
#!/bin/bash
if [ $# -lt 1 ];
then
echo "Precisa fornecer pelo menos 1 argumento!"
exit 1
fi
echo "Nmero de argumentos passados: $#"
i=0
for argumento in $*
do
i=$(($i+1))
echo "Argumento $i passado: $argumento"
done
19 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Baixe o APP
Login
Voc precisa estar logado para dar um feedback. Clique aqui para efetuar o login
(17)
(2)
Compartilhe:
20 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Baixe o APP
Login
Ramon
uhuuuullll, Ramon!
Legal que gostou do artigo :D
Qualquer problema estamos aqui.
Um forte abrao.
ontem
Adicionar um comentrio...
Leonardo Araujo
Parabns pelo artigo, tenho uma dvida: como poderia debugar (tcnicas) um shell script ?
h +1 ms
Douglas Claudio
21 de 23
02/09/2016 00:42
CDIGOS
ASSINE MVP
http://www.devmedia.com.br/introducao-ao-shell...
Baixe o APP
Login
Utilizar a opo -x para depurar o script por partes. Neste caso, antes do bloco de cdigo
que tu quer depurar, tu coloca set -x , e encerra o bloco com set +x , por exemplo:
set -x # ativa o debug a partir daqui
.....
.....
set +x # desativa o debug a partir daqui
O "x" do comando significa xtrace e imprime uma sada "limpa", pois imprime cada
comando do arquivo antes de efetivamente executar o comando.
Tcnica 3:
Utilizar a opo -v , para iniciar o modo verbose, que imprime todas as linhas da entrada
conforme elas forem sendo lidas, ou seja, no final tu fica com uma mistura dos comandos
executados do teu script com os resultados destas execues, por exemplo:
#!bin/bash -v
ou
$fernanda@fenote: bash -v scriptname.sh
Por fim, lembra de colocar comandos echo antes e aps os trechos que tu quer depurar,
assim tu consegue verificar, por exemplo, que valores de variveis esto na memria
naqueles momentos.
h +1 ms
Adicionar um comentrio...
Patrcia Lousada
Muito bom
h +1 ms
Adicionar um comentrio...
Davi
Adicionar um comentrio...
Cludia Lousada
Adicionar um comentrio...
22 de 23
02/09/2016 00:42
CDIGOS
http://www.devmedia.com.br/introducao-ao-shell...
ASSINE MVP
Baixe o APP
Login
Artigo
LINUX
Artigo
JAVA
LINUX
Artigo
LINUX
Artigo
LINUX
Artigo
23 de 23
02/09/2016 00:42