Você está na página 1de 0

Centro de Computao - Unicamp

Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

PROGRAMAO

SHELL

Autoras:
Cristiana Munhoz Eugnio
Lilliam Cssia Ciani Palermo

Universidade Estadual de Campinas


Centro de Computao
Verso: 6 - Fevereiro 2000

Colaboradores - Agradecimentos Especiais:


Cristina Maria Zanini
Rubens Queiroz de Almeida

Programao C-Shell
1

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

O que Shell ?
programa que conecta e interpreta os comandos
linguagem de programao completa - interpretada

Shell: uma linguagem de programao completa, possuindo


variveis, construes condicionais, interativas e ambiente
adaptvel ao usurio. O Shell do Unix a ferramenta original de
prottipo rpido que ensina conceitos-chaves como modularidade,
reutilizao e desenvolvimento.

possui variveis;
construes condicionais e interativas;
ambiente adaptvel ao usurio;

uma das linguagens originais de quarta gerao


(4GL).

Simplicidade do Shell
Pipeline
Sistemas de arquivos
Sistema operacional UNIX

O programa shell interpreta os comandos que voc digita quando


trabalha com o sistema operacional e traduz para comandos que o
kernel compreende.

Os comandos do Shell se comunicam entre si por meio de uma


interface simples e coerente chamada conduto (pipeline).
O Shell permite que o usurio realize suas atividades sem afetar
qualquer outro processo que no lhe pertence. Quando um
usurio conecta-se a um sistema Unix, o sistema operacional
inicia automaticamente uma cpia do Shell, sob a qual o usurio
poder realizar qualquer funo disponvel.
O shell utiliza o sistema de arquivos do UNIX que permite
organizar arquivos em pastas (diretrios). Esta hierarquia de
diretrios e arquivos gera uma viso simples e clara de toda a
informao no sistema.
O UNIX transportvel; ele roda em quase todo hardware de
computadores fabricados atualmente. Seu investimento no ser
desperdiado, pois qualquer programa escrito largamente
portvel entre Unixes de diferentes plataformas e fornecedores.

Programao Shell
2

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Quando usar

A qualquer momento que voc executa algum comando (ls, cat),


voc est usando o Shell interativamente: stdin, stdout e stderr
so todos direcionados para o terminal.
Stdin => standart input
Stdout = > standart output
Stderr => standart error

Interativamente
Realizar uma operao simples, uma nica vez
Interagir com o comando

O Shell Script dever ser utilizado sempre que for


necessrio realizar:
um procedimento complexo usando muitas linhas de
comando;
um procedimento do qual todos os usurios podero
beneficiar-se;
um comando simples usado inmeras vezes;
uma tarefa numa data planejada;

Quando voc comea a usar o Shell interativamente e descobre


que alguns processos exigem muita digitao, hora de aprender
sobre a programao Shell. Deve-se colocar esses comandos
interativos em um arquivo executvel. Voc poder reutilizar
sempre que precisar, melhorando ainda mais a sua produtividade.
O Shell pode extrair e manipular grandes quantidades de
informaes. Por que pesquisar um relatrio inteiro quando o Shell
pode verificar e recuperar informaes importantes para voc sem
qualquer esforo ?
A composio de sistemas a partir de programas do Shell realizar
quase todas as tarefas necessrias. Em vez de esperar meses ou
anos para a soluo perfeita, aplicaes prottipo do Shell
podem ser desenvolvidas, melhoradas e implementadas. Quando
necessrio, elas podero ser utilizadas como especificaes de
requisitos para o desenvolvimento de um sistema real.

integrar informaes de vrios sistemas existentes;

Programao Shell
3

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Produtividade

No de se espantar que o Shell possa duplicar ou triplicar a


produtividade pois ele pode automatizar a maior parte das tarefas
recursivas, que compreendem de 50 a 80% das atividades
intensamente humanas. A simplicidade dos arquivos do UNIX e do
projeto de sistema de arquivo possibilitam isso.

Linguagem interpretada - no compilada

Um programador mdio pode duplicar ou triplicar sua


produtividade com o uso do Shell

necessrio alguns conhecimentos internos do Shell e do seu uso


para derivar desses benefcios. Mas, preciso apenas alguma
inventividade para tornar-se mais eficiente e produtivo.

Comparao de Bruce Cox (pai do Objetive C)


shell

1 linha de cdigo

linguagem orientada a objeto 10 linhas de cdigo


linguagem C

100 linhas de cdigo

Programao Shell
4

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Filtros

Notas:
Uma chave para transformar dados brutos em informao til
filtrar os dados estranhos.

STDIN

FILTRO

STDOUT (tela)

Voc pode pensar na maior parte dos comandos do Shell como


filtros.

(teclado)
STDERR (tela)

Cada comando tambm possui duas sadas:

sada-padro --> stdout

sada-de-erro --> stderr


Cada comando filtra dados da entrada-padro ou transforma-os
de algum modo, passando-os sada-padro. Quaisquer erros
encontrados so passados sada-de-erro.

grep -i Arthur capit1


Autor: Lowel Arthur
Rei Arthur e os Cavaleiros da Tvola

Alguns filtros extraem apenas os dados que voc deseja ver,


outros incluem ou alteram os dados conforme suas instrues.

cat
cat arquivo
sed -e s/shell/Shell/g capit1
O comando sed abrir o arquivo capit1 como stdin e passar o
arquivo para stdout
(terminal) enquanto muda todas as
ocorrncias de shell para Shell.

Programao Shell
5

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Redirecionamento
Criar ou anexar arquivos;
Usar arquivos existentes como entrada para o Shell;
Reunir dois fluxos de sada;

Redirecionar stderr para um arquivo pode ser ocasionalmente til


para depurar um comando Shell. Para combinar stderr com stdout,
use :
Exemplo:
sed -e s/shell/Shell/g capit1 1> novocapit1 2> erro

Usar parte do comando shell como entrada.

Operadores:
< arquivo
> arquivo
>> arquivo
>>&

Voc pode usar o redirecionamento de E/S para mudar a direo


de stdin/stdout e stderr.
Exemplo:
sed -e s/shell/Shell/g < capit1 > novocapit1

O stderr ainda estaria direcionado para o terminal

direciona um arquivo para stdin


direciona stdout para uma nova sada
anexa stdout a um arquivo existente
anexa stderr a stdout

1> arq_ok 2> arq_erro


direciona resultado do shell p/ arq_ok
e msg de erros para arq_erro
<< delimitador
direciona stdin do shell at o delimitador

Sintaxe: comando argumentos >>& arqsaida

O arquivo de sada ter todos os dados da sada-padro e


da sada-de-erro criados pelo comando do shell.

Se o arquivo novocapit1 no existir, ento o Shell o criar.

Se existir, o Shell anexar o texto no arquivo.


mail lilliam < /sistemas/acad/jobs/MA31C
<< : este dispositivo de redirecionamento, usa linhas de dados
dentro do comando do Shell como entrada. Em vez de ter um
arquivo separado como entrada para o comando, voc poder
inclu-lo diretamente com o comando do Shell
Exemplo:
ftp -niv ftp.unicamp.br << EOF!
user anonymous password maria@unicamp.br
cd /tmp
get apostila.ps

EOF!
Programao Shell
6

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Conduto

Notas:

Conecta stdout de um comando stdin de outro

Os comandos do Shell podem ser reutilizados, acoplados e


moldados para lidar com as mais difcieis aplicaes de
informao.

O resultado da execuo de um comando pode ser


utilizado como parmetro de entrada na execuo de
outro comando

Alm de eliminar arquivos temporrios, o conduto permite que dois


comandos operem ao mesmo tempo.

Meio de conduo para transportar dados de um


comando para o outro
Exemplos:
grep matricula /sistemas/acad/jobs/* | wc -l | sort
ls -la | grep -i Jan

" diferente de"

ls -la

Programao Shell
7

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Construo de um Shell Script


Edite um arquivo

#! /bin/ksh
korn shell.

vi meu-programa

utilizado

para que o Unix saiba que sua shell

Esse arquivo deve conter na primeira linha:

#! /bin/ksh

recomendvel passar o caminho do comandos, pois cada


usurio pode criar na sua rea um alias para qualquer comando.

utilize para comentar uma linha

/bin/rm arquivo
recomendvel passar o caminho (path) dos comandos

Os comandos ficam geralmente no diretrio /bin

Outra opo seria colocar scape antes do comando, por


a.
exemplo \rm. Garante que voc estar utilizando a 1
ocorrncia encontrada no path definido no seu .kshrc

\rm arquivo
Garante encontrar a primeira ocorrncia no path.

As shells devem estar sempre num diretrio comum, por


exemplo: /usr/sys/nome-sistema
Arquivos de controle que so gerados pela shell devem
estar num diretrio temporrio, separado das shells.

Programao Shell
8

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Caracteres especiais do Shell

A utilizao de caracteres especiais dentro de uma citao dar


problemas. Para isso utilize o recurso da barra invertida.

(aspas duplas)
Mostra a cadeia de caracteres citada entre ", substituindo
o nome da varivel pelo seu contedo.
Ex: dia_da_semana=Segunda-feira
echo Hoje $dia_da_semana
resultado : Hoje Segunda-feira

(aspas simples)
Mostra a cadeia de caracteres citada entre ', sem
substituir o nome da varivel pelo seu contedo.
Ex: dia_da_semana=Segunda-feira
echo ' Hoje $dia_da_semana '
resultado : Hoje $dia_da_semana
` ` (crase)
O resultado do comando usado em output.
Ex: data= `date +%D `
\ (barra invertida)
Transcreve um caracter especial

Programao Shell
9

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Caracteres especiais do SHELL

Notas:

; (vrgula)
Separador de comando sequencial.

Exemplos:
Suponha que no diretrio corrente exista os seguintes arquivos:
capit1 , capit2, capit3, capit4 e capitulo

Ex: date; ksh meu_shell; date > /tmp/result &

ls capit*
ls capit?
ls capit[1-3]

? ( ponto de interrogao )
Combina com qualquer caracter isolado .

* (asterisco)

Combina com qualquer cadeia de caracter.


[a-z]*
Combina com algo que consista de caracteres alfabticos
minsculos .

(aparecer os 5 arquivos)
(capit1, capit2, capit3, capit4)
(capit1, capit2, capit3)

os caracteres "?", "*" e "[a-z]" podem ser usados no meio de


uma string
ls cap?t

^string
Procura a string somente no comeo da linha

string$
Procura a string somente no fim da linha

Programao Shell
10

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Tipo de Variveis

Global:
Seta variveis de ambiente ou variveis globais. Elas
existem enquanto a sesso estiver aberta.
Sintaxe: export nomevar=valor
Exemplos:
export TERM=vt100
(varivel de ambiente)
export DBDATE=Y4MD- (varivel de ambiente)
export matricula=20444 (varivel global)

EXPORT:

Seta variveis de ambiente ou globais. Existem enquanto a


sesso estiver aberta.

export PS1="`hostname`{`whoami`}$ "


magda{maria}$
NO existe espao em branco entre o nome da varivel e seu
contedo

nome=Rogrio
Nomes de Variveis no pode conter hifen.

X
nota-aluno
dar erro

permitido o uso do underline para nome de variveis:

minha_var

Local:
Seta variveis locais. Elas existem somente durante a
execuo da Shell.
Sintaxe: nomevar=valor

PARA SABER QUAIS VARIVEIS ESTO SETADAS E


QUAIS SO SEUS VALORES, UTILIZE O COMANDO
SET.

Programao Shell
11

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Definio de variveis

String

Atribuindo valores:
Sintaxe : nome=contedo
Exemplos:
msg_ftp=221 Quit command received.
dir_log=~liliam/tmp
meus_arqs=`ls -la`

Concatenando strings:
Exemplos:
nome=Li
nome1=lliam
conc=$nome$nome1
Lilliam
echo $conc

NOMES DE VARIVEIS NO PODEM CONTER


HFEN.

Programao Shell
12

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Definio de variveis

Notas:

No deixe espao em branco entre o cifro ($) e o nome da


varivel.

String

Utilizando string:
Utilize "$" para substituir o nome da varivel pelo seu
contedo.
Sintaxe : $varivel
Exemplos:
cabec= Relatrio do ano $ano
dir_log=/tmp ; ls $dir_log
aluno=${nomes[$cont]}
parm1=$1
ls arq$var
dia=Segunda-feira ; echo Hoje dia $dia

Programao Shell
13

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Definio de variveis

Inteiro

Atribuindo valores do tipo INTEIRO


Exemplos:
let cont=1 ou cont=1
let soma=$cont+2
let x=' 1 + 4 ' ou let x=1+4
let x=$x+1
NO DEIXAR ESPAO ENTRE O NOME DA
VARIVEL E O SINAL DE IGUAL

NO NECESSRIO INICIALIZAR UMA VARIVEL


COM O COMANDO LET PARA ELA SER DO TIPO
INTEIRA, UTILIZE O "LET" APENAS QUANDO VOC
QUISER MANIPUL-LA .

Programao Shell
14

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Definio de variveis

Notas:

set -A var val1 val2 val3 val4

Array

Criando arrays:
Exemplos:
set -A var a b c
set -A nomes ana jose maria

seta um

Exemplos de array :
set -A nome maria lucia joao
echo ${nome[*]}
Resp = maria lucia joao
echo ${#nome[*]}
Resp = 3

Incrementando arrays:
Exemplos:
nomes[3]=joo
aluno=${nomes[[3]}
echo $aluno
joo

Se o indexador do array ultrapassar o nmero de elementos


existentes, ser retornado branco

set -A semana Segunda Tera Quarta Quinta Sexta


array chamado semana contendo os dias da semana

Manipulando arrays:

${var[*]}
Mostra o contedo do array inteiro

${#var[*]}
Mostra o nmero de elementos (argumentos) de
um array.

${varivel[n]}
Elementos posicionais de um array.

A 1 OCORRNCIA DO ARRAY COMEA COM 0


Programao Shell
15

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Edio de string

typeset
Especifica o tipo do valor da varivel
Sintaxe:
typeset [opes] v=$var
Opes:
-Ln : ajusta esquerda. Se "n" especificado,
preenchido com branco ou truncado direita no
valor de n
-Rn: ajusta direita. Se "n" especificado,
preenchido com branco ou truncado esquerda
no valor de n
-Zn: mesmo que o acima, adiciona 0 ao em vez
de branco
-l
converte para minsculo
-u
converte para maisculo
Exemplos:
alpha="

aBcDeFgHiJkLmNoPqRsTuVwXyZ

typeset -L v=$alpha"

"aBcDeFgHiJkLmNoPqRsTuVwXyZ

typeset -Z8 v="123.50"


typset -uR5 v=$alpha

"
"

"VWXYZ"
"00123.50"
Programao Shell
16

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Tratamento de Variveis

testa se a varivel tem contedo


-n str: retorna verdadeiro se varivel NO FOR NULA
-z str: retorna verdadeiro se varivel for NULA

if [[ -z $matricula ]] then
echo " varivel matricula NO inicializada"
fi
matricula=23456
if [[ -n $matricula ]] then
echo " varivel matricula inicializada"
fi

Programao Shell
17

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Tratamento de erro

$? - testa se o comando foi executado com

sucesso.
0 executado com sucesso
1 executado sem sucesso
Exemplos:
var=5
echo $?

(=0)

echo $var4
echo $?

(= 1)

FAA UM TESTE ANTES POIS DEPENDENDO DO


SISTEMA PODE SER O CONTRRIO !!!!!!

Programao Shell
18

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Variveis de ambiente
$USER
Contedo do comando whoami (quem o usurio da
conta)

O valor das variveis ao lado podem ser encontrados ao


digitarmos o comando set.

$$
Muito utilizado pelos utilitrios de mail que gravam o arquivo
em /tmp/arq_nmero_do_processo

$PATH
Lista de diretrios a serem procurados pelo meus
executveis
$HOME
Mostra qual o diretrio home
$PS1
Mostra o que est setado como prompt
$SHELL
Mostra a shell que est sendo utilizada
$TERM
Mostra qual o tipo de terminal que est sendo utilizado
$$
Nmero do processo do comando corrente

Programao Shell
19

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Execuo de um Shell Script

Notas:

Fora do editor vi, na linha de comando:

$ksh -opes_de_teste meu-shell parmetros

Gravar a execuo de uma shell script

Voc pode executar o seu programa a medida que for sendo


desenvolvido, facilitando tambm a deteco e correo de erros.
Entrando no vi e criando as primeiras linhas do programa, grave o
arquivo (:w) e execute-o sem sair do editor: (:!ksh -opo %)

$script
$ksh -opes_de_teste meu-shell
$ CTRL D
$ more typescript
Dentro do editor vi:

grava o arquivo que est na memria

:w

:!ksh -opes de teste %

diz ao vi para executar o comando shell


!
seguinte
diz ao vi para preencher o nome do arquivo
%
corrente
Opes de Teste:
gera sada dos comandos executados
x

Programao Shell
20

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Tratamento

de Parmetros

$#
No. de parmetros
$0
Parmetro que contm o nome do programa
$1, $2, $3, ...
Parmetros fornecidos

Notas:
Se voc tem um shell script que recebe parmetros de entrada,
voc pode usar $# no comeo do programa para obter o nmero
de argumentos (parmetros) recebidos, testando se esse era o
nmero de argumentos esperado.
Exemplo:
ksh meuscript parm1 parm2
#! /bin/ksh
if (( $# == 2)) then
echo " numero de parametros correto "
fi
ksh

meuprogram
$0

parm1
$1

parm2
$2

$*
Lista o contedo de todos os parmetros

Programao Shell
21

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Principais Operadores
Operao

Numrico

String

igual

==

diferente

!=

!=

menor, maior

<, >

... ou igual

>=, <=

and , or

&&, ||

soma

diviso

>=, <=

+
--

subtrao
multiplicao

<, >

*
/

Programao Shell
22

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Operadores de Teste
Verdadeira se ...

No ncleo de cada estrutura de controle existe um teste


condicional.

-d file
-f file

se diretrio
se file

O comando test pode determinar se um determinado nome um


arquivo ou um diretrio; se ele pode ser lido, ou se executvel; e
se uma cadeia ou inteiro maior, menor ou igual a outro.

-r arquivo
-w arquivo
-x arquivo

existir arq. legvel


existir arq. gravvel
existir arq. executvel

Test, como qualquer outro comando do Shell, sempre retorna um


valor verdadeiro (0) ou falso (1) na varivel status do shell.

Condio Shell

test -r nomearq
echo $?

-a arquivo

se arquivo existe

-s arquivo

se arquivo existe e no est


vazio

-O arquivo

se o username que est


logado o owner

-G arquivo

se o gid do username que


est logado o mesmo do
arquivo

if [[ -d arq_com ]]
then
echo " arq_com um diretrio "
fi

Programao Shell
23

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comandos condicionais

if - then - else

Exemplos:
Comparao numrica
a=5 ; b=7
if (( $a == $b )) then
echo valores iguais
else
echo valores diferentes
fi

if (( expresso aritmtica )) then


processa 1
else
processa 2
fi

Comparao de testes condicionais


if [[ -z $parametros ]] then
echo ERRO - no foi passado parmetros !!!
exit
fi

if [[ testes condicionais ]] then


processa 1
else
processa 2
fi

Comparao de string

PARA COMPARAES DE TESTES CONDICIONAIS E


COMPARAES DE STRINGS NECESSRIOS TER
ESPAOS EM BRANCO ENTRE OS COLCHETES E
OS OPERADORES

a=inteiro ; b=metade
if [[ $a = $b ]] then
echo variveis iguais
else
echo variveis diferentes
fi

Exemplo:
if [[ $a = $b ]] then
echo variveis iguais
fi
Programao Shell
24

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Comandos condicionais:

Notas:
Exemplos:

case

case expresso in
opo1 ) processa a
echo opcao a ;;
opo2 ) processa b;;
opo3 ) processa c;;

* ) echo " Opo invlida " ;;


esac

data=`date | cut -c9-10`


texto="Relatorio do mes de"
case $data in
01) echo "$texto Janeiro"
;;
02) echo "$texto Fevereiro" ;;
9 | 09) echo "$texto Setembro" ;;
12) ;;
* ) echo " ERRO !!!!!" ;;
esac

Exemplo:
$ cria_imp -p pcca -ip 143.106.30.9 -n pcca
while (( $# ))
do
case $1 in
-ip) ip_da_impressora=$2 ; shift ;;
-p) nome_da_impressora=$2 ; shift ;;
-n) nome_da_imp_rede=$2 ; shift ;;
esac
shift
done
Programao Shell
25

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comandos condicionais:

Exemplos:

for

Utilizando array:

for var in expresso


do
comandos que usam $var
done

set -A tabela lilliam kikinha


for pessoa in ${tabela[*]}
do
echo $pessoa
done
end

Exemplos:
Utilizando o resultado de um comando:

for file in *.c


do
mv $file `echo $file | tr A-Z a-z `
echo $file
done

for arquivo in `grep -l "matr_aluno" *.sqb`


do
ex +%s/"old_string"/"new_string"/g +wq $arquivo > /dev/null
done

Onde expresso pode ser:


resultado de um comando
valores
ocorrncias de um array
As instrues dentro do comando for sero executadas
tantas vezes quantas forem o no de elementos pertences
expresso

Programao Shell
26

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Comandos condicionais:

Notas:

Sintaxe:
while ((expresso))
do
done

while
dir_relatorio=~kikinha/prog
while ((1))
do
clear
echo \n* Centro de Computacao* \n
echo Selecione a opcao desejada
echo 1- Tabela de Orgaos
echo 2 - Notice
echo 3 - Sai
print -n

read RESP
case $RESP in
1) $dir_relatorio/jsi03e_carga;;
2) /usr/local/notice/manager ;;
3) exit ;;
*) print -n Opcao Invalida - Tecle <enter>
read ENTER ;;
esac
done

Comando exit:
Serve para sair do while sem ser pela condio definida na
expresso.

Programao Shell
27

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comandos do Shell

Os comandos shell sero mostrados divididos em


vrias categorias:

Para cada comando existem vrias opes. Neste curso


tentaremos mostrar as opes mais utilizadas. Para conhecer
outras opes ou maiores detalhes utilize o comando man:

Exemplo:
man nome_comando

Arquivos e diretrios
Seleo
Combinao e ordenao
Impresso
Segurana

Comandos :
1.
2.
3.
4.
5.
6.

prxima linha
prxima pgina
pgina anterior
procura string
continuar a busca
cancelar pesquisa

ENTER
space bar
CTRL B
/\caracter especial ou /string
n
q ou CTRL C

OBS: Nem todos os comandos usam as opes da mesma


maneira.

Programao Shell
28

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

TIPO
Diretrio
Arquivo
Seleo

Juno

Ordenao
Transformao

Impresso
Segurana
Leitura

COMANDO
cd ls pwd
mkdir rmdir
cat cp csplit
ln
mv rm split
awk
cut
grep
head
line
sed
tail
uniq
wc
cat
join
paste
sort
sed
tr
dd
cat
echo
chmod
$<
touch
sleep
exit

Notas:
Os comandos de Diretrios e Arquivos j foram abordados
anteriormente. Eles podem ser utilizados sem restries numa shell.
Exemplos:
\rm arquivo_old >& /dev/null
\ls -la
/bin/cat arquivo
/bin/mv arqvelho arqnovo
/bin/pwd
/bin/mkdir meudir
Alguns lembretes:
cd
ls
pwd
mkdir
mkdir -p
rmdir
cp
cp -p
mv
rm
basename
dirname
diff
cmp

altera o diretrio corrente


lista o contedo do diretrio
mostra qual o diretrio corrente
cria diretrio
cria rvore completa de diretrios
deleta diretrio
copia arquivo
copia mantendo as caractersticas originais
renomeia arquivo
deleta arquivo
mostra o nome do arquivo tirando o path
mostra o nome do arquivo colocando o path
compara contedo de 2 arquivos

< 1 arquivo > 2 arquivo


compara dois arquivos
-s ( echo $? traz 1 se diferente )
( echo $? traz 0 se igual )

Programao Shell
29

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comandos de Impresso

echo ou print
Escreve argumentos em stdout.

echo
Exemplos:
1. print -n Entre com a opo desejada =>
Entre com a opo desejada __
2. echo Hoje dia $dia
3. echo Bom dia
4. echo Os arquivos so: *
5. echo Essa pessoa $nome eh muito legal > arq
6. echo *
o mesmo que o comando ls *

Sintaxe:
echo [opes] string
Opes:
-n : no adiciona uma nova linha no stdout antes
de imprimir a string, deixando o cursor na linha
da mensagem escrita. FUNCIONA APENAS
COM PRINT

Programao Shell
30

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comandos de Impresso

cat

cat
Concatena e imprime. O comando cat no altera dados,
ele toma a stdin e a reproduz no stdout. Possui tambm
a opo de varrer o arquivo mas no pra a cada tela
do terminal.
Sintaxe:
cat [opes] stdin
Opes:
-n : lista as linhas do arquivo numerando-as
file:

Exemplos:
1. cat capt1 capit2 > livro
livro ir conter capit1,2
2. cat capt3 >> livro
anexe capit3 no livro
3. cat capit1
lista capit1 no terminal
4. cat -n capit1
lista capit1 numerando as linhas
5. cat > arq1
direciona o stdin para o terminal e stdout para arq1, assim
tudo que for digitado ser gravado no arq1. Para encerrar
tecle CTRL D.

Programao Shell
31

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comando de Segurana

chmod
Altera a permisso do arquivo.
Sintaxe:
chmod [quem] operao acesso arquivo

Exemplos:
chmod u=rwx,go= arquivo
ls -la
-rwx------ 1 lilliam supsof

Opes:
quem: u(usurio), g(grupo), o(outros), a
(todos)
operao: +(atribuir), -(remover), =
acesso: r(read), w(write), x(execuo)
-R : altera a permisso dos arquivos e
diretrios descendetemente.
Para tornar um shell script executvel, necessrio alterar
a permisso do arquivo.

Comando de Leitura

chmod
Se a sua shell for executar o comando FTP voc dever alterar a
permisso do arquivo que contm o usurio e a senha para
somente o dono ler, gravar e executar.

110 Sep 25 16:33 arquivo

Exemplo:
echo -n Digite a opcao:
read opcao
if (($opcao > 9)) then
echo Opcao Invalida
fi

read
Direciona o terminal como stdin, ou seja , captura o
que foi digitado no teclado.
Sintaxe:
read varivel
Programao Shell
32

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comando de Ordenao

sort
Ordena e combina mltiplos arquivos.
Sintaxe:
sort [opes] stdin .....

O comando sort trabalha a nvel de caracter, campo ou em uma


combinao dos dois. Caso o arquivo sorteado possua linhas
duplicadas estas podem ser retiradas com uniq. Para tornar mais
eficiente esse comando deve ser utilizado aps os dados terem
sido selecionados (grep ou cut).
As opes vlidas para a opo -k so: b,d,f,n,r

Opes:
a
-b: ignora espaos em branco para encontrar a 1
ou ltima coluna do campo
-d: sorteia usando ordem alfabtica. Somente
letras, dgitos e espaos so considerados na
comparao.
-f: altera todas as letras minsculas para
maisculas antes da comparao.
-m: junta todos arquivos de entrada num s. Os
arquivos de entrada devem estar sorteados.
-n: ordena o arquivo numericamente
-r : ordena o arquivo na forma decrescente
-u: deleta linhas duplicadas
-t: define delimitador
-k [cpo ini.col ini] [opo] [ , cpo fim.col fim]
[opo] : define chave do sort
-o: especifica que o stdout vai ser o mesmo
arquivo do stdin

Valores default para a opo -k:


cpo ini
comeo da linha
a
col ini
1 . coluna do campo
cpo fim
final da linha
col fim
ltima coluna do campo
Exemplos :
1. sort -nru arquivo
2. sort -k2,2f -k3 arquivo
3. sort -k1.1 -k2.4 arquivo
4. sort -rt -k3b -k4 arquivo
5. sort -m arq1 arq2
6. sort -d arq1 -o arq1_sort

Programao Shell
33

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comandos de Seleo

line
Copia uma linha do stdin e grava no stdout.
Sintaxe:
line stdin > stdout
stdin
stdout

- arquivo
- arquivo ou terminal

head

head -c3 /etc/passwd

Seleciona as 10 primeiras linhas de um arquivo.


Sintaxe:
head [opo] stdin > stdout
Opes:
-c n : seleciona as n primeiras colunas do stdin
-n : seleciona as n primeiras linhas do stdin

tail -f /var/adm/messages

tail
Seleciona as 10 linhas finais de um arquivo
Sintaxe:
tail [opes] stdin > stdout
Opes:
-n : seleciona as n ltimas linhas do stdin
-f : mostra as linhas que esto sendo
adicionadas no arquivo.

Programao Shell
34

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comandos de Seleo

sed
Edita e altera dados.
Sintaxe:
sed [opes] stdin > stdout

Exemplos:

Opes:
-e script : edita e altera dados
Onde script pode ser:
s/string antiga/string nova/g
/string pertencente linha a ser deletada/d
s/string a ser deletada//g
deleta espao em branco at o fim
"s/ *$//g"
da linha
1d arquivo
deleta a 1 linha do arquivo

-f arquivo : contm os scripts que devem ser


executados. No coloc-los entre aspas duplas.
-n x,zp arquivo : Seleciona da linha "x" at a linha
"z" do arquivo especificado.

.
- No usar stdin como stdout
- Pode ser alterado o delimitador do sed de "/ "
para qualquer outro caracter "+", "(", "=", etc

O comando sed muda a informao dentro de um arquivo ou


tabela. Este comando tambm deleta linhas de arquivos. Portanto
pode ser utilizado como um programa que atualiza campos ou
deleta linhas.

1. sed -e s/caf/ch/g entrada > entrada_alterada


Altera a palavra caf para ch em todas as ocorrncias (g)
2. sed -e /Joo/d entrada > sada
Deleta todas as linhas do stdin que contm a palavra Joo
3. sed -e s/devedor//g entrada
Deleta a palavra
4. sed -f arqcom entrada > arqsaida
Executa os comandos que esto no arquivo arqcom.
arqcom: s/shell/Shell/g
s/Tera/tera/
altera 1 ocorrncia por linha

OBS: NO USAR ASPAS DENTRO DO ARQUIVO


5. sed -e s/cha/caf -e s/limao/mate/ arq_sala > arqsaida
6. sed -n 5,10p arquivo
imprime da linha 5 at a linha 10 do arquivo.
7. nlin=`cat arquivo | wc -l `
lin=1
while (( $nlin <= $lin))
do
sed -n "$lin"p arquivo
let lin=lin+1
done
Percorre linha a linha do arquivo

Programao Shell
35

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comandos de Seleo

Exemplos:

uniq

Sintaxe:
uniq [opes] stdin
Opes:
-u: seleciona linhas nicas
-c: conta o nmero de vezes que cada linha se
repete
-d: seleciona apenas as linhas com mais de uma
ocorrncia

lista todos os arquivos que

find . -name "*.HTML" -print


terminam com .HTML

find . -type f -print


lista todos os arquivos do tipo file a paritir
do diretrio corrente (.)

Seleciona apenas uma ocorrncia de cada linha do


stdin. Obrigatoriamente stdin deve estar ordenado
(comando sort).

find /home -type d -print


lista todos os arquivos do tipo
diretrioa partir do diretrio /home

find . -name "*.sqb" -print | xargs grep "matr_aluno" | wc -l

find
Seleciona arquivos, a partir do diretrio especificado.
recursivo.
Sintaxe:
find dir opes
Opes:
-type: especifica o tipo de arquivo (f, d ou l)
-name : informa o nome do arquivo
-print: lista os arquivos (incluindo o path) que
satisfazem o critrio.
Programao Shell
36

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comandos de Seleo

grep
Seleciona linhas usando um nico critrio de seleo.

O comando grep a ferramenta principal para extrair informaes


de campos de dados, procurar cadeia de caracteres e escrever a
informao em stdout.

Exemplos:
1. grep

Sintaxe:
grep [opes] string stdin

Mar* arquivo

2. grep Maria

Opes:
-c : conta o n de vezes que a string aparece.
-i : ignora uppercase
-l : lista somente o nome dos arquivos que contm
a string procurada.
-n : numera linhas que contm a string procurada.
-v : lista todas as linhas do arquivo exceto s que
contem a string.
^letra : lista todas as linhas que iniciem com a

letra ou string.
-w : lista somente as linhas que tem exatamente a

string passada

3. grep -l Maria arquiv*


4. grep -n Maria arquivo
5. grep $varivel arquivo
6. grep -v Maria Amlia arquivo
7. grep [a-z] arquivo
8. grep ^R arquivo
9. grep -c Chico arquivo
10. grep -i

String pode ser:

$varivel

palavra composta

palavra

metacaracteres (* ? [a-z] )

stringmetacaracter

arq*

maria arquivo

11. ps -ef | grep maria | grep \d


grep anterior

no aparece a linha do

Programao Shell
37

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comandos de Seleo

cut
Seleciona colunas.
Sintaxe:
cut [opes] stdin

Exemplos:
1. cut -f1,5 -d: arquivo
2. cut -c1-72 arquivo

Opes:

3. cut -d:

-cx-y : define coluna inicial(x) e coluna final(y)


-dCaracter : define delimitador
-fx,y : quais campos sero selecionados
-s
: suprimi linhas que no contm delimitador.
Somente pode ser usado junto com a opo -d
OBS: O comando cut opera em colunas

O comando cut corta arquivos em colunas. Tambm pode operar


em cada caractere ou campo, ou alguma combinao de ambos.
Quando o arquivo tem algum separador entre campos voc pode
selecion-los atravs de cut.

-s -f3,5 arquivo

OBS: No permitido o uso da opo -c junto com a opo -d.

wc

Exemplos:
1. grep -l Maria arqu* | wc -l
2. cat arq l wc -l

wc
Conta linhas, palavras e caracteres de arquivos.
Sintaxe:
wc [opes] stdin
Opes:
-c:
conta caracteres
-l :
conta linhas
-w:
conta palavras
Programao Shell

38

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comandos de Seleo

split
Divide o stdin em arquivos menores contendo um
nmero especfico de linhas .
Sintaxe:
split [opes] stdin [prefixo]

O comando split cria o nome do 1 arquivo do output


combinando o prefixo mais o sufixo aa, ab (p/ o 2) at zz.
Exemplo:
1. split -10 arquivo (gera arquivos xaa, xab, ) cada um
contendo 10 linhas
2. split -5 arquivo capit (gera arquivos capitaa, capitab,)

Opes:

- qtd. linhas: especifica o n de linhas de cada


arquivo de sada. Default 1000 linhas por
arquivo.

prefixo: prefixo dos stdouts criados. O sufixo


aa,ab at zz. Default prefixo x.

Programao Shell
39

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comandos de Seleo

csplit

csplit
Separa os arquivos sempre que encontrar uma
combinao entre seus argumentos e o contedo do
arquivo. No funciona no FreeBSD

Exemplos:
O arquivo livro contm:
Introduo,
Capitulo1,
Captulo 2,
Resumo.

Sintaxe:
csplit [opes] stdin [argumentos]

1. csplit -f capit livro /Capitulo / /Capitulo /

Opes:
-f prefixo: prefixo dos stdouts criados. O sufixo
00,01 at 99. Default xx
argumentos:
/argn/ : cria um arquivo por argumento
(inclusive). O arquivo prefixo00 contm as linhas
anteriores ao 1 argumento.
%arg% : cria um arquivo contendo os dados a
partir do argumento.
-k: no desfaz a criao dos stdouts caso o no.
de stdouts especificado seja maior que o qtd de
stdin

resultado: capit00 (contm Introduo)


capit01 (contm Captulo 1)
capit02 (contm Captulo2 e Resumo)
2. csplit -f capit livro %Capitulo 1%
resultado: capit00 (contm Captulo 1 Captulo 2 e
Resumo)
3. csplit livro /Capitulo 1/
resultado: capit00 (contm Introduo)
capit01 (contm Captulo 1, 2 e Resumo)
4.

csplit -k livro /Capitulo / (9)


resultado: ser criado at 10 stdout

Programao Shell
40

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Comandos de Transformao

Notas:

tr
Transforma caracter por caracter.
Sintaxe:
tr caracter velha caracter nova stdin > stdout

O comando tr traduz os dados de entrada caractere por


caractere, com base em tabelas de converso (string)
especificadas pelo usurio.
Exemplos:
1. tr (A-Z) (a-z) arq1 > arq1min

o comando TR melhor que o DD, quando for converter


strings.

dd
Converte e copia arquivo.

2. tr (:)

(\t)

cad1 > cad1t

3. for file in `ls`


do
mv $file `echo $file | tr (A-Z) (a-z) `
echo $file
done

Sintaxe:
dd if=stdin of=stdout conv=[opes conv]
Opes do conv:

lcase: converte arquivo para minsculo

ucase: converte arquivo para maisculo

ascii: converte ebcdic para ascii

ebcdic: converte ascii para ebcdic

ibm: converte ascii to verso ebcdic da IBM


No aceita passar path

sed
Visto anteriormente.
Programao Shell
41

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comandos de Juno

join
Junta dois arquivos, combinando linha a linha. Os
arquivos devem estar ordenados (comando sort).

Quando o join encontra registros que se combinam nos 2


arquivos de entrada ele cria um nico registro contendo algum ou
todos os campos dos dois registros. Para utiliz-lo, os dois
arquivos devem estar ordenados (utilize sort).
Exemplos:
arquivo1: Aldo:HC
Bruno:IMECC
Joo:CCUEC

Sintaxe:
join [opes] arquivo1 arquivo2
Opes:
-tCaracter: define delimitador

-a n arquivo: produz uma linha de sada para

cada linha do arquivo especificado pelo n


arquivo, mesmo para os campos do join que no
casam com nenhuma linha do outro arquivo de
entrada.
-o narquivo.campo : As linhas de sada so

compostas pela lista dos campos especificados na


varivel narquivo.campo. Para definir mais
campos separe-os por branco ou vrgula
-1 campo ou -2 campo : Faz o join de 2 arquivos

usando o campo especificado na varivel campo


do arquivo 1 (-1) ou arquivo 2 (-2).
-e string: altera campos em branco do output pela

string especificada

arquivo2:

Aldo:enfermeiro:7234
Joo:digitador:7111
Ricardo:mdico:7323

1. join -t: arquivo1 arquivo2


2. join -a1-t: arquivo1 arquivo2 > arqsaida
arqsaida:
Aldo:HC:enfermeiro:7234
Bruno:IMECC:__________
Joo:CCUEC:digitador:7111
3. join -o 1.1 1.2 2.3 -t: arquivo1 arquivo2
arqsada:
Aldo:HC:7234
Joo:CCUEC:7111
4. join -1 2 -2 2 arquivo1 arquivo2
OBS:
Obrigatoriamente a opo -a tem que vir antes da opo -t.

Programao Shell
42

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Comandos de Juno

Notas:

Exemplos:

paste
Anexa mltiplos arquivos coluna por coluna.
Sintaxe:
paste [opes] stdin1 stdin2
Opes:

-dCaracter: define delimitador


-s : junta linhas subsequentes do arquivo

1. paste -d / arq1 arq2


Aldo:HC/Aldo:enfermeiro
Bruno:Imecc/Ivo:digitador
2. paste -s -d / arq1 arq2
Aldo:HC/Bruno:Imecc
Aldo:Enfermeiro/Joo:digitador

Programao Shell
43

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comandos de Juno

Exemplos:

awk
Linguagem de processamento e procura de padres.
Encontra linha(s) no(s) arquivo(s) de entrada que
combinam com um padro especificado e ento executa
as aes definidas.

1. awk -F: {print $5 $1} arq_fun


2. awk -F: {print $2 $1} arq_fun
3. awk -F: {$1 ~/e|a/} arq_fun
4. awk -F: {print NR,NF,$0} arq_fun

Sintaxe:
awk [opes] '/padro/' {ao} stdin

5. awk -F: {print $1 > matr; print $2 > nome} arq_fun


6. awk -F: {printf %15s %10s\n, $1, $3} arq1

Opes:

7. awk -F: /smith+ern/ arq1

-Fcaracter: define delimitador


8. awk -F: /amel??/ arq_fun

A ao pode ser:
-f pgm: arquivo que contm as aes a serem
executadas pelo comando awk.
pgm: so as aes a serem executadas pelo
awk.

9. awk -F: {printf (meu nome eh %s e meu ramal %5d\n ,


$2,$4)} arq_fun
10. awk -F: $3 ~/Oct/ {print $2 $3} arq1
11. awk 'NR == '$cont' {print $0} ' arq
um arquivo

le linha por linha de

12. awk ($1 == " '$var' ") [print $0}' arq

Programao Shell
44

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comandos de Juno
AWK (Cont.)
Tipos de padres de pesquisa:

/string/ : grava em stdout todas as linhas do stdin que


contm pelo menos uma ocorrncia da string.

/string1+string2/ : grava em stdout as linhas que


contm a string1 seguido por um ou mais caracteres
que precede o sinal de + e termina com a string2.

/string1?/ : grava em stdout as linhas que contm a


string1 seguido por nenhum ou um caracter que
precede o sinal ?

/string1|string2/ : grava em stdout as linhas que


contm a string1 e/ou a string2.

/string1[char1-char2]/ : grava em stdout as linhas


que contm a string1 seguido por qualquer caracter
que esteja entre char1 e char2 inclusive (char1 e char2
devem estar em ordem)

/string1[\^char1-char2]/ : grava em stdout as linhas


que contm a string1 seguido por qualquer caracter
que no esteja entre char1 e char2 inclusive (char1 e
char2 devem estar em ordem).
Programao Shell
45

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comandos de Juno
AWK (Cont.)

$1 ~/char1/ : grava em stdout todos os registros que


contm no 1 campo o caracter char1 ou uma string .

$1 ~/^char1/ : grava em stdout todos os registros que


no contm no 1 campo o caracter char1 ou uma
string.

$2 ~/char1$/ : grava em stdout todos os registros que


contm o ltimo caracter igual a char1 ou string.

$1 == string1 : grava em stdout todos os registros


que contm o 1 campo igual string1

$1 >= char1 : grava em stdout todos os registros


que o 1 campo maior ou igual a char1

$1 == string1 && $2 == string2 : grava em


stdout todos os registros que o 1 campo igual a
string1 e o 2 igual a string2.

Programao Shell
46

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Comandos de Juno
AWK (Cont.)
Tipos de aes:
Output:
Impresso de campos, variveis e constantes:
{ print $1 $2} : grava em stdout o campo 1 e
campo 2 separados por um espao em branco.
Redirecionamento:
{ print $1 > arqoutput} : redireciona o campo 1 para o

sequencia
\n
\b
\t

significado
nova linha
backspace
tab

stdout arqoutput .
Instrues aritmticas:

{ print $1 *= $2 } : o campo 1 o resultado da


multiplicao do campo1 com o campo2.
{print ra , $1 mdia : , $2 / $3 } : grava em stdout

o campo 1 precedido da string ra e a string mdia o


resultado da diviso do campo $2 pelo campo $3 .
Variveis Especiais:
{ print NR, $0 } : grava em stdout os registros de stdin
numerado.

Notas:
Programao Shell
47

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Comandos de Juno

Notas:

AWK (Cont.)

Tabela de caracteres de controle para o printf


caracter
c
d
e
f
s
%

Concatenao de campos:
{ print $1 = $1 $2}' : o campo 1 a concatenao do
campo 1 com campo 2
Imprimir linha em branco:
{print }
Impresso formatada de campos variveis ou
constantes :
{printf %15s\n , $1} : imprime o campo 1 por linha
formatando-o utilizando 15 posies alinhado direita.

expresso
caracter ASC II
decimal inteiro
[-] d.dddddd [+-] dd
[-] ddd.dddddd
string
imprime %

Formatos vlidos para o printf:

{printf %20d %-5s\n, $3+$2 , $1} : imprime o


resultado da soma do campo2 e do campo3 e o campo
1.
{printf %20s %4d\n , NOME , RAMAL} imprime
as constantes NOME e RAMAL no formato definido
pelo printf.

Fmt
%c
%d
%5d
%e
%f
%7.2f
%06d
|%s|
|%10s|
|%-10s|
|%.3s|
|%10.3s|
|%-10.3s|
%%

$1
97
97.5
97.5
97.5
97.5
97.5
97
Janeiro
Janeiro
Janeiro
Janeiro
Janeiro
Janeiro
Janeiro

printf {fmt, $1}


a
97
bbb97
9.750000e+01
97.500000
97.50
000097
|Janeiro|
|
Janeiro|
|Janeiro
|
|Jan|
|
Jan|
|Jan
|
%

Programao Shell
48

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Comandos de Juno
AWK (Cont.)
Begin
Aes que devem ser executadas antes do stdin ser lido.
Na execuo de mais de uma ao ela deve estar entre
colchetes.
BEGIN { FS = :
printf (%20s %5s\n , NOME , RAMAL) }
{ printf (%20s %5s\n, $2 , $1) }
End
Aes que devem ser executadas aps o stdin ser lido.
Se for executar mais de uma ao ela deve estar entre
colchetes.
END { printf ("%20s" , "fim de relatrio ") }
END { print "fim de relatrio" }

Programao Shell
49

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Comandos de Juno

Notas:

AWK (Cont.)
Instrues condicionais:
if (expresso) {aes} [else {aes} ]
while (expresso) {aes}
BEGIN { FS = : }
if ($1 != prev {
print
prev = $1
}

Variveis especiais:
NR: nmero da linha corrente
NF: quantidade de campos da linha
FS = caracter: define delimitador

Programao Shell
50

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Date
Algumas opes de date:

`date +%a` => Tue ; `date +%A` => Tuesday

`date +%b` => Sep ; `date +%B` => September

`date +%c` => Tue Mar 31 15:58:44 2000

`date +%d` => 31

(com 0 ex: 01)

`date +%e` => 31

(sem 0 ex: 1)

`date +%D` => 09/31/00(ms/dia/ano)

`date +%j` => 254

`date +%m` => 03

`date +%p` => PM

`date +%U` => 36

(no. da semana)

`date +%y` => 00

(ano)

data= `date +%d-%m-%Y` => 22-02-2000

hora=`date +%H%M%S`

(dia do ano)

Notas:
Programao Shell
51

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Dicas de programao
1. Se a sua shell for fazer FTP, alterar a permisso do
arquivo que contm o usrio e a senha para 700. Este
um tem obrigatrio por medidas de segurana.
2. Cada sistema tem um usrio para acessar o IBM
(mainframe) via FTP. Se o objetivo deste ftp acessar
alguma viso DB2, dever ser solicitado ao DBA
autorizao para acesso s vises.
3. Utilize filtros de reduo, grep, cut e awk em primeiro
lugar em um conduto, reduzindo a quantidade dos dados
que devero ser transferidos pelo Shell.
Exemplo: grep $1 arq1 | sort
4. Utilize condutos ao invs de arquivos temporrios para
melhorar a eficincia da sua shell
Com arquivo temporrio:
cut -f1,5 arq1 > /tmp/arq1tmp
sort /tmp/arq1tmp
rm /tmp/arq1tmp
Com conduto:
cut -f1,f5 arq1 | sort
5. Qualquer programa Shell com mais de duas pginas
muito complexo.

Programao Shell
52

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Dicas de programao
6. Sempre utilize delimitador de campos nos arquivos. O
delimitador deve ser nico e simples e deve ser
utilizado entre colunas.
7.

Utilize delimitador nico e diferente para subcampos,


como por exemplo data (dia/ms/ano).

8. Organize os dados para maior eficincia da mquina:


primeiro chaves primrias, depois chaves secundrias e
depois os itens de dados.

Programao Shell
53

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Executar comandos vi em modo batch

Notas:

Utilizando o editor vi:

vi

vi arquivo < comandos_vi >/dev/null

Comandos_vi:
/FIM
dd
^[
:x

Se o arquivo existir, touch atualiza a data do arquivo, se no


existir touch cria o arquivo
echo, escreve no stdout, no caso no arquivo criado por touch
^[ - representa a tecla ESC (digitar CTRL v CTRL [ )
:x - sai do editor vi e salva o arquivo
vi abre o arquivo e executa os comandos gravados no arquivo
comandos_vi
>&! /dev/null - se a execuo do vi der algum erro ele joga
fora as mensagens de erro

ed

editor ed executa os comandos definidos abaixo dele at


encontrar o delimitador, neste exemplo, EOF!
s - substitui
g - global
w - salva as alteraes no arquivo aberto por ed
q - sai do editor ed

Programao Shell
54

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)

Notas:

Como utilizar ISQL num SHELL


/usr/informix/bin/isql -s bgql01 -qr delvtab53 > \
logerror_delete

/usr/informix/bin/isql
Path do isql

-s bgql01
Banco de dados que est a viso/relao que
ser acessada.
-qr
Opes do isql que sero executadas. No caso,
q (query) e r(run)
delvtab53
Arquivo que contm os comandos isql
\
Continuao da linha comando
logerror_delete
Se ocorrer algum erro, ser gravado neste
arquivo
Programao Shell
55

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br)

REFERNCIAS

Programao Shell
56

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br)

Comandos bsicos do vi:


INICIANDO O VI
vi filename
abre ou cria um arquivo
vi +18 filename
abre o arquivo na linha 18
a
vi +/teste filename abre o arquivo na 1 . ocorrncia de teste
view filename
abre o arquivo somente para leitura
COMANDOS DE CURSOR
h
move esquerda
j
move para baixo
k
move para cima
l
move direita
w
move uma palavra direita
W
move uma palavra direita (alm da pontuao)
b
move uma palavra esquerda
B
move uma palavra esquerda (alm da pontuao)
Return
move uma linha abaixo
Back Space move um caracter esquerda
Space Bar move um caracter direita
H
move para o incio da tela
M
move para o meio da tela
L
move para o fim da tela
Ctrl-F
avana uma tela
Ctrl-D
avana meia tela
Ctrl-B
retorna uma tela
Ctrl-U
retorna meia tela

:
vai para a 1 linha do arquivo
:$
vai para a ltima linha do arquivo

a
A
I
I
o
O

INSERINDO CARACTER E LINHAS


insere caracter direita do cursor
insere caracter direita do cursor e sinaliza fim de inha
insere caracter esquerda do cursor
insere caracter esquerda do cursor e sinaliza fim de inha
insere linha abaixo do cursor
insere linha acima do cursor

u
U
:u

ALTERANDO O TEXTO
altera palavra ( ou parte da palavra direita do cursor)
altera linha
altera parte da linha direita do cursor
substitui a string onde o cursor est posicionado
repete string que o cursor est com um outro caracter
r-Return para linha
junta a linha corrente com a linha acima
muda o caracter que o cursor est posicionado com o
caracter direita
altera letra (upper ou lower)
desfaz o comando anterior
desfaz todas as alteraes da linha
desfaz o comando anterior da ltima linha

x
dw
dd
D
:5,10 d

DELETANDO TEXTO
deleta caracter
deleta palavra (ou parte da palavra direita do cursor)
deleta linha
deleta parte da linha direita do cursor
deleta da linha 5 linha 10

cw
cc
C
s
r
J
xp

Programao Shell
57

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br)

:g/string/d
procura a string e deleta
:%s/string velha/string nova/g
:%s/^h.t$/host substitui palavra que comea com h e termina com t

COPIANDO OU MOVENDO TEXTO


yy ou Y
marca linha a ser copiada
p
copia a linha marcada abaixo da linha corrente
P
copia a linha marcada acima da linha corrente
dd
deleta linha (em vez de mover)
:1,2 co 3 copia as linhas 1-2 e coloca-as depois da linha 3
:4,5 m 10 move as linhas 4-5 e coloca-as depois da linha 10

LIMPANDO A TELA
Ctrl L

INSERINDO UM ARQUIVO NUM ARQUIVO


:r filename
insere o arquivo depois do cursor
:34 r filename insere o arquivo aps a linha 34

SETANDO LINHA NUMERADA


:set nu
mostra as linhas numeradas
:set nonu inibe a numerao das linhas

G
21G
?

limpa a tela

PROCURANDO UMA LINHA


vai para a ltima linha do arquivo
vai para a linha 21
busca de traz para diante

PROCURANDO E ALTERANDO
/string/
procura a string
?string?
procura a string no texto acima
n
procura a prxima ocorrncia da string
:g/search-string/s//replace-string/gc
procura e altera, consultando antes de cada ocorrncia
:%s/string_velha/string_nova/g
troca string_velha pela string_nova
:g/....$/s/// deleta as 4 ltimas posies
:g/^$/d
deleta linha em branco
:g/^Capit [0-9]$/g .w >> stdout
grava no arquivo todas as linhas que contenham a string
"Capit" seguida de espao em branco e 1 algarismo
variando de 1 a 9
:g/^Capit [0-9]$/ . copy $
a mesma pesquisa, porem sero copiadas para o final do
arquivo

SALVANDO E CANCELANDO
:w ou :x
salva as alteraes (no buffer)
:w filename
grava o buffer no arquivo
:wq ou :zz
salva as alteraes e sai do vi
:q!
sai do vi sem salvar as alteraes

arq .exrc
ab vc - Vocabulary

Programao Shell
58

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br)

NDICE

Programao Shell
59

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br)

O QUE SHELL ?.............................................................................................. 2


QUANDO USAR ................................................................................................... 3
PRODUTIVIDADE ............................................................................................... 4
FILTROS............................................................................................................... 5
REDIRECIONAMENTO...................................................................................... 6
CONDUTO ............................................................................................................ 7

TRATAMENTO DE PARMETROS ............................................................... 21


PRINCIPAIS OPERADORES ............................................................................ 22
OPERADORES DE TESTE ............................................................................... 23
COMANDOS CONDICIONAIS......................................................................... 24

IF - THEN - ELSE ..........................................................................................

24
25
FOR ............................................................................................................ 26
WHILE ........................................................................................................ 27
CASE ..........................................................................................................

CONSTRUO DE UM SHELL SCRIPT .......................................................... 8

COMANDOS DO SHELL .................................................................................. 28

CARACTERES ESPECIAIS DO SHELL ............................................................ 9

COMANDOS DE IMPRESSO ......................................................................... 30

TIPO DE VARIVEIS........................................................................................ 11

GLOBAL: .................................................................................................... 11
LOCAL:....................................................................................................... 11

DEFINIO DE VARIVEIS ........................................................................... 12

STRING ....................................................................................................... 12
STRING ....................................................................................................... 13
INTEIRO ...................................................................................................... 14
ARRAY ....................................................................................................... 15

EDIO DE STRING ........................................................................................ 16

TYPESET ..................................................................................................... 16

TRATAMENTO DE VARIVEIS ..................................................................... 17

TESTA SE A VARIVEL TEM CONTEDO .......................................................... 17

TRATAMENTO DE ERRO ............................................................................... 18

$? - TESTA SE O COMANDO FOI EXECUTADO COM SUCESSO. ............................ 18

VARIVEIS DE AMBIENTE ............................................................................ 19


EXECUO DE UM SHELL SCRIPT.............................................................. 20

ECHO OU PRINT ...........................................................................................


CAT ............................................................................................................

30
31

COMANDO DE SEGURANA.......................................................................... 32

CHMOD .......................................................................................................

32

COMANDO DE LEITURA ................................................................................ 32

READ ..........................................................................................................

32

COMANDO DE ORDENAO......................................................................... 33

SORT ..........................................................................................................

33

COMANDOS DE SELEO ............................................................................. 34

LINE ...........................................................................................................

34
34
TAIL ........................................................................................................... 34
HEAD ..........................................................................................................

COMANDOS DE SELEO ............................................................................. 35

SED ............................................................................................................

35
UNIQ........................................................................................................... 36
FIND ........................................................................................................... 36
GREP .......................................................................................................... 37
CUT ............................................................................................................ 38

Programao Shell
60

Centro de Computao - Unicamp


Gerncia de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br)

WC ............................................................................................................. 38
SPLIT .......................................................................................................... 39
CSPLIT ........................................................................................................ 40

COMANDOS DE TRANSFORMAO ............................................................ 41

TR .............................................................................................................. 41
DD .............................................................................................................. 41
SED

............................................................................................................ 41

COMANDOS DE JUNO................................................................................ 42

JOIN............................................................................................................ 42
PASTE ......................................................................................................... 43
AWK ........................................................................................................... 44

DATE................................................................................................................... 51
DICAS DE PROGRAMAO ........................................................................... 52
EXECUTAR COMANDOS VI EM MODO BATCH ........................................ 54
COMO UTILIZAR ISQL NUM SHELL ........................................................... 55
COMANDOS BSICOS DO VI:........................................................................ 57

Programao Shell
61

Você também pode gostar