Você está na página 1de 45

Shell Script - Bsico

Thomaz de Oliveira dos Reis - thommy@globo.com

Pra programar Shell no preciso Texaco

- Julio Cezar Neves

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Como o Shell funciona


Comandos interessantes
Programando em shell

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Como o Shell funciona


Comandos interessantes
Programando em shell

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Como o Shell funciona?

In computing, a shell is a piece of software


that provides an interface for users.
- Wikipedia

Traduo Livre: Na computao, um shell um


pedao de programa que prov uma interface
com o usurio.

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Como o Shell funciona?

1.
2.
3.
4.
5.

Exame da linha de comando recebida


Resoluo de Redirecionamentos
Substituio de variveis
Substituio de meta caracteres
Passa o comando para o kernel

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

1. Exame da linha de comando recebida


Comando: Separado por espao em
branco, sendo o primeiro o comando e o
restante os parmetros OBS: Remove
todos os espaos em brancos repetidos!
Atribuio: Separado por = sem
espaos em branco

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

2. Resoluo de Redirecionamentos
> e >>: Redireciona sada padro
para um arquivo
2> e 2>>: Redireciona sada de erro
para um arquivo
|: Redireciona a sada padro para a
entrada de outro programa
tee: Redireciona o pipe (|) para a
sada padro
< e <<: Redireciona a entrada
padro

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

3. Substituio de variveis
substitui todos os $Variavel pelo contedo
da varivel.
ex:
echo $PATH
echo \$PATH
echo '$PATH'
echo $PATH

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Uma paradinha para explicar \, ' e :


\ : Ignora o prximo caracter
': ignora o contedo entre dois '
: considera tudo como apenas um
parametro

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

4. Substituio de meta caracteres


Para arquivos:
*: nmero qualquer de letras, e qualquer
letra
?: apenas uma letra qualquer
. : Pasta atual
.. : Pasta anterior
~: Home do usurio
`: Abre um shell filho, e executa o comando
que est entre `.

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

5. Passa o comando para o kernel


!!!ATENO:!!!
!!!Prximas informaes apenas para geeks!!!
O Shell envia o comando para o kernel, que por sua vez
executa um fork, criando um processo filho na
memria, e ento executa o programa determinado.
Para os no (muito) geeks:
O Shell manda o SO executar o comando
OBS: Caso o comando seja um script, todas as
modificaes a variveis feitas dentro dele no alteram
o shell principal.

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Como o Shell funciona


Comandos interessantes
Programando em shell

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Como o Shell funciona


Comandos interessantes
Programando em shell

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

1.cat, more e less


2.wc
3.sort
4.head e tail
5.find
6.grep
7.sed
8.cut e paste
9.tr
10.dialog

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

1. cat,more,less
Serve para mostrar o contedo de arquivos
cat: Joga todo o conteudo do arquivo para a
sada padro
more: Joga o conteudo do arquivo at preencher
1 tela, e espera a tecla enter para ir para a
prxima linha. Possui recursos de busca e outros
estilo vi.
less: O mesmo do more s que pode voltar...

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

2. wc
Mostra o nmero de linhas, palavras e bytes de
um arquivo.
-l: mostra apenas o nmero de linhas
-c: mostra apenas o nmero de bytes
-m: mostra apenas o nmero de letra
-w: mostra apenas o nmero de palavras

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

3. sort
Mostra o contedo de um arquivo em ordem
crescente ou alfabtica

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

4. head e tail
Mostra as primeiras ou ultimas linhas de um
arquivo

head -x: mostra as x primeiras linhas do arquivo


tail -x: mostra as x ultimas linhas do arquivo

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Os trs prximos comandos (find, grep e


sed), so EXTREMAMENTE poderosos, e
vale o aprofundamento do estudo deles.

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

5. find
Procura arquivos por caractersticas
find caminho expresso ao
expresses:
-name nome-do-arquivo
-user nome-do-usurio
-groupnome-do-grupo
-type tipo-do-arquivo
(d: diretrio, f: arquivo, l: link, p: pipe)

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

5. find
Procura arquivos por caractersticas
find caminho expresso ao
aes:
-print (ao padro)
-exec comando {} \;
-okcomando {} \;

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

6. grep
Mostra as linhas dos arquivos que casam com
uma expresso regular
-i ignora maisculas e minsculas
-v inverte o resultado
-R procura recursivamente

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

7. sed
Editor de arquivos completo
Muito usado para substituir cadeias de
caracteres
ex:
sed 's/original/final/g' arquivo
Troca todas as cadeias de caracteres iguais a
original por final

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

8. cut e paste
cut: separa o arquivos em partes
paste: junta arquivos
-d: qual o caractere que separa as partes
-f: qual das partes deve ser mostrada

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

9. tr
substitui caracteres
[:upper:] letras em maiusculo
[:lower:] letras em minusculo
[:digit:] digitos

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

10. dialog
Mostra uma janela, com mensagens, entradas
e outros
dialog tipo texto X Y
onde tipo pode ser: msgbox, inputbox e outros
X e Y o tamanho da janela
tem tambm o Xdialog (100% compatvel e
grfico), gdialog (usa gtk) e kdialog (usa qt, e
possui diversos recursos diferentes)

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Como o Shell funciona


Comandos interessantes
Programando em shell

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Como o Shell funciona


Comandos interessantes
Programando em shell

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

1.Hello World em Shell Script


2.Cabealho
3.Comentrios
4.Condicional
5.Pegando informao do teclado
6.Estruturas de repetio

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

1.Hello World em Shell Script


$ [vi|mcedit|kwrite|editor preferido] hello.sh
1

echo Hello World

$ chmod +x hello.sh
$./hello.sh

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

2. Cabealho
O cabealho serve para escolher o interpretador de
comandos que ser utilizado. Tem que estar na
primeira linha e ser iniciado com #!

1
2

#!/bin/sh
echo Hello World

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

3. Comentrios
Comentrio toda texto contido no script (ou cdigo
fonte) que no faz parte do cdigo.
Os comentrios em shell so iniciados com #

1
2
3
4

#!/bin/sh
#Isto um comentrio :)
echo Hello World

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

4. Condicional
A condicional serve para ver se uma sentena verdadeira ou falsa
Em shell, a condicional o if, e retorna verdadeiro se o comando terminar com
sucesso, e falso se der erro no comando
1
2
3
4
5
6
7
8

#!/bin/sh
if ls
then
echo o comando deu certo
else
echo o comando deu errado
fi

Experimente mudar o ls para


um comando inexistente ou usar
parmetros errados no ls.

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

#!/bin/sh
#Comparao de textos
if [ isso = aquilo ]
then
echo so iguais
else
echo so diferentes
fi
#O arquivo existe?
if [ -f arquivo ]
then
echo arquivo existe
else
echo arquivo no existe
fi
#o diretrio existe?
if [ -d diretorio ]
then
echo diretrio existe
else
echo diretrio no existe
fi

26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

#negando o if
if ! [ isso = aquilo ]
then
echo so diferentes
fi
#Conjuno E
if [ isso = isso ] && [ -f arquivo ]
then
echo so iguais E arquivo existe
fi
#conjuno OU
if [ isso = isso ] || [ -f arquivo ]
then
echo so iguais OU arquivo existe
fi
#comparador matemtico
if (( 5 < 10 ))
then
echo 5 menor que 10
fi

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

5. Pegando informao do teclado


O comando read serve para pegar uma entrada do teclado, e armazena-la na
varivel informada
1
2
3
4
5
6
7

#!/bin/sh
echo Qual o seu nome?
read NOME
echo Ol $NOME\! Tenha um bom-dia\!

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Desafio!
Faa um script, que mostre o contedo do arquivo informado pelo usurio!
Ateno: se o arquivo no existir mostre a seguinte mensagem:
Que pena, o arquivo (nome do arquivo) infelizmente no foi encontrado...

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Soluo simples
1
2
3
4
5
6
7
8
9
10
11

#!/bin/sh
echo Informe o nome do arquivo:
read ARQUIVO
if [ -f $ARQUIVO ]
then
cat $ARQUIVO
else
echo Que pena, o arquivo $ARQUIVO infelizmente no foi encontrado...
fi

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Soluo elegante
1
2
3
4
5
6
7
8

#!/bin/sh
echo Informe o nome do arquivo:
read $ARQUIVO
if ! cat $ARQUIVO 2> /dev/null
then
echo Que pena, o arquivo $ARQUIVO infelizmente no foi encontrado...
fi

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Soluo grfica
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

#!/bin/sh
DIALOG=dialog #voc pode escolher o Xdialog ou o dialog
ARQTEMP=/tmp/script.$$ # $$ trocado pelo nmero do processo do script
#pega o nome do arquivo e guarda em arqtemp
$DIALOG --fselect "$HOME/" 10 60 2>$ARQTEMP
#pega o contedo do arquivo ARQTEMP e bota em ARQUIVO
ARQUIVO=`cat $ARQTEMP`
rm -fr $ARQTEMP #remove o ARQTEMP

if [ -f $ARQUIVO ]
then
$DIALOG --textbox "$ARQUIVO" 0 0
else
$DIALOG --msgbox "Que pena, o arquivo $ARQUIVO infelizmente no foi
encontrado..." 0 0
18 fi

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

6. Estruturas de repetio
As estruturas de repetio servem para repetir uma srie de comandos at que
uma condio especial seja alcanada.
WHILE
Enquanto a condio do while for verdadeira,
as instrues entre do e done executada.

O $(( )), serve para


executar operaes
matemticas

1
2
3
4
5
6
7
8

#!/bin/sh
X=0
while (( X < 10 ))
do
echo $X
X=$((X+1))
done

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Desafio!
Reescreva o programa anterior, para que toda vez que o usurio informar um nome
de arquivo invlido, ele tenha que digitar o nome do arquivo novamente.

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

6. Estruturas de repetio
FOR
O for no shell se comporta diferente do
que o for nas linguagens tradicionais.
Em shell, o for percorre uma lista
qualquer, e atribui a uma varivel, cada
valor dessa lista.
O comando seq X Y Z,
conta de X
at Z indo de Y em Y

1
2
3
4
5
6
7

#!/bin/sh
for X in `seq 1 1 10`
do
echo vamos contar: $X
done

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Desafio Final!
Faa um programa que redimensione todos as imagens png da pasta informada pela
linha de comando para 50% do seu tamanho, e salve no formato jpg
Para modificar imagens pela linha de comando, use o comando convert, do
image magick
para pegar os argumentos da linha de comando, use:
$1 para o primeiro arguento, $2 para o segundo e assim por diante
$* retorna todos os argumentos da linha de comando
$# retorna a quantidade de argumentos
shift 1 remove o primeiro parametro e o segundo passa a ser o primeiro,
o terceiro o segundo e assim por diante

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Como o Shell funciona


Comandos interessantes
Programando em shell

Shell Script - Bsico


Thomaz de Oliveira dos Reis - thommy@globo.com

Como o Shell funciona


Comandos interessantes
Programando em shell
Finalmente Chegamos ao Final!
Lista de Discusso: http://br.groups.yahoo.com/group/shell-script/
Links: www.thobias.org http://aurelio.net/ www.julioneves.com
Livro: Programao Shell Linux Julio Cezar Neves (ed. Brasport)

Você também pode gostar