SlideShare uma empresa Scribd logo
1 de 61
Baixar para ler offline
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação C-Shell
1
PROGRAMAÇÃO
SHELL
Autoras: Universidade Estadual de Campinas
Cristiana Munhoz Eugênio Centro de Computação
Lilliam Cássia Ciani Palermo Versão: 6 - Fevereiro 2000
Colaboradores - Agradecimentos Especiais:
Cristina Maria Zanini
Rubens Queiroz de Almeida
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
2
O que é Shell ?
• programa que conecta e interpreta os comandos
• linguagem de programação completa - interpretada
• possui variáveis;
• construções condicionais e interativas;
• ambiente adaptável ao usuário;
• é uma das linguagens originais de quarta geração
(4GL).
Simplicidade do Shell
• Pipeline
• Sistemas de arquivos
• Sistema operacional UNIX
Notas:
• O programa shell interpreta os comandos que você digita quando
trabalha com o sistema operacional e traduz para comandos que o
kernel compreende.
• Shell: é uma linguagem de programação completa, possuindo
variáveis, construções condicionais, interativas e ambiente
adaptável ao usuário. O Shell do Unix é a ferramenta original de
protótipo rápido que ensina conceitos-chaves como modularidade,
reutilização e desenvolvimento.
• Os comandos do Shell se comunicam entre si por meio de uma
interface simples e coerente chamada conduto (pipeline).
• O Shell permite que o usuário realize suas atividades sem afetar
qualquer outro processo que não lhe pertence. Quando um
usuário conecta-se a um sistema Unix, o sistema operacional
inicia automaticamente uma cópia do Shell, sob a qual o usuário
poderá realizar qualquer função disponível.
• O shell utiliza o sistema de arquivos do UNIX que permite
organizar arquivos em pastas (diretórios). Esta hierarquia de
diretórios e arquivos gera uma visão simples e clara de toda a
informação no sistema.
• O UNIX é transportável; ele roda em quase todo hardware de
computadores fabricados atualmente. Seu investimento não será
desperdiçado, pois qualquer programa escrito é largamente
portável entre Unix’es de diferentes plataformas e fornecedores.
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
3
Quando usar
Interativamente
• Realizar uma operação simples, uma única vez
• Interagir com o comando
O Shell Script deverá ser utilizado sempre que for
necessário realizar:
• um procedimento complexo usando muitas linhas de
comando;
• um procedimento do qual todos os usuários poderão
beneficiar-se;
• um comando simples usado inúmeras vezes;
• uma tarefa numa data planejada;
• integrar informações de vários sistemas existentes;
Notas:
• A qualquer momento que você executa algum comando (ls, cat),
você está usando o Shell interativamente: stdin, stdout e stderr
são todos direcionados para o terminal.
• Stdin => standart input
• Stdout = > standart output
• Stderr => standart error
• Quando você começa a usar o Shell interativamente e descobre
que alguns processos exigem muita digitação, é hora de aprender
sobre a programação Shell. Deve-se colocar esses comandos
interativos em um arquivo executável. Você poderá reutilizar
sempre que precisar, melhorando ainda mais a sua produtividade.
• O Shell pode extrair e manipular grandes quantidades de
informações. Por que pesquisar um relatório inteiro quando o Shell
pode verificar e recuperar informações importantes para você sem
qualquer esforço ?
• A composição de sistemas a partir de programas do Shell realizará
quase todas as tarefas necessárias. Em vez de esperar meses ou
anos para a “solução perfeita”, aplicações protótipo do Shell
podem ser desenvolvidas, melhoradas e implementadas. Quando
necessário, elas poderão ser utilizadas como especificações de
requisitos para o desenvolvimento de um sistema “real”.
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
4
Produtividade
• Linguagem interpretada - não compilada
• Um programador médio pode duplicar ou triplicar sua
produtividade com o uso do Shell
• Comparação de Bruce Cox (pai do Objetive C)
shell 1 linha de código
linguagem orientada a objeto10 linhas de código
linguagem C 100 linhas de código
Notas:
• Não é 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.
É necessário alguns conhecimentos internos do Shell e do seu uso
para derivar desses benefícios. Mas, é preciso apenas alguma
inventividade para tornar-se mais eficiente e produtivo.
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
5
Filtros
(teclado)
• grep -i “Arthur” capit1
Autor: Lowel Arthur
Rei Arthur e os Cavaleiros da Távola
• 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
ocorrências de “shell” para “Shell”.
Notas:
• Uma chave para transformar dados brutos em informação útil é
filtrar os dados estranhos.
• Você pode pensar na maior parte dos comandos do Shell como
filtros.
• Cada comando também possui duas saídas:
• saída-padrão --> stdout
• saída-de-erro --> stderr
• Cada comando filtra dados da entrada-padrão ou transforma-os
de algum modo, passando-os à saída-padrão. Quaisquer erros
encontrados são passados à saída-de-erro.
• Alguns filtros extraem apenas os dados que você deseja ver,
outros incluem ou alteram os dados conforme suas instruções.
FILTROSTDIN STDOUT (tela)
STDERR (tela)
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
6
Redirecionamento
• Criar ou anexar arquivos;
• Usar arquivos existentes como entrada para o Shell;
• Reunir dois fluxos de saída;
• Usar parte do comando shell como entrada.
Operadores:
< arquivo direciona um arquivo para stdin
> arquivo direciona stdout para uma nova saída
>> arquivo 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
Notas:
• Você pode usar o redirecionamento de E/S para mudar a direção
de stdin/stdout e stderr.
Exemplo:
sed -e “s/shell/Shell/g” < capit1 > novocapit1
• O stderr ainda estaria direcionado para o terminal
• 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
Sintaxe: comando argumentos >>& arqsaida
• O arquivo de saída terá todos os dados da saída-padrão e
da saída-de-erro criados pelo comando do shell.
• Se o arquivo novocapit1 não existir, então 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!
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
7
Conduto
• Conecta stdout de um comando à stdin de outro
• O resultado da execução de um comando pode ser
utilizado como parâmetro de entrada na execução de
outro comando
• Meio de condução 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
Notas:
• Os comandos do Shell podem ser reutilizados, acoplados e
moldados para lidar com as mais difícieis aplicações de
informação.
• Além de eliminar arquivos temporários, o conduto permite que dois
comandos operem ao mesmo tempo.
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
8
Construção de um Shell Script
• Edite um arquivoÎvi meu-programa
• Esse arquivo deve conter na primeira linha:
• #! /bin/ksh
• # ÎÎutilize para comentar uma linha
• /bin/rm arquivo
É recomendável passar o “caminho” (path) dos comandos
• rm arquivo
Garante encontrar a primeira ocorrência no path.
• As shells devem estar sempre num diretório comum, por
exemplo: /usr/sys/nome-sistema
• Arquivos de controle que são gerados pela shell devem
estar num diretório temporário, separado das shells.
Notas:
• #! /bin/ksh ÎÉ utilizado para que o Unix saiba que sua shell é
korn shell.
• É recomendável passar o “caminho” do comandos, pois cada
usuário pode criar na sua área um alias para qualquer comando.
• Os comandos ficam geralmente no diretório /bin
• Outra opção seria colocar scape antes do comando, por
exemplo rm. Garante que você estará utilizando a 1
a.
ocorrência encontrada no path definido no seu .kshrc
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
9
Caracteres especiais do Shell
• “ “ (aspas duplas)
Mostra a cadeia de caracteres citada entre ", substituindo
o nome da variável pelo seu conteúdo.
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 variável pelo seu conteúdo.
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
Notas:
• A utilização de caracteres especiais dentro de uma citação dará
problemas. Para isso utilize o recurso da “barra invertida”.
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
10
Caracteres especiais do SHELL
• ; (vírgula)
Separador de comando sequencial.
Ex: date; ksh meu_shell; date > /tmp/result &
• ? ( ponto de interrogação )
Combina com qualquer caracter isolado .
• * (asterisco)
Combina com qualquer cadeia de caracter.
• [a-z]*
Combina com algo que consista de caracteres alfabéticos
minúsculos .
• ^string
Procura a string somente no começo da linha
• string$
Procura a string somente no fim da linha
Notas:
Exemplos:
Suponha que no diretório corrente exista os seguintes arquivos:
capit1 , capit2, capit3, capit4 e capitulo
ls capit* (aparecerá os 5 arquivos)
ls capit? (capit1, capit2, capit3, capit4)
ls capit[1-3] (capit1, capit2, capit3)
• os caracteres "?", "*" e "[a-z]" podem ser usados no meio de
uma string
ls cap?t
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
11
Tipo de Variáveis
• Global:
Seta variáveis de ambiente ou variáveis globais. Elas
existem enquanto a sessão estiver aberta.
Sintaxe: export nomevar=valor
Exemplos:
export TERM=vt100 (variável de ambiente)
export DBDATE=Y4MD- (variável de ambiente)
export matricula=20444 (variável global)
• Local:
Seta variáveis locais. Elas existem somente durante a
execução da Shell.
Sintaxe: nomevar=valor
PARA SABER QUAIS VARIÁVEIS ESTÃO SETADAS E
QUAIS SÃO SEUS VALORES, UTILIZE O COMANDO
SET.
Notas:
• EXPORT:
• Seta variáveis de ambiente ou globais. Existem enquanto a
sessão estiver aberta.
• export PS1="`hostname`{`whoami`}$ "
magda{maria}$
• NÃO existe espaço em branco entre o nome da variável e seu
conteúdo
• nome=Rogério
• Nomes de Variáveis não pode conter hifen.
• nota-aluno Îdará erro X
• É permitido o uso do underline para nome de variáveis:
• minha_var
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
12
Definição de variáveis
• String
• Atribuindo valores:
Sintaxe : nome=conteúdo
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
echo $conc ÆLilliam
NOMES DE VARIÁVEIS NÃO PODEM CONTER
HÍFEN.
Notas:
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
13
Definição de variáveis
• String
• Utilizando string:
Utilize "$" para substituir o nome da variável pelo seu
conteúdo.
Sintaxe : $variável
Exemplos:
cabec=“ Relatório do ano $ano”
dir_log=/tmp ; ls $dir_log
aluno=${nomes[$cont]}
parm1=$1
ls arq$var
dia=Segunda-feira ; echo “ Hoje é dia $dia “
Notas:
• Não deixe espaço em branco entre o cifrão ($) e o nome da
variável.
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
14
Definição de variáveis
• 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
NÃO DEIXAR ESPAÇO ENTRE O NOME DA
VARIÁVEL E O SINAL DE IGUAL
NÃO É NECESSÁRIO INICIALIZAR UMA VARIÁVEL
COM O COMANDO LET PARA ELA SER DO TIPO
INTEIRA, UTILIZE O "LET" APENAS QUANDO VOCÊ
QUISER MANIPULÁ-LA .
Notas:
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
15
Definição de variáveis
• Array
• Criando arrays:
Exemplos:
set -A var a b c
set -A nomes ana jose maria
• Incrementando arrays:
Exemplos:
nomes[3]=joão
aluno=${nomes[[3]}
echo $aluno ÆÆjoão
• Manipulando arrays:
• ${var[*]}
Mostra o conteúdo do array inteiro
• ${#var[*]}
Mostra o número de elementos (argumentos) de
um array.
• ${variável[n]}
Elementos posicionais de um array.
A 1ª
OCORRÊNCIA DO ARRAY COMEÇA COM 0
Notas:
• set -A var val1 val2 val3 val4
• set -A semana Segunda Terça Quarta Quinta Sexta Î seta um
array chamado semana contendo os dias da semana
• Exemplos de array :
set -A nome maria lucia joao
echo ${nome[*]} ÆResp = maria lucia joao
echo ${#nome[*]} ÆResp = 3
• Se o indexador do array ultrapassar o número de elementos
existentes, será retornado branco
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
16
Edição de string
• typeset
Especifica o tipo do valor da variável
Sintaxe:
typeset [opções] v=$var
Opções:
• -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 minúsculo
• -u converte para maiúsculo
Exemplos:
alpha=" aBcDeFgHiJkLmNoPqRsTuVwXyZ "
typeset -L v=$alpha" Æ"aBcDeFgHiJkLmNoPqRsTuVwXyZ "
typset -uR5 v=$alpha Æ "VWXYZ"
typeset -Z8 v="123.50" Æ "00123.50"
Notas:
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
17
Tratamento de Variáveis
• testa se a variável tem conteúdo
-n str: retorna verdadeiro se variável NÃO FOR NULA
-z str: retorna verdadeiro se variável for NULA
if [[ -z $matricula ]] then
echo " variável matricula NÃO inicializada"
fi
matricula=23456
if [[ -n $matricula ]] then
echo " variável matricula inicializada"
fi
Notas:
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
18
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)
FAÇA UM TESTE ANTES POIS DEPENDENDO DO
SISTEMA PODE SER O CONTRÁRIO !!!!!!
Notas:
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
19
Variáveis de ambiente
• $USER
Conteúdo do comando whoami (quem é o usuário da
conta)
• $PATH
Lista de diretórios a serem procurados pelo meus
executáveis
• $HOME
Mostra qual é o diretório 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
• $$
Número do processo do comando corrente
Notas:
• O valor das variáveis ao lado podem ser encontrados ao
digitarmos o comando set.
• $$ ÎÎMuito utilizado pelos utilitários de mail que gravam o arquivo
em /tmp/arq_número_do_processo
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
20
Execução de um Shell Script
• Fora do editor vi, na linha de comando:
$ksh -opções_de_teste meu-shell parâmetros
• Gravar a execução de uma shell script
$script
$ksh -opções_de_teste meu-shell
$ CTRL D
$ more typescript
• Dentro do editor vi:
• :w ÎÎgrava o arquivo que está na memória
• :!ksh -opções de teste %
! ÎÎ diz ao vi para executar o comando shell
seguinte
% ÎÎ diz ao vi para preencher o nome do arquivo
corrente
Opções de Teste:
• x ÎÎgera saída dos comandos executados
Notas:
• Você pode executar o seu programa a medida que for sendo
desenvolvido, facilitando também a detecção e correção de erros.
• Entrando no vi e criando as primeiras linhas do programa, grave o
arquivo (:w) e execute-o sem sair do editor: (:!ksh -opção %)
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
21
Tratamento de Parâmetros
• $#
No. de parâmetros
• $0
Parâmetro que contém o nome do programa
• $1, $2, $3, ...
Parâmetros fornecidos
• $*
Lista o conteúdo de todos os parâmetros
Notas:
• Se você tem um shell script que recebe parâmetros de entrada,
você pode usar $# no começo do programa para obter o número
de argumentos (parâmetros) recebidos, testando se esse era o
número de argumentos esperado.
Exemplo:
ksh meuscript parm1 parm2
#! /bin/ksh
if (( $# == 2)) then
echo " numero de parametros correto "
fi
• ksh meuprogram parm1 parm2
$0 $1 $2
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
22
Principais Operadores
Operação Numérico String
igual == =
diferente != !=
menor, maior <, > <, >
... ou igual >=, <= >=, <=
and , or &&, ||
soma +
subtração --
multiplicação *
divisão /
Notas:
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
23
Operadores de Teste
Condição Shell Verdadeira se ...
-d file se é diretório
-f file se é file
-r arquivo existir arq. legível
-w arquivo existir arq. gravável
-x arquivo existir arq. executável
-a arquivo se arquivo existe
-s arquivo se arquivo existe e não 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
Notas:
• No núcleo de cada estrutura de controle existe um teste
condicional.
• O comando test pode determinar se um determinado nome é um
arquivo ou um diretório; se ele pode ser lido, ou se é executável; e
se uma cadeia ou inteiro é maior, menor ou igual a outro.
• Test, como qualquer outro comando do Shell, sempre retorna um
valor verdadeiro (0) ou falso (1) na variável status do shell.
test -r nomearq
echo $?
if [[ -d arq_com ]] then
echo " arq_com é um diretório "
fi
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
24
Comandos condicionais
• if - then - else
• if (( expressão aritmética )) then
processa 1
else
processa 2
fi
• if [[ testes condicionais ]] then
processa 1
else
processa 2
fi
PARA COMPARAÇÕES DE TESTES CONDICIONAIS E
COMPARAÇÕES DE STRINGS É NECESSÁRIOS TER
ESPAÇOS EM BRANCO ENTRE OS COLCHETES E
OS OPERADORES
Exemplo:
if [[ $a = $b ]] then
echo “variáveis iguais “
fi
Notas:
• Exemplos:
Comparação numérica
a=5 ; b=7
if (( $a == $b )) then
echo “valores iguais “
else
echo “ valores diferentes”
fi
Comparação de testes condicionais
if [[ -z $parametros ]] then
echo “ ERRO - não foi passado parâmetros !!! “
exit
fi
Comparação de string
a=inteiro ; b=metade
if [[ $a = $b ]] then
echo “variáveis iguais “
else
echo “ variáveis diferentes”
fi
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
25
Comandos condicionais:
• case
case expressão in
opção1 ) processa a
echo opcao a ;;
opção2 ) processa b;;
opção3 ) processa c;;
* ) echo " Opção inválida " ;;
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
Notas:
• Exemplos:
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
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
26
Comandos condicionais:
• for
for var in expressão
do
comandos que usam $var
done
Exemplos:
for file in *.c
do
mv $file `echo $file | tr ´A-Z´ ´a-z ´ `
echo $file
done
Onde expressão pode ser:
• resultado de um comando
• valores
• ocorrências de um array
• As instruções dentro do comando for serão executadas
tantas vezes quantas forem o no
de elementos pertences
à expressão
Notas:
• Exemplos:
Utilizando array:
set -A tabela lilliam kikinha
for pessoa in ${tabela[*]}
do
echo $pessoa
done
end
Utilizando o resultado de um comando:
for arquivo in `grep -l "matr_aluno" *.sqb`
do
ex +%s/"old_string"/"new_string"/g +wq $arquivo > /dev/null
done
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
27
Comandos condicionais:
• 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
Notas:
• Sintaxe:
while ((expressão))
do
done
• Comando exit:
Serve para sair do while sem ser pela condição definida na
expressão.
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
28
Comandos do Shell
Os comandos shell serão mostrados divididos em
várias categorias:
• Arquivos e diretórios
• Seleção
• Combinação e ordenação
• Impressão
• Segurança
Notas:
• Para cada comando existem várias opções. Neste curso
tentaremos mostrar as opções mais utilizadas. Para conhecer
outras opções ou maiores detalhes utilize o comando man:
Exemplo:
man nome_comando
• Comandos :
1. próxima linha ENTER
2. próxima página space bar
3. página anterior CTRL B
4. procura string /caracter especial ou /string
5. continuar a busca n
6. cancelar pesquisa q ou CTRL C
OBS: Nem todos os comandos usam as opções da mesma
maneira.
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
29
TIPO COMANDO
Diretório cd ls pwd
mkdir rmdir
Arquivo cat cp csplit
ln mv rm split
Seleção awk
cut
grep
head
line
sed
tail
uniq
wc
Junção cat
join
paste
Ordenação sort
Transformação sed
tr
dd
Impressão cat
echo
Segurança chmod
Leitura $<
touch
sleep
exit
Notas:
Os comandos de Diretórios e Arquivos já foram abordados
anteriormente. Eles podem ser utilizados sem restrições 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 altera o diretório corrente
ls lista o conteúdo do diretório
pwd mostra qual é o diretório corrente
mkdir cria diretório
mkdir -p cria árvore completa de diretórios
rmdir deleta diretório
cp copia arquivo
cp -p copia mantendo as características originais
mv renomeia arquivo
rm deleta arquivo
basename mostra o nome do arquivo tirando o path
dirname mostra o nome do arquivo colocando o path
diff compara conteúdo de 2 arquivos
< 1
º
arquivo > 2
º
arquivo
cmp compara dois arquivos
-s ( echo $? Ætraz 1 se diferente )
( echo $? Ætraz 0 se igual )
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
30
Comandos de Impressão
• echo ou print
Escreve argumentos em stdout.
Sintaxe:
echo [opções] string
Opções:
• -n : não adiciona uma nova linha no stdout antes
de imprimir a string, deixando o cursor na linha
da mensagem escrita. FUNCIONA APENAS
COM PRINT
Notas:
• echo
Exemplos:
1. print -n “Entre com a opção desejada => “
Entre com a opção desejada Î__
2. echo “Hoje é dia $dia”
3. echo “Bom dia”
4. echo “Os arquivos são: “ *
5. echo “Essa pessoa $nome eh muito legal” > arq
6. echo * Æo mesmo que o comando ls *
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
31
Comandos de Impressão
• cat
Concatena e imprime. O comando cat não altera dados,
ele toma a stdin e a reproduz no stdout. Possui também
a opção de varrer o arquivo mas não pára a cada tela
do terminal.
Sintaxe:
cat [opções] stdin
Opções:
• -n : lista as linhas do arquivo numerando-as
file:
Notas:
• cat
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.
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
32
Comando de Segurança
• chmod
Altera a permissão do arquivo.
Sintaxe:
chmod [quem] operação acesso arquivo
Opções:
• quem: u(usuário), g(grupo), o(outros), a
(todos)
• operação: +(atribuir), -(remover), =
• acesso: r(read), w(write), x(execução)
• -R : altera a permissão dos arquivos e
diretórios descendetemente.
Para tornar um shell script executável, é necessário alterar
a permissão do arquivo.
Comando de Leitura
• read
Direciona o terminal como stdin, ou seja , captura o
que foi digitado no teclado.
Sintaxe:
read variável
Notas:
• chmod
Se a sua shell for executar o comando FTP você deverá alterar a
permissão do arquivo que contém o usuário e a senha para
somente o dono ler, gravar e executar.
Exemplos:
chmod u=rwx,go= arquivo
ls -la
-rwx------ 1 lilliam supsof 110 Sep 25 16:33 arquivo
• Exemplo:
echo -n “Digite a opcao: “
read opcao
if (($opcao > 9)) then
echo “Opcao Invalida”
fi
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
33
Comando de Ordenação
• sort
Ordena e combina múltiplos arquivos.
Sintaxe:
sort [opções] stdin .....
Opções:
• -b: ignora espaços em branco para encontrar a 1a
ou última coluna do campo
• -d: sorteia usando ordem alfabética. Somente
letras, dígitos e espaços são considerados na
comparação.
• -f: altera todas as letras minúsculas para
maiúsculas antes da comparação.
• -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] [opção] [ , cpo fim.col fim]
[opção] : define chave do sort
• -o: especifica que o stdout vai ser o mesmo
arquivo do stdin
Notas:
• O comando sort trabalha a nível de caracter, campo ou em uma
combinação dos dois. Caso o arquivo sorteado possua linhas
duplicadas estas podem ser retiradas com uniq. Para tornar mais
eficiente esse comando deve ser utilizado após os dados terem
sido selecionados (grep ou cut).
As opções válidas para a opção -k são: b,d,f,n,r
Valores default para a opção -k:
cpo ini começo da linha
col ini 1
a
. 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
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
34
Comandos de Seleção
• line
Copia uma linha do stdin e grava no stdout.
Sintaxe:
line stdin > stdout
stdin - arquivo
stdout - arquivo ou terminal
• head
Seleciona as 10 primeiras linhas de um arquivo.
Sintaxe:
head [opção] stdin > stdout
Opções:
• -c n : seleciona as n primeiras colunas do stdin
• -n : seleciona as n primeiras linhas do stdin
• tail
Seleciona as 10 linhas finais de um arquivo
Sintaxe:
tail [opções] stdin > stdout
Opções:
• -n : seleciona as n últimas linhas do stdin
• -f : mostra as linhas que estão sendo
adicionadas no arquivo.
Notas:
head -c3 /etc/passwd
tail -f /var/adm/messages
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
35
Comandos de Seleção
• sed
Edita e altera dados.
Sintaxe:
sed [opções] stdin > stdout
Opções:
• -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”
"s/ *$//g" Ædeleta espaço em branco até o fim
da linha
1d arquivo Ædeleta a 1ª
linha do arquivo
• -f arquivo : contém os scripts que devem ser
executados. Não colocá-los entre aspas duplas.
• -n x,zp arquivo : Seleciona da linha "x" até a linha
"z" do arquivo especificado.
.
- Não usar stdin como stdout
- Pode ser alterado o delimitador do sed de "/ "
para qualquer outro caracter "+", "(", "=", etc
Notas:
• O comando sed muda a informação dentro de um arquivo ou
tabela. Este comando também deleta linhas de arquivos. Portanto
pode ser utilizado como um programa que atualiza campos ou
deleta linhas.
Exemplos:
1. sed -e “s/café/chá/g” entrada > entrada_alterada
Altera a palavra café para chá em todas as ocorrências (g)
2. sed -e “/João/d” entrada > saída
Deleta todas as linhas do stdin que contém a palavra João
3. sed -e “s/devedor//g” entrada
Deleta a palavra
4. sed -f arqcom entrada > arqsaida
Executa os comandos que estão no arquivo arqcom.
arqcom: s/shell/Shell/g
s/Terça/terça/ ÆÆ altera 1 ocorrência por linha
OBS: NÃO 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
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
36
Comandos de Seleção
• uniq
Seleciona apenas uma ocorrência de cada linha do
stdin. Obrigatoriamente stdin deve estar ordenado
(comando sort).
Sintaxe:
uniq [opções] stdin
Opções:
• -u: seleciona linhas únicas
• -c: conta o número de vezes que cada linha se
repete
• -d: seleciona apenas as linhas com mais de uma
ocorrência
• find
Seleciona arquivos, a partir do diretório especificado. É
recursivo.
Sintaxe:
find dir opções
Opções:
• -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 critério.
Notas:
Exemplos:
• find . -name "*.HTML" -print Ælista todos os arquivos que
terminam com .HTML
• find . -type f -print Ælista todos os arquivos do tipo file a paritir
do diretório corrente (.)
• find /home -type d -print Ælista todos os arquivos do tipo
diretórioa partir do diretório /home
• find . -name "*.sqb" -print | xargs grep "matr_aluno" | wc -l
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
37
Comandos de Seleção
• grep
Seleciona linhas usando um único critério de seleção.
Sintaxe:
grep [opções] string stdin
Opções:
• -c : conta o nº de vezes que a string aparece.
• -i : ignora uppercase
• -l : lista somente o nome dos arquivos que contém
a string procurada.
• -n : numera linhas que contém 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
String pode ser:
• $variável
• “palavra composta”
• palavra
• “metacaracteres” (* ? [a-z] )
• “stringmetacaracter”
Notas:
• O comando grep é a ferramenta principal para extrair informações
de campos de dados, procurar cadeia de caracteres e escrever a
informação em stdout.
Exemplos:
1. grep “Mar*” arquivo
2. grep Maria arq*
3. grep -l Maria arquiv*
4. grep -n Maria arquivo
5. grep $variável arquivo
6. grep -v “Maria Amélia” arquivo
7. grep ”[a-z]” arquivo
8. grep ^R arquivo
9. grep -c Chico arquivo
10. grep -i maria arquivo
11. ps -ef | grep maria | grep d Ænão aparece a linha do
grep anterior
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
38
Comandos de Seleção
• cut
Seleciona colunas.
Sintaxe:
cut [opções] stdin
Opções:
• -cx-y : define coluna inicial(x) e coluna final(y)
• -dCaracter : define delimitador
• -fx,y : quais campos serão selecionados
• -s : suprimi linhas que não contém delimitador.
Somente pode ser usado junto com a opção -d
OBS: O comando cut opera em colunas
• wc
Conta linhas, palavras e caracteres de arquivos.
Sintaxe:
wc [opções] stdin
Opções:
• -c: conta caracteres
• -l : conta linhas
• -w: conta palavras
Notas:
• O comando cut corta arquivos em colunas. Também pode operar
em cada caractere ou campo, ou alguma combinação de ambos.
Quando o arquivo tem algum separador entre campos você pode
selecioná-los através de cut.
Exemplos:
1. cut -f1,5 -d: arquivo
2. cut -c1-72 arquivo
3. cut -d: -s -f3,5 arquivo
OBS: Não é permitido o uso da opção -c junto com a opção -d.
• wc
Exemplos:
1. grep -l Maria arqu* | wc -l
2. cat arq l wc -l
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
39
Comandos de Seleção
• split
Divide o stdin em arquivos menores contendo um
número específico de linhas .
Sintaxe:
split [opções] stdin [prefixo]
Opções:
• - qtd. linhas: especifica o nº de linhas de cada
arquivo de saída. Default 1000 linhas por
arquivo.
• prefixo: prefixo dos stdouts criados. O sufixo é
aa,ab até zz. Default prefixo é x.
Notas:
• 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,…)
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
40
Comandos de Seleção
• csplit
Separa os arquivos sempre que encontrar uma
combinação entre seus argumentos e o conteúdo do
arquivo. Não funciona no FreeBSD
Sintaxe:
csplit [opções] stdin [argumentos]
Opções:
• -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 contém as linhas
anteriores ao 1º argumento.
• “%arg%” : cria um arquivo contendo os dados a
partir do argumento.
• -k: não desfaz a criação dos stdouts caso o no.
de stdouts especificado seja maior que o qtd de
stdin
Notas:
• csplit
Exemplos:
• O arquivo livro contém:
Introdução,
Capitulo1,
Capítulo 2,
Resumo.
1. csplit -f capit livro “/Capitulo /” “/Capitulo /”
resultado: capit00 (contém Introdução)
capit01 (contém Capítulo 1)
capit02 (contém Capítulo2 e Resumo)
2. csplit -f capit livro “%Capitulo 1%”
resultado: capit00 (contém Capítulo 1 Capítulo 2 e
Resumo)
3. csplit livro “/Capitulo 1/”
resultado: capit00 (contém Introdução)
capit01 (contém Capítulo 1, 2 e Resumo)
4. csplit -k livro “/Capitulo /” (9)
resultado: será criado até 10 stdout
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
41
Comandos de Transformação
• tr
Transforma caracter por caracter.
Sintaxe:
tr ‘caracter velha‘ ‘caracter nova‘ stdin > stdout
o comando TR é melhor que o DD, quando for converter
strings.
• dd
Converte e copia arquivo.
Sintaxe:
dd if=stdin of=stdout conv=[opções conv]
Opções do conv:
• lcase: converte arquivo para minúsculo
• ucase: converte arquivo para maiúsculo
• ascii: converte ebcdic para ascii
• ebcdic: converte ascii para ebcdic
• ibm: converte ascii to versão ebcdic da IBM
Não aceita passar path
• sed
Visto anteriormente.
Notas:
• O comando tr traduz os dados de entrada caractere por
caractere, com base em tabelas de conversão (string)
especificadas pelo usuário.
Exemplos:
1. tr ‘(A-Z)’ ‘(a-z)’ arq1 > arq1min
2. tr ‘(:)’ ‘(t)’ cad1 > cad1t
3. for file in `ls`
do
mv $file `echo $file | tr ‘(A-Z)’ ‘(a-z)’ `
echo $file
done
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
42
Comandos de Junção
• join
Junta dois arquivos, combinando linha a linha. Os
arquivos devem estar ordenados (comando sort).
Sintaxe:
join [opções] arquivo1 arquivo2
Opções:
• -tCaracter: define delimitador
• -a nº arquivo: produz uma linha de saída para
cada linha do arquivo especificado pelo nº
arquivo, mesmo para os campos do join que não
casam com nenhuma linha do outro arquivo de
entrada.
• -o nºarquivo.campo : As linhas de saída são
compostas pela lista dos campos especificados na
variável nºarquivo.campo. Para definir mais
campos separe-os por branco ou vírgula
• -1 campo ou -2 campo : Faz o join de 2 arquivos
usando o campo especificado na variável campo
do arquivo 1 (-1) ou arquivo 2 (-2).
• -e string: altera campos em branco do output pela
string especificada
Notas:
• 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 arquivo2: Aldo:enfermeiro:7234
Bruno:IMECC João:digitador:7111
João:CCUEC Ricardo:médico:7323
1. join -t: arquivo1 arquivo2
2. join -a1-t: arquivo1 arquivo2 > arqsaida
arqsaida: Aldo:HC:enfermeiro:7234
Bruno:IMECC:__________
João:CCUEC:digitador:7111
3. join -o 1.1 1.2 2.3 -t”:” arquivo1 arquivo2
arqsaída: Aldo:HC:7234
João:CCUEC:7111
4. join -1 2 -2 2 arquivo1 arquivo2
OBS:
Obrigatoriamente a opção -a tem que vir antes da opção -t.
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
43
Comandos de Junção
• paste
Anexa múltiplos arquivos coluna por coluna.
Sintaxe:
paste [opções] stdin1 stdin2
Opções:
• -dCaracter: define delimitador
• -s : junta linhas subsequentes do arquivo
Notas:
Exemplos:
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/João:digitador
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
44
Comandos de Junção
• awk
Linguagem de processamento e procura de padrões.
Encontra linha(s) no(s) arquivo(s) de entrada que
combinam com um padrão especificado e então executa
as ações definidas.
Sintaxe:
awk [opções] '/padrão/' {ação} stdin
Opções:
• -Fcaracter: define delimitador
A ação pode ser:
-f pgm: arquivo que contém as ações a serem
executadas pelo comando awk.
‘pgm’: são as ações a serem executadas pelo
awk.
Notas:
Exemplos:
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
5. awk -F: ‘{print $1 > “matr“; print $2 > “nome”}’ arq_fun
6. awk -F: ‘{printf “%15s %10sn”, $1, $3}’ arq1
7. awk -F: ‘/smith+ern/’ arq1
8. awk -F: ‘/amel??/’ arq_fun
9. awk -F: ‘{printf (“meu nome eh %s e meu ramal %5dn “ ,
$2,$4)} arq_fun
10. awk -F: ‘$3 ~/Oct/ {print $2 $3} ‘ arq1
11. awk 'NR == '$cont' {print $0} ' arq Æle linha por linha de
um arquivo
12. awk ($1 == " '$var' ") [print $0}' arq
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
45
Comandos de Junção
• AWK (Cont.)
Tipos de padrões de pesquisa:
• ‘/string/’ : grava em stdout todas as linhas do stdin que
contém pelo menos uma ocorrência da string.
• ‘/string1+string2/’ : grava em stdout as linhas que
contém 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 contém a
string1 seguido por nenhum ou um caracter que
precede o sinal ?
• ‘/string1|string2/’ : grava em stdout as linhas que
contém a string1 e/ou a string2.
• ‘/string1[char1-char2]/’ : grava em stdout as linhas
que contém 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 contém a string1 seguido por qualquer caracter
que não esteja entre char1 e char2 inclusive (char1 e
char2 devem estar em ordem).
Notas:
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
46
Comandos de Junção
• AWK (Cont.)
• ‘$1 ~/char1/’ : grava em stdout todos os registros que
contém no 1º campo o caracter char1 ou uma string .
• ‘$1 ~/^char1/’ : grava em stdout todos os registros que
não contém no 1º campo o caracter char1 ou uma
string.
• ‘$2 ~/char1$/’ : grava em stdout todos os registros que
contém o último caracter igual a char1 ou string.
• ‘$1 == “string1” ‘ : grava em stdout todos os registros
que contém 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.”
Notas:
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
47
Comandos de Junção
• AWK (Cont.)
Tipos de ações:
∗ Output:
Impressão de campos, variáveis e constantes:
‘{ print $1 “ “ $2}’ : grava em stdout o campo 1 e
campo 2 separados por um espaço em branco.
Redirecionamento:
‘{ print $1 > “arqoutput”} ‘ : redireciona o campo 1 para o
stdout arqoutput .
Instruções aritméticas:
‘{ print $1 *= $2 } ‘ : o campo 1 é o resultado da
multiplicação do campo1 com o campo2.
‘{print “ra” , $1 “média :” , $2 / $3 } ‘ : grava em stdout
o campo 1 precedido da string ra e a string média é o
resultado da divisão do campo $2 pelo campo $3 .
Variáveis Especiais:
‘{ print NR, $0 } ‘ : grava em stdout os registros de stdin
numerado.
Notas:
sequencia significado
n nova linha
b backspace
t tab
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
48
Comandos de Junção
• AWK (Cont.)
Concatenação de campos:
‘{ print $1 = $1 $2}' : o campo 1 é a concatenação do
campo 1 com campo 2
Imprimir linha em branco:
‘{print “ “} ‘
Impressão formatada de campos variáveis ou
constantes :
‘{printf “%15sn” , $1}’ : imprime o campo 1 por linha
formatando-o utilizando 15 posições alinhado à direita.
‘{printf “%20d %-5sn”, $3+$2 , $1}’ : imprime o
resultado da soma do campo2 e do campo3 e o campo
1.
‘{printf “%20s %4dn” , “NOME” , RAMAL”}’ imprime
as constantes NOME e RAMAL no formato definido
pelo printf.
Notas:
• Tabela de caracteres de controle para o printf
caracter expressão
c caracter ASC II
d decimal inteiro
e [-] d.dddddd [+-] dd
f [-] ddd.dddddd
s string
% imprime %
• Formatos válidos para o printf:
Fmt $1 printf ‘{fmt, $1}’
%c 97 a
%d 97.5 97
%5d 97.5 bbb97
%e 97.5 9.750000e+01
%f 97.5 97.500000
%7.2f 97.5 97.50
%06d 97 000097
|%s| Janeiro |Janeiro|
|%10s| Janeiro | Janeiro|
|%-10s| Janeiro |Janeiro |
|%.3s| Janeiro |Jan|
|%10.3s| Janeiro | Jan|
|%-10.3s| Janeiro |Jan |
%% Janeiro %
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
49
Comandos de Junção
• AWK (Cont.)
∗ Begin
Ações que devem ser executadas antes do stdin ser lido.
Na execução de mais de uma ação ela deve estar entre
colchetes.
BEGIN { FS = “:”
printf (“%20s %5sn” , “NOME” , “RAMAL”) }
{ printf (“%20s %5sn”, $2 , $1) }
∗ End
Ações que devem ser executadas após o stdin ser lido.
Se for executar mais de uma ação ela deve estar entre
colchetes.
END { printf ("%20s" , "fim de relatório ") }
END { print "fim de relatório" }
Notas:
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
50
Comandos de Junção
• AWK (Cont.)
∗ Instruções condicionais:
if (expressão) {ações} [else {ações} ]
while (expressão) {ações}
BEGIN { FS = “:” }
if ($1 != prev {
print “ “
prev = $1
}
∗ Variáveis especiais:
NR: número da linha corrente
NF: quantidade de campos da linha
FS = “caracter”: define delimitador
Notas:
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
51
Date
Algumas opções 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(mês/dia/ano)
♦ `date +%j` => 254 (dia do ano)
♦ `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`
Notas:
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
52
Dicas de programação
1. Se a sua shell for fazer FTP, alterar a permissão do
arquivo que contém o usário e a senha para “700”. Este
é um ítem obrigatório por medidas de segurança.
2. Cada sistema tem um usário para acessar o IBM
(mainframe) via FTP. Se o objetivo deste ftp é acessar
alguma visão DB2, deverá ser solicitado ao DBA
autorização para acesso às visões.
3. Utilize filtros de redução, grep, cut e awk em primeiro
lugar em um conduto, reduzindo a quantidade dos dados
que deverão ser transferidos pelo Shell.
Exemplo: grep $1 arq1 | sort
4. Utilize condutos ao invés de arquivos temporários para
melhorar a eficiência da sua shell
Com arquivo temporário:
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 páginas é
muito complexo.
Notas:
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
53
Dicas de programação
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/mês/ano).
8. Organize os dados para maior eficiência da máquina:
primeiro chaves primárias, depois chaves secundárias e
depois os itens de dados.
Notas:
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
54
Executar comandos vi em modo batch
• Utilizando o editor vi:
vi arquivo < comandos_vi >/dev/null
Comandos_vi:
/FIM
dd
^[
:x
Notas:
• vi
♦ Se o arquivo existir, touch atualiza a data do arquivo, se não
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 execução 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 alterações no arquivo aberto por ed
♦ q - sai do editor ed
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br)
Programação Shell
55
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 visão/relação que
será acessada.
• -qr
Opções do isql que serão executadas. No caso,
q (query) e r(run)
• delvtab53
Arquivo que contém os comandos isql
• 
Continuação da linha comando
• logerror_delete
Se ocorrer algum erro, será gravado neste
arquivo
Notas:
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br)
Programação Shell
56
R E F E R Ê N C I A S
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br)
Programação Shell
57
Comandos básicos do vi:
INICIANDO O VI
vi filename abre ou cria um arquivo
vi +18 filename abre o arquivo na linha 18
vi +/”teste” filename abre o arquivo na 1
a
. ocorrência 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 (além da pontuação)
b move uma palavra à esquerda
B move uma palavra à esquerda (além da pontuação)
Return move uma linha abaixo
Back Space move um caracter à esquerda
Space Bar move um caracter à direita
H move para o início da tela
M move para o meio da tela
L move para o fim da tela
Ctrl-F avança uma tela
Ctrl-D avança 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
INSERINDO CARACTER E LINHAS
a insere caracter à direita do cursor
A insere caracter à direita do cursor e sinaliza fim de inha
I insere caracter à esquerda do cursor
I insere caracter à esquerda do cursor e sinaliza fim de inha
o insere linha abaixo do cursor
O insere linha acima do cursor
ALTERANDO O TEXTO
cw altera palavra ( ou parte da palavra à direita do cursor)
cc altera linha
C altera parte da linha à direita do cursor
s substitui a string onde o cursor está posicionado
r repete string que o cursor está com um outro caracter
r-Return para linha
J junta a linha corrente com a linha acima
xp muda o caracter que o cursor está posicionado com o
caracter à direita
- altera letra (upper ou lower)
u desfaz o comando anterior
U desfaz todas as alterações da linha
:u desfaz o comando anterior da última linha
DELETANDO TEXTO
x deleta caracter
dw deleta palavra (ou parte da palavra à direita do cursor)
dd deleta linha
D deleta parte da linha à direita do cursor
:5,10 d deleta da linha 5 à linha 10
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br)
Programação Shell
58
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
SETANDO LINHA NUMERADA
:set nu mostra as linhas numeradas
:set nonu inibe a numeração das linhas
PROCURANDO UMA LINHA
G vai para a última linha do arquivo
21G 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 próxima ocorrência da string
:g/search-string/s//replace-string/gc
procura e altera, consultando antes de cada ocorrência
:%s/string_velha/string_nova/g
troca string_velha pela string_nova
:g/....$/s/// deleta as 4 últimas posições
: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 espaço em branco e 1 algarismo
variando de 1 a 9
:g/^Capit [0-9]$/ . copy $
a mesma pesquisa, porem serão copiadas para o final do
arquivo
:g/string/d procura a string e deleta
:%s/string velha/string nova/g
:%s/^h.t$/host substitui palavra que começa com h e termina com t
LIMPANDO A TELA
Ctrl L limpa a tela
INSERINDO UM ARQUIVO NUM ARQUIVO
:r filename insere o arquivo depois do cursor
:34 r filename insere o arquivo após a linha 34
SALVANDO E CANCELANDO
:w ou :x salva as alterações (no buffer)
:w filename grava o buffer no arquivo
:wq ou :zz salva as alterações e sai do vi
:q! sai do vi sem salvar as alterações
arq .exrc
ab vc - Vocabulary
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br)
Programação Shell
59
Í N D I C E
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br)
Programação Shell
60
O QUE É SHELL ?.............................................................................................. 2
QUANDO USAR ................................................................................................... 3
PRODUTIVIDADE............................................................................................... 4
FILTROS............................................................................................................... 5
REDIRECIONAMENTO...................................................................................... 6
CONDUTO............................................................................................................ 7
CONSTRUÇÃO DE UM SHELL SCRIPT .......................................................... 8
CARACTERES ESPECIAIS DO SHELL............................................................ 9
TIPO DE VARIÁVEIS........................................................................................ 11
• GLOBAL: .................................................................................................... 11
• LOCAL:....................................................................................................... 11
DEFINIÇÃO DE VARIÁVEIS ........................................................................... 12
• STRING....................................................................................................... 12
• STRING....................................................................................................... 13
• INTEIRO...................................................................................................... 14
• ARRAY ....................................................................................................... 15
EDIÇÃO DE STRING ........................................................................................ 16
• TYPESET ..................................................................................................... 16
TRATAMENTO DE VARIÁVEIS ..................................................................... 17
• TESTA SE A VARIÁVEL TEM CONTEÚDO.......................................................... 17
TRATAMENTO DE ERRO ............................................................................... 18
• $? - TESTA SE O COMANDO FOI EXECUTADO COM SUCESSO............................. 18
VARIÁVEIS DE AMBIENTE ............................................................................ 19
EXECUÇÃO DE UM SHELL SCRIPT.............................................................. 20
TRATAMENTO DE PARÂMETROS ............................................................... 21
PRINCIPAIS OPERADORES............................................................................ 22
OPERADORES DE TESTE ............................................................................... 23
COMANDOS CONDICIONAIS......................................................................... 24
• IF - THEN - ELSE .......................................................................................... 24
• CASE .......................................................................................................... 25
• FOR ............................................................................................................ 26
• WHILE ........................................................................................................ 27
COMANDOS DO SHELL .................................................................................. 28
COMANDOS DE IMPRESSÃO......................................................................... 30
• ECHO OU PRINT ........................................................................................... 30
• CAT ............................................................................................................ 31
COMANDO DE SEGURANÇA.......................................................................... 32
• CHMOD....................................................................................................... 32
COMANDO DE LEITURA ................................................................................ 32
• READ.......................................................................................................... 32
COMANDO DE ORDENAÇÃO......................................................................... 33
• SORT .......................................................................................................... 33
COMANDOS DE SELEÇÃO ............................................................................. 34
• LINE ........................................................................................................... 34
• HEAD.......................................................................................................... 34
• TAIL ........................................................................................................... 34
COMANDOS DE SELEÇÃO ............................................................................. 35
• SED ............................................................................................................ 35
• UNIQ........................................................................................................... 36
• FIND ........................................................................................................... 36
• GREP .......................................................................................................... 37
• CUT ............................................................................................................ 38
Centro de Computação - Unicamp
Gerência de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br)
Programação Shell
61
• WC ............................................................................................................. 38
• SPLIT .......................................................................................................... 39
• CSPLIT ........................................................................................................ 40
COMANDOS DE TRANSFORMAÇÃO............................................................ 41
• TR .............................................................................................................. 41
• DD.............................................................................................................. 41
• SED ............................................................................................................ 41
COMANDOS DE JUNÇÃO................................................................................ 42
• JOIN............................................................................................................ 42
• PASTE......................................................................................................... 43
• AWK ........................................................................................................... 44
DATE................................................................................................................... 51
DICAS DE PROGRAMAÇÃO ........................................................................... 52
EXECUTAR COMANDOS VI EM MODO BATCH ........................................ 54
COMO UTILIZAR ISQL NUM SHELL ........................................................... 55
COMANDOS BÁSICOS DO VI:........................................................................ 57

Mais conteúdo relacionado

Mais procurados

Sistemas Operacionais - Gnu/Linux Instalando Programas
Sistemas Operacionais - Gnu/Linux Instalando ProgramasSistemas Operacionais - Gnu/Linux Instalando Programas
Sistemas Operacionais - Gnu/Linux Instalando ProgramasLuiz Arthur
 
Curso de shell
Curso de shellCurso de shell
Curso de shellTiago
 
Sistemas operativos - Arch Linux
Sistemas operativos  - Arch LinuxSistemas operativos  - Arch Linux
Sistemas operativos - Arch LinuxDanielAraujo224
 
Minicurso Criando Uma Distro JoomlaCD - V FGSL e I SGSL
Minicurso Criando Uma Distro JoomlaCD - V FGSL e I SGSLMinicurso Criando Uma Distro JoomlaCD - V FGSL e I SGSL
Minicurso Criando Uma Distro JoomlaCD - V FGSL e I SGSLfgsl
 
Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)Leinylson Fontinele
 
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé LeiteComo Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé LeiteTchelinux
 
Programação de Microprocessadores
Programação de MicroprocessadoresProgramação de Microprocessadores
Programação de MicroprocessadoresDiogo Silva
 
Funcionamento kernel
Funcionamento kernelFuncionamento kernel
Funcionamento kernelSENAC RIO
 
CVS - Slides Parte 4 - Avançado
CVS - Slides Parte 4 - AvançadoCVS - Slides Parte 4 - Avançado
CVS - Slides Parte 4 - AvançadoMarden Neubert
 

Mais procurados (18)

Sistemas Operacionais - Gnu/Linux Instalando Programas
Sistemas Operacionais - Gnu/Linux Instalando ProgramasSistemas Operacionais - Gnu/Linux Instalando Programas
Sistemas Operacionais - Gnu/Linux Instalando Programas
 
Curso de CVS - Lab 2
Curso de CVS - Lab 2Curso de CVS - Lab 2
Curso de CVS - Lab 2
 
PHP 5.3 - Introdução
PHP 5.3 - IntroduçãoPHP 5.3 - Introdução
PHP 5.3 - Introdução
 
Igor Oliveira - Puppet
Igor Oliveira - PuppetIgor Oliveira - Puppet
Igor Oliveira - Puppet
 
PHP-CLI em 7 passos
PHP-CLI em 7 passosPHP-CLI em 7 passos
PHP-CLI em 7 passos
 
Aula 10 semana
Aula 10 semanaAula 10 semana
Aula 10 semana
 
Curso de shell
Curso de shellCurso de shell
Curso de shell
 
Sistemas operativos - Arch Linux
Sistemas operativos  - Arch LinuxSistemas operativos  - Arch Linux
Sistemas operativos - Arch Linux
 
Minicurso Criando Uma Distro JoomlaCD - V FGSL e I SGSL
Minicurso Criando Uma Distro JoomlaCD - V FGSL e I SGSLMinicurso Criando Uma Distro JoomlaCD - V FGSL e I SGSL
Minicurso Criando Uma Distro JoomlaCD - V FGSL e I SGSL
 
Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)
 
Aula 11 semana
Aula 11 semanaAula 11 semana
Aula 11 semana
 
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé LeiteComo Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
 
So trabalho
So trabalhoSo trabalho
So trabalho
 
Php
PhpPhp
Php
 
Programação de Microprocessadores
Programação de MicroprocessadoresProgramação de Microprocessadores
Programação de Microprocessadores
 
Funcionamento kernel
Funcionamento kernelFuncionamento kernel
Funcionamento kernel
 
CVS - Slides Parte 4 - Avançado
CVS - Slides Parte 4 - AvançadoCVS - Slides Parte 4 - Avançado
CVS - Slides Parte 4 - Avançado
 
Lazarus Free
Lazarus FreeLazarus Free
Lazarus Free
 

Destaque (20)

Linear LS840 Back 300 dpi 1.1MB
Linear LS840 Back 300 dpi 1.1MBLinear LS840 Back 300 dpi 1.1MB
Linear LS840 Back 300 dpi 1.1MB
 
Registro de preço
Registro de preçoRegistro de preço
Registro de preço
 
resume03
resume03resume03
resume03
 
01-Degree (ok)
01-Degree (ok)01-Degree (ok)
01-Degree (ok)
 
004-Irrigation details_20 jun16 CMW-A1 (1)
004-Irrigation details_20 jun16 CMW-A1 (1)004-Irrigation details_20 jun16 CMW-A1 (1)
004-Irrigation details_20 jun16 CMW-A1 (1)
 
Kursusbevis
KursusbevisKursusbevis
Kursusbevis
 
Image and Sound Designer
Image and Sound DesignerImage and Sound Designer
Image and Sound Designer
 
Rebecca J Clay Resume 2016
Rebecca J Clay Resume 2016Rebecca J Clay Resume 2016
Rebecca J Clay Resume 2016
 
IIT Roorkee workshop 31 March 2013
IIT Roorkee workshop 31 March 2013IIT Roorkee workshop 31 March 2013
IIT Roorkee workshop 31 March 2013
 
eksamensbevis nextkbh
eksamensbevis nextkbheksamensbevis nextkbh
eksamensbevis nextkbh
 
M4 56 vb
M4 56 vbM4 56 vb
M4 56 vb
 
SSI Model realistic
SSI Model realisticSSI Model realistic
SSI Model realistic
 
APPECIATION LETTER-DUBAI METRO 4
APPECIATION LETTER-DUBAI METRO 4APPECIATION LETTER-DUBAI METRO 4
APPECIATION LETTER-DUBAI METRO 4
 
GA Ventures
GA VenturesGA Ventures
GA Ventures
 
Api do twitter
Api do twitterApi do twitter
Api do twitter
 
IMG_0001
IMG_0001IMG_0001
IMG_0001
 
Churchill C5 Paris, June 2010
Churchill C5 Paris, June 2010Churchill C5 Paris, June 2010
Churchill C5 Paris, June 2010
 
Aplicação a3 p
Aplicação a3 pAplicação a3 p
Aplicação a3 p
 
OCP - Recommendation Letter
OCP - Recommendation LetterOCP - Recommendation Letter
OCP - Recommendation Letter
 
Hosana
HosanaHosana
Hosana
 

Semelhante a Programação Shell Unicamp

Soa cap2 administracao de sistemas2 (slides)
Soa cap2 administracao de sistemas2 (slides)Soa cap2 administracao de sistemas2 (slides)
Soa cap2 administracao de sistemas2 (slides)portal_Do_estudante
 
Sistemas Operacionais.pptx
Sistemas Operacionais.pptxSistemas Operacionais.pptx
Sistemas Operacionais.pptxstenio medeiros
 
Semana da computacao - Linux Day
Semana da computacao - Linux DaySemana da computacao - Linux Day
Semana da computacao - Linux DayFábio Albuquerque
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem corvel
 
Aula 04 informática aplicada - comando básicos
Aula 04  informática aplicada - comando básicosAula 04  informática aplicada - comando básicos
Aula 04 informática aplicada - comando básicosRobson Ferreira
 
1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux Embarcado1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux EmbarcadoDiego Sueiro
 
Apostila introducao-shell
Apostila introducao-shellApostila introducao-shell
Apostila introducao-shellMarcio Pereira
 
Swift na linha de comando
Swift na linha de comandoSwift na linha de comando
Swift na linha de comandoTales Andrade
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Introdução à Shell Script - Vinícius Alves Hax
Introdução à Shell Script - Vinícius Alves HaxIntrodução à Shell Script - Vinícius Alves Hax
Introdução à Shell Script - Vinícius Alves HaxTchelinux
 
Linux4all#2
Linux4all#2Linux4all#2
Linux4all#2Daniel
 
A.S.O 1 aula3 (1º Unidade)
A.S.O 1 aula3 (1º Unidade)A.S.O 1 aula3 (1º Unidade)
A.S.O 1 aula3 (1º Unidade)Cleiton Cunha
 

Semelhante a Programação Shell Unicamp (20)

unix_basico.pdf
unix_basico.pdfunix_basico.pdf
unix_basico.pdf
 
Soa cap2 administracao de sistemas2 (slides)
Soa cap2 administracao de sistemas2 (slides)Soa cap2 administracao de sistemas2 (slides)
Soa cap2 administracao de sistemas2 (slides)
 
Curso Gratuito de Shell Script
Curso Gratuito de Shell ScriptCurso Gratuito de Shell Script
Curso Gratuito de Shell Script
 
Sistemas Operacionais.pptx
Sistemas Operacionais.pptxSistemas Operacionais.pptx
Sistemas Operacionais.pptx
 
Unidade 3.6 Introdução ao Shell
Unidade 3.6 Introdução ao ShellUnidade 3.6 Introdução ao Shell
Unidade 3.6 Introdução ao Shell
 
Semana da computacao - Linux Day
Semana da computacao - Linux DaySemana da computacao - Linux Day
Semana da computacao - Linux Day
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem c
 
Aula 04 informática aplicada - comando básicos
Aula 04  informática aplicada - comando básicosAula 04  informática aplicada - comando básicos
Aula 04 informática aplicada - comando básicos
 
Curso openmp
Curso openmpCurso openmp
Curso openmp
 
1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux Embarcado1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux Embarcado
 
Tutorial Shell Script
Tutorial Shell ScriptTutorial Shell Script
Tutorial Shell Script
 
Apostila introducao-shell
Apostila introducao-shellApostila introducao-shell
Apostila introducao-shell
 
So-mod-4
So-mod-4So-mod-4
So-mod-4
 
Swift na linha de comando
Swift na linha de comandoSwift na linha de comando
Swift na linha de comando
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem c
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Introdução à Shell Script - Vinícius Alves Hax
Introdução à Shell Script - Vinícius Alves HaxIntrodução à Shell Script - Vinícius Alves Hax
Introdução à Shell Script - Vinícius Alves Hax
 
Linux4all#2
Linux4all#2Linux4all#2
Linux4all#2
 
A.S.O 1 aula3 (1º Unidade)
A.S.O 1 aula3 (1º Unidade)A.S.O 1 aula3 (1º Unidade)
A.S.O 1 aula3 (1º Unidade)
 
C sharp lesson1
C sharp lesson1C sharp lesson1
C sharp lesson1
 

Mais de Tiago

Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodleTiago
 
Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotprojectTiago
 
6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascalTiago
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascalTiago
 
Python bge
Python bgePython bge
Python bgeTiago
 
Curso python
Curso pythonCurso python
Curso pythonTiago
 
Curso python
Curso pythonCurso python
Curso pythonTiago
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 pythonTiago
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharpTiago
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpTiago
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpTiago
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpTiago
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharpTiago
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantesTiago
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharpTiago
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivosTiago
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafaelTiago
 
Curso de shell
Curso de shellCurso de shell
Curso de shellTiago
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharpTiago
 
Classes csharp
Classes csharpClasses csharp
Classes csharpTiago
 

Mais de Tiago (20)

Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodle
 
Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotproject
 
6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascal
 
Python bge
Python bgePython bge
Python bge
 
Curso python
Curso pythonCurso python
Curso python
 
Curso python
Curso pythonCurso python
Curso python
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharp
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharp
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharp
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharp
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharp
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantes
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharp
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivos
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafael
 
Curso de shell
Curso de shellCurso de shell
Curso de shell
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharp
 
Classes csharp
Classes csharpClasses csharp
Classes csharp
 

Último

A Unidade de Espiritualidade Eudista se une ao sentimiento de toda a igreja u...
A Unidade de Espiritualidade Eudista se une ao sentimiento de toda a igreja u...A Unidade de Espiritualidade Eudista se une ao sentimiento de toda a igreja u...
A Unidade de Espiritualidade Eudista se une ao sentimiento de toda a igreja u...Unidad de Espiritualidad Eudista
 
Mini livro sanfona - Diga não ao bullying
Mini livro sanfona - Diga não ao  bullyingMini livro sanfona - Diga não ao  bullying
Mini livro sanfona - Diga não ao bullyingMary Alvarenga
 
Com base no excerto acima, escreva um texto explicando como a estrutura socia...
Com base no excerto acima, escreva um texto explicando como a estrutura socia...Com base no excerto acima, escreva um texto explicando como a estrutura socia...
Com base no excerto acima, escreva um texto explicando como a estrutura socia...azulassessoria9
 
Estudo Dirigido de Literatura / Terceira Série do E.M.
Estudo Dirigido de Literatura / Terceira Série do E.M.Estudo Dirigido de Literatura / Terceira Série do E.M.
Estudo Dirigido de Literatura / Terceira Série do E.M.Paula Meyer Piagentini
 
Com base no excerto acima, escreva um texto explicando como a estrutura socia...
Com base no excerto acima, escreva um texto explicando como a estrutura socia...Com base no excerto acima, escreva um texto explicando como a estrutura socia...
Com base no excerto acima, escreva um texto explicando como a estrutura socia...azulassessoria9
 
Livro de bio celular e molecular Junqueira e Carneiro.pdf
Livro de bio celular e molecular Junqueira e Carneiro.pdfLivro de bio celular e molecular Junqueira e Carneiro.pdf
Livro de bio celular e molecular Junqueira e Carneiro.pdfRafaela Vieira
 
Slides Lição 2, Betel, Ordenança para participar da Ceia do Senhor, 2Tr24.pptx
Slides Lição 2, Betel, Ordenança para participar da Ceia do Senhor, 2Tr24.pptxSlides Lição 2, Betel, Ordenança para participar da Ceia do Senhor, 2Tr24.pptx
Slides Lição 2, Betel, Ordenança para participar da Ceia do Senhor, 2Tr24.pptxLuizHenriquedeAlmeid6
 
CAMINHOS PARA A PROMOÇÃO DA INLUSÃO E VIDA INDEPENDENTE
CAMINHOS PARA  A PROMOÇÃO DA INLUSÃO E VIDA INDEPENDENTECAMINHOS PARA  A PROMOÇÃO DA INLUSÃO E VIDA INDEPENDENTE
CAMINHOS PARA A PROMOÇÃO DA INLUSÃO E VIDA INDEPENDENTEJoaquim Colôa
 
A área de ciências da religião no brasil 2023.ppsx
A área de ciências da religião no brasil  2023.ppsxA área de ciências da religião no brasil  2023.ppsx
A área de ciências da religião no brasil 2023.ppsxGilbraz Aragão
 
c) O crime ocorreu na forma simples ou qualificada? Justifique.
c) O crime ocorreu na forma simples ou qualificada? Justifique.c) O crime ocorreu na forma simples ou qualificada? Justifique.
c) O crime ocorreu na forma simples ou qualificada? Justifique.azulassessoria9
 
VACINAR E DOAR, É SÓ COMEÇAR - - 1º BIMESTRE
VACINAR E DOAR, É SÓ COMEÇAR - - 1º BIMESTREVACINAR E DOAR, É SÓ COMEÇAR - - 1º BIMESTRE
VACINAR E DOAR, É SÓ COMEÇAR - - 1º BIMESTREIVONETETAVARESRAMOS
 
Jogo de Revisão Primeira Série (Primeiro Trimestre)
Jogo de Revisão Primeira  Série (Primeiro Trimestre)Jogo de Revisão Primeira  Série (Primeiro Trimestre)
Jogo de Revisão Primeira Série (Primeiro Trimestre)Paula Meyer Piagentini
 
Jogo de Revisão Terceira Série (Primeiro Trimestre)
Jogo de Revisão Terceira Série (Primeiro Trimestre)Jogo de Revisão Terceira Série (Primeiro Trimestre)
Jogo de Revisão Terceira Série (Primeiro Trimestre)Paula Meyer Piagentini
 
Apresentação sobre o Combate a Dengue 2024
Apresentação sobre o Combate a Dengue 2024Apresentação sobre o Combate a Dengue 2024
Apresentação sobre o Combate a Dengue 2024GleyceMoreiraXWeslle
 
UM CURSO DE INFORMATICA BASICA PARA IDOSOS
UM CURSO DE INFORMATICA BASICA PARA IDOSOSUM CURSO DE INFORMATICA BASICA PARA IDOSOS
UM CURSO DE INFORMATICA BASICA PARA IDOSOSdjgsantos1981
 
atividades diversas 1° ano alfabetização
atividades diversas 1° ano alfabetizaçãoatividades diversas 1° ano alfabetização
atividades diversas 1° ano alfabetizaçãodanielagracia9
 
Jogo de Revisão Segunda Série (Primeiro Trimestre)
Jogo de Revisão Segunda Série (Primeiro Trimestre)Jogo de Revisão Segunda Série (Primeiro Trimestre)
Jogo de Revisão Segunda Série (Primeiro Trimestre)Paula Meyer Piagentini
 
Ler e compreender 7º ano - Aula 7 - 1º Bimestre
Ler e compreender 7º ano -  Aula 7 - 1º BimestreLer e compreender 7º ano -  Aula 7 - 1º Bimestre
Ler e compreender 7º ano - Aula 7 - 1º BimestreProfaCintiaDosSantos
 
Baladão sobre Variação Linguistica para o spaece.pptx
Baladão sobre Variação Linguistica para o spaece.pptxBaladão sobre Variação Linguistica para o spaece.pptx
Baladão sobre Variação Linguistica para o spaece.pptxacaciocarmo1
 

Último (20)

A Unidade de Espiritualidade Eudista se une ao sentimiento de toda a igreja u...
A Unidade de Espiritualidade Eudista se une ao sentimiento de toda a igreja u...A Unidade de Espiritualidade Eudista se une ao sentimiento de toda a igreja u...
A Unidade de Espiritualidade Eudista se une ao sentimiento de toda a igreja u...
 
Mini livro sanfona - Diga não ao bullying
Mini livro sanfona - Diga não ao  bullyingMini livro sanfona - Diga não ao  bullying
Mini livro sanfona - Diga não ao bullying
 
Com base no excerto acima, escreva um texto explicando como a estrutura socia...
Com base no excerto acima, escreva um texto explicando como a estrutura socia...Com base no excerto acima, escreva um texto explicando como a estrutura socia...
Com base no excerto acima, escreva um texto explicando como a estrutura socia...
 
Estudo Dirigido de Literatura / Terceira Série do E.M.
Estudo Dirigido de Literatura / Terceira Série do E.M.Estudo Dirigido de Literatura / Terceira Série do E.M.
Estudo Dirigido de Literatura / Terceira Série do E.M.
 
MANEJO INTEGRADO DE DOENÇAS (MID)
MANEJO INTEGRADO DE DOENÇAS (MID)MANEJO INTEGRADO DE DOENÇAS (MID)
MANEJO INTEGRADO DE DOENÇAS (MID)
 
Com base no excerto acima, escreva um texto explicando como a estrutura socia...
Com base no excerto acima, escreva um texto explicando como a estrutura socia...Com base no excerto acima, escreva um texto explicando como a estrutura socia...
Com base no excerto acima, escreva um texto explicando como a estrutura socia...
 
Livro de bio celular e molecular Junqueira e Carneiro.pdf
Livro de bio celular e molecular Junqueira e Carneiro.pdfLivro de bio celular e molecular Junqueira e Carneiro.pdf
Livro de bio celular e molecular Junqueira e Carneiro.pdf
 
Slides Lição 2, Betel, Ordenança para participar da Ceia do Senhor, 2Tr24.pptx
Slides Lição 2, Betel, Ordenança para participar da Ceia do Senhor, 2Tr24.pptxSlides Lição 2, Betel, Ordenança para participar da Ceia do Senhor, 2Tr24.pptx
Slides Lição 2, Betel, Ordenança para participar da Ceia do Senhor, 2Tr24.pptx
 
CAMINHOS PARA A PROMOÇÃO DA INLUSÃO E VIDA INDEPENDENTE
CAMINHOS PARA  A PROMOÇÃO DA INLUSÃO E VIDA INDEPENDENTECAMINHOS PARA  A PROMOÇÃO DA INLUSÃO E VIDA INDEPENDENTE
CAMINHOS PARA A PROMOÇÃO DA INLUSÃO E VIDA INDEPENDENTE
 
A área de ciências da religião no brasil 2023.ppsx
A área de ciências da religião no brasil  2023.ppsxA área de ciências da religião no brasil  2023.ppsx
A área de ciências da religião no brasil 2023.ppsx
 
c) O crime ocorreu na forma simples ou qualificada? Justifique.
c) O crime ocorreu na forma simples ou qualificada? Justifique.c) O crime ocorreu na forma simples ou qualificada? Justifique.
c) O crime ocorreu na forma simples ou qualificada? Justifique.
 
VACINAR E DOAR, É SÓ COMEÇAR - - 1º BIMESTRE
VACINAR E DOAR, É SÓ COMEÇAR - - 1º BIMESTREVACINAR E DOAR, É SÓ COMEÇAR - - 1º BIMESTRE
VACINAR E DOAR, É SÓ COMEÇAR - - 1º BIMESTRE
 
Jogo de Revisão Primeira Série (Primeiro Trimestre)
Jogo de Revisão Primeira  Série (Primeiro Trimestre)Jogo de Revisão Primeira  Série (Primeiro Trimestre)
Jogo de Revisão Primeira Série (Primeiro Trimestre)
 
Jogo de Revisão Terceira Série (Primeiro Trimestre)
Jogo de Revisão Terceira Série (Primeiro Trimestre)Jogo de Revisão Terceira Série (Primeiro Trimestre)
Jogo de Revisão Terceira Série (Primeiro Trimestre)
 
Apresentação sobre o Combate a Dengue 2024
Apresentação sobre o Combate a Dengue 2024Apresentação sobre o Combate a Dengue 2024
Apresentação sobre o Combate a Dengue 2024
 
UM CURSO DE INFORMATICA BASICA PARA IDOSOS
UM CURSO DE INFORMATICA BASICA PARA IDOSOSUM CURSO DE INFORMATICA BASICA PARA IDOSOS
UM CURSO DE INFORMATICA BASICA PARA IDOSOS
 
atividades diversas 1° ano alfabetização
atividades diversas 1° ano alfabetizaçãoatividades diversas 1° ano alfabetização
atividades diversas 1° ano alfabetização
 
Jogo de Revisão Segunda Série (Primeiro Trimestre)
Jogo de Revisão Segunda Série (Primeiro Trimestre)Jogo de Revisão Segunda Série (Primeiro Trimestre)
Jogo de Revisão Segunda Série (Primeiro Trimestre)
 
Ler e compreender 7º ano - Aula 7 - 1º Bimestre
Ler e compreender 7º ano -  Aula 7 - 1º BimestreLer e compreender 7º ano -  Aula 7 - 1º Bimestre
Ler e compreender 7º ano - Aula 7 - 1º Bimestre
 
Baladão sobre Variação Linguistica para o spaece.pptx
Baladão sobre Variação Linguistica para o spaece.pptxBaladão sobre Variação Linguistica para o spaece.pptx
Baladão sobre Variação Linguistica para o spaece.pptx
 

Programação Shell Unicamp

  • 1. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação C-Shell 1 PROGRAMAÇÃO SHELL Autoras: Universidade Estadual de Campinas Cristiana Munhoz Eugênio Centro de Computação Lilliam Cássia Ciani Palermo Versão: 6 - Fevereiro 2000 Colaboradores - Agradecimentos Especiais: Cristina Maria Zanini Rubens Queiroz de Almeida
  • 2. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 2 O que é Shell ? • programa que conecta e interpreta os comandos • linguagem de programação completa - interpretada • possui variáveis; • construções condicionais e interativas; • ambiente adaptável ao usuário; • é uma das linguagens originais de quarta geração (4GL). Simplicidade do Shell • Pipeline • Sistemas de arquivos • Sistema operacional UNIX Notas: • O programa shell interpreta os comandos que você digita quando trabalha com o sistema operacional e traduz para comandos que o kernel compreende. • Shell: é uma linguagem de programação completa, possuindo variáveis, construções condicionais, interativas e ambiente adaptável ao usuário. O Shell do Unix é a ferramenta original de protótipo rápido que ensina conceitos-chaves como modularidade, reutilização e desenvolvimento. • Os comandos do Shell se comunicam entre si por meio de uma interface simples e coerente chamada conduto (pipeline). • O Shell permite que o usuário realize suas atividades sem afetar qualquer outro processo que não lhe pertence. Quando um usuário conecta-se a um sistema Unix, o sistema operacional inicia automaticamente uma cópia do Shell, sob a qual o usuário poderá realizar qualquer função disponível. • O shell utiliza o sistema de arquivos do UNIX que permite organizar arquivos em pastas (diretórios). Esta hierarquia de diretórios e arquivos gera uma visão simples e clara de toda a informação no sistema. • O UNIX é transportável; ele roda em quase todo hardware de computadores fabricados atualmente. Seu investimento não será desperdiçado, pois qualquer programa escrito é largamente portável entre Unix’es de diferentes plataformas e fornecedores.
  • 3. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 3 Quando usar Interativamente • Realizar uma operação simples, uma única vez • Interagir com o comando O Shell Script deverá ser utilizado sempre que for necessário realizar: • um procedimento complexo usando muitas linhas de comando; • um procedimento do qual todos os usuários poderão beneficiar-se; • um comando simples usado inúmeras vezes; • uma tarefa numa data planejada; • integrar informações de vários sistemas existentes; Notas: • A qualquer momento que você executa algum comando (ls, cat), você está usando o Shell interativamente: stdin, stdout e stderr são todos direcionados para o terminal. • Stdin => standart input • Stdout = > standart output • Stderr => standart error • Quando você começa a usar o Shell interativamente e descobre que alguns processos exigem muita digitação, é hora de aprender sobre a programação Shell. Deve-se colocar esses comandos interativos em um arquivo executável. Você poderá reutilizar sempre que precisar, melhorando ainda mais a sua produtividade. • O Shell pode extrair e manipular grandes quantidades de informações. Por que pesquisar um relatório inteiro quando o Shell pode verificar e recuperar informações importantes para você sem qualquer esforço ? • A composição de sistemas a partir de programas do Shell realizará quase todas as tarefas necessárias. Em vez de esperar meses ou anos para a “solução perfeita”, aplicações protótipo do Shell podem ser desenvolvidas, melhoradas e implementadas. Quando necessário, elas poderão ser utilizadas como especificações de requisitos para o desenvolvimento de um sistema “real”.
  • 4. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 4 Produtividade • Linguagem interpretada - não compilada • Um programador médio pode duplicar ou triplicar sua produtividade com o uso do Shell • Comparação de Bruce Cox (pai do Objetive C) shell 1 linha de código linguagem orientada a objeto10 linhas de código linguagem C 100 linhas de código Notas: • Não é 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. É necessário alguns conhecimentos internos do Shell e do seu uso para derivar desses benefícios. Mas, é preciso apenas alguma inventividade para tornar-se mais eficiente e produtivo.
  • 5. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 5 Filtros (teclado) • grep -i “Arthur” capit1 Autor: Lowel Arthur Rei Arthur e os Cavaleiros da Távola • 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 ocorrências de “shell” para “Shell”. Notas: • Uma chave para transformar dados brutos em informação útil é filtrar os dados estranhos. • Você pode pensar na maior parte dos comandos do Shell como filtros. • Cada comando também possui duas saídas: • saída-padrão --> stdout • saída-de-erro --> stderr • Cada comando filtra dados da entrada-padrão ou transforma-os de algum modo, passando-os à saída-padrão. Quaisquer erros encontrados são passados à saída-de-erro. • Alguns filtros extraem apenas os dados que você deseja ver, outros incluem ou alteram os dados conforme suas instruções. FILTROSTDIN STDOUT (tela) STDERR (tela)
  • 6. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 6 Redirecionamento • Criar ou anexar arquivos; • Usar arquivos existentes como entrada para o Shell; • Reunir dois fluxos de saída; • Usar parte do comando shell como entrada. Operadores: < arquivo direciona um arquivo para stdin > arquivo direciona stdout para uma nova saída >> arquivo 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 Notas: • Você pode usar o redirecionamento de E/S para mudar a direção de stdin/stdout e stderr. Exemplo: sed -e “s/shell/Shell/g” < capit1 > novocapit1 • O stderr ainda estaria direcionado para o terminal • 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 Sintaxe: comando argumentos >>& arqsaida • O arquivo de saída terá todos os dados da saída-padrão e da saída-de-erro criados pelo comando do shell. • Se o arquivo novocapit1 não existir, então 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!
  • 7. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 7 Conduto • Conecta stdout de um comando à stdin de outro • O resultado da execução de um comando pode ser utilizado como parâmetro de entrada na execução de outro comando • Meio de condução 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 Notas: • Os comandos do Shell podem ser reutilizados, acoplados e moldados para lidar com as mais difícieis aplicações de informação. • Além de eliminar arquivos temporários, o conduto permite que dois comandos operem ao mesmo tempo.
  • 8. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 8 Construção de um Shell Script • Edite um arquivoÎvi meu-programa • Esse arquivo deve conter na primeira linha: • #! /bin/ksh • # ÎÎutilize para comentar uma linha • /bin/rm arquivo É recomendável passar o “caminho” (path) dos comandos • rm arquivo Garante encontrar a primeira ocorrência no path. • As shells devem estar sempre num diretório comum, por exemplo: /usr/sys/nome-sistema • Arquivos de controle que são gerados pela shell devem estar num diretório temporário, separado das shells. Notas: • #! /bin/ksh ÎÉ utilizado para que o Unix saiba que sua shell é korn shell. • É recomendável passar o “caminho” do comandos, pois cada usuário pode criar na sua área um alias para qualquer comando. • Os comandos ficam geralmente no diretório /bin • Outra opção seria colocar scape antes do comando, por exemplo rm. Garante que você estará utilizando a 1 a. ocorrência encontrada no path definido no seu .kshrc
  • 9. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 9 Caracteres especiais do Shell • “ “ (aspas duplas) Mostra a cadeia de caracteres citada entre ", substituindo o nome da variável pelo seu conteúdo. 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 variável pelo seu conteúdo. 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 Notas: • A utilização de caracteres especiais dentro de uma citação dará problemas. Para isso utilize o recurso da “barra invertida”.
  • 10. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 10 Caracteres especiais do SHELL • ; (vírgula) Separador de comando sequencial. Ex: date; ksh meu_shell; date > /tmp/result & • ? ( ponto de interrogação ) Combina com qualquer caracter isolado . • * (asterisco) Combina com qualquer cadeia de caracter. • [a-z]* Combina com algo que consista de caracteres alfabéticos minúsculos . • ^string Procura a string somente no começo da linha • string$ Procura a string somente no fim da linha Notas: Exemplos: Suponha que no diretório corrente exista os seguintes arquivos: capit1 , capit2, capit3, capit4 e capitulo ls capit* (aparecerá os 5 arquivos) ls capit? (capit1, capit2, capit3, capit4) ls capit[1-3] (capit1, capit2, capit3) • os caracteres "?", "*" e "[a-z]" podem ser usados no meio de uma string ls cap?t
  • 11. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 11 Tipo de Variáveis • Global: Seta variáveis de ambiente ou variáveis globais. Elas existem enquanto a sessão estiver aberta. Sintaxe: export nomevar=valor Exemplos: export TERM=vt100 (variável de ambiente) export DBDATE=Y4MD- (variável de ambiente) export matricula=20444 (variável global) • Local: Seta variáveis locais. Elas existem somente durante a execução da Shell. Sintaxe: nomevar=valor PARA SABER QUAIS VARIÁVEIS ESTÃO SETADAS E QUAIS SÃO SEUS VALORES, UTILIZE O COMANDO SET. Notas: • EXPORT: • Seta variáveis de ambiente ou globais. Existem enquanto a sessão estiver aberta. • export PS1="`hostname`{`whoami`}$ " magda{maria}$ • NÃO existe espaço em branco entre o nome da variável e seu conteúdo • nome=Rogério • Nomes de Variáveis não pode conter hifen. • nota-aluno Îdará erro X • É permitido o uso do underline para nome de variáveis: • minha_var
  • 12. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 12 Definição de variáveis • String • Atribuindo valores: Sintaxe : nome=conteúdo 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 echo $conc ÆLilliam NOMES DE VARIÁVEIS NÃO PODEM CONTER HÍFEN. Notas:
  • 13. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 13 Definição de variáveis • String • Utilizando string: Utilize "$" para substituir o nome da variável pelo seu conteúdo. Sintaxe : $variável Exemplos: cabec=“ Relatório do ano $ano” dir_log=/tmp ; ls $dir_log aluno=${nomes[$cont]} parm1=$1 ls arq$var dia=Segunda-feira ; echo “ Hoje é dia $dia “ Notas: • Não deixe espaço em branco entre o cifrão ($) e o nome da variável.
  • 14. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 14 Definição de variáveis • 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 NÃO DEIXAR ESPAÇO ENTRE O NOME DA VARIÁVEL E O SINAL DE IGUAL NÃO É NECESSÁRIO INICIALIZAR UMA VARIÁVEL COM O COMANDO LET PARA ELA SER DO TIPO INTEIRA, UTILIZE O "LET" APENAS QUANDO VOCÊ QUISER MANIPULÁ-LA . Notas:
  • 15. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 15 Definição de variáveis • Array • Criando arrays: Exemplos: set -A var a b c set -A nomes ana jose maria • Incrementando arrays: Exemplos: nomes[3]=joão aluno=${nomes[[3]} echo $aluno ÆÆjoão • Manipulando arrays: • ${var[*]} Mostra o conteúdo do array inteiro • ${#var[*]} Mostra o número de elementos (argumentos) de um array. • ${variável[n]} Elementos posicionais de um array. A 1ª OCORRÊNCIA DO ARRAY COMEÇA COM 0 Notas: • set -A var val1 val2 val3 val4 • set -A semana Segunda Terça Quarta Quinta Sexta Î seta um array chamado semana contendo os dias da semana • Exemplos de array : set -A nome maria lucia joao echo ${nome[*]} ÆResp = maria lucia joao echo ${#nome[*]} ÆResp = 3 • Se o indexador do array ultrapassar o número de elementos existentes, será retornado branco
  • 16. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 16 Edição de string • typeset Especifica o tipo do valor da variável Sintaxe: typeset [opções] v=$var Opções: • -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 minúsculo • -u converte para maiúsculo Exemplos: alpha=" aBcDeFgHiJkLmNoPqRsTuVwXyZ " typeset -L v=$alpha" Æ"aBcDeFgHiJkLmNoPqRsTuVwXyZ " typset -uR5 v=$alpha Æ "VWXYZ" typeset -Z8 v="123.50" Æ "00123.50" Notas:
  • 17. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 17 Tratamento de Variáveis • testa se a variável tem conteúdo -n str: retorna verdadeiro se variável NÃO FOR NULA -z str: retorna verdadeiro se variável for NULA if [[ -z $matricula ]] then echo " variável matricula NÃO inicializada" fi matricula=23456 if [[ -n $matricula ]] then echo " variável matricula inicializada" fi Notas:
  • 18. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 18 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) FAÇA UM TESTE ANTES POIS DEPENDENDO DO SISTEMA PODE SER O CONTRÁRIO !!!!!! Notas:
  • 19. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 19 Variáveis de ambiente • $USER Conteúdo do comando whoami (quem é o usuário da conta) • $PATH Lista de diretórios a serem procurados pelo meus executáveis • $HOME Mostra qual é o diretório 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 • $$ Número do processo do comando corrente Notas: • O valor das variáveis ao lado podem ser encontrados ao digitarmos o comando set. • $$ ÎÎMuito utilizado pelos utilitários de mail que gravam o arquivo em /tmp/arq_número_do_processo
  • 20. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 20 Execução de um Shell Script • Fora do editor vi, na linha de comando: $ksh -opções_de_teste meu-shell parâmetros • Gravar a execução de uma shell script $script $ksh -opções_de_teste meu-shell $ CTRL D $ more typescript • Dentro do editor vi: • :w ÎÎgrava o arquivo que está na memória • :!ksh -opções de teste % ! ÎÎ diz ao vi para executar o comando shell seguinte % ÎÎ diz ao vi para preencher o nome do arquivo corrente Opções de Teste: • x ÎÎgera saída dos comandos executados Notas: • Você pode executar o seu programa a medida que for sendo desenvolvido, facilitando também a detecção e correção de erros. • Entrando no vi e criando as primeiras linhas do programa, grave o arquivo (:w) e execute-o sem sair do editor: (:!ksh -opção %)
  • 21. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 21 Tratamento de Parâmetros • $# No. de parâmetros • $0 Parâmetro que contém o nome do programa • $1, $2, $3, ... Parâmetros fornecidos • $* Lista o conteúdo de todos os parâmetros Notas: • Se você tem um shell script que recebe parâmetros de entrada, você pode usar $# no começo do programa para obter o número de argumentos (parâmetros) recebidos, testando se esse era o número de argumentos esperado. Exemplo: ksh meuscript parm1 parm2 #! /bin/ksh if (( $# == 2)) then echo " numero de parametros correto " fi • ksh meuprogram parm1 parm2 $0 $1 $2
  • 22. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 22 Principais Operadores Operação Numérico String igual == = diferente != != menor, maior <, > <, > ... ou igual >=, <= >=, <= and , or &&, || soma + subtração -- multiplicação * divisão / Notas:
  • 23. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 23 Operadores de Teste Condição Shell Verdadeira se ... -d file se é diretório -f file se é file -r arquivo existir arq. legível -w arquivo existir arq. gravável -x arquivo existir arq. executável -a arquivo se arquivo existe -s arquivo se arquivo existe e não 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 Notas: • No núcleo de cada estrutura de controle existe um teste condicional. • O comando test pode determinar se um determinado nome é um arquivo ou um diretório; se ele pode ser lido, ou se é executável; e se uma cadeia ou inteiro é maior, menor ou igual a outro. • Test, como qualquer outro comando do Shell, sempre retorna um valor verdadeiro (0) ou falso (1) na variável status do shell. test -r nomearq echo $? if [[ -d arq_com ]] then echo " arq_com é um diretório " fi
  • 24. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 24 Comandos condicionais • if - then - else • if (( expressão aritmética )) then processa 1 else processa 2 fi • if [[ testes condicionais ]] then processa 1 else processa 2 fi PARA COMPARAÇÕES DE TESTES CONDICIONAIS E COMPARAÇÕES DE STRINGS É NECESSÁRIOS TER ESPAÇOS EM BRANCO ENTRE OS COLCHETES E OS OPERADORES Exemplo: if [[ $a = $b ]] then echo “variáveis iguais “ fi Notas: • Exemplos: Comparação numérica a=5 ; b=7 if (( $a == $b )) then echo “valores iguais “ else echo “ valores diferentes” fi Comparação de testes condicionais if [[ -z $parametros ]] then echo “ ERRO - não foi passado parâmetros !!! “ exit fi Comparação de string a=inteiro ; b=metade if [[ $a = $b ]] then echo “variáveis iguais “ else echo “ variáveis diferentes” fi
  • 25. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 25 Comandos condicionais: • case case expressão in opção1 ) processa a echo opcao a ;; opção2 ) processa b;; opção3 ) processa c;; * ) echo " Opção inválida " ;; 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 Notas: • Exemplos: 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
  • 26. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 26 Comandos condicionais: • for for var in expressão do comandos que usam $var done Exemplos: for file in *.c do mv $file `echo $file | tr ´A-Z´ ´a-z ´ ` echo $file done Onde expressão pode ser: • resultado de um comando • valores • ocorrências de um array • As instruções dentro do comando for serão executadas tantas vezes quantas forem o no de elementos pertences à expressão Notas: • Exemplos: Utilizando array: set -A tabela lilliam kikinha for pessoa in ${tabela[*]} do echo $pessoa done end Utilizando o resultado de um comando: for arquivo in `grep -l "matr_aluno" *.sqb` do ex +%s/"old_string"/"new_string"/g +wq $arquivo > /dev/null done
  • 27. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 27 Comandos condicionais: • 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 Notas: • Sintaxe: while ((expressão)) do done • Comando exit: Serve para sair do while sem ser pela condição definida na expressão.
  • 28. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 28 Comandos do Shell Os comandos shell serão mostrados divididos em várias categorias: • Arquivos e diretórios • Seleção • Combinação e ordenação • Impressão • Segurança Notas: • Para cada comando existem várias opções. Neste curso tentaremos mostrar as opções mais utilizadas. Para conhecer outras opções ou maiores detalhes utilize o comando man: Exemplo: man nome_comando • Comandos : 1. próxima linha ENTER 2. próxima página space bar 3. página anterior CTRL B 4. procura string /caracter especial ou /string 5. continuar a busca n 6. cancelar pesquisa q ou CTRL C OBS: Nem todos os comandos usam as opções da mesma maneira.
  • 29. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 29 TIPO COMANDO Diretório cd ls pwd mkdir rmdir Arquivo cat cp csplit ln mv rm split Seleção awk cut grep head line sed tail uniq wc Junção cat join paste Ordenação sort Transformação sed tr dd Impressão cat echo Segurança chmod Leitura $< touch sleep exit Notas: Os comandos de Diretórios e Arquivos já foram abordados anteriormente. Eles podem ser utilizados sem restrições 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 altera o diretório corrente ls lista o conteúdo do diretório pwd mostra qual é o diretório corrente mkdir cria diretório mkdir -p cria árvore completa de diretórios rmdir deleta diretório cp copia arquivo cp -p copia mantendo as características originais mv renomeia arquivo rm deleta arquivo basename mostra o nome do arquivo tirando o path dirname mostra o nome do arquivo colocando o path diff compara conteúdo de 2 arquivos < 1 º arquivo > 2 º arquivo cmp compara dois arquivos -s ( echo $? Ætraz 1 se diferente ) ( echo $? Ætraz 0 se igual )
  • 30. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 30 Comandos de Impressão • echo ou print Escreve argumentos em stdout. Sintaxe: echo [opções] string Opções: • -n : não adiciona uma nova linha no stdout antes de imprimir a string, deixando o cursor na linha da mensagem escrita. FUNCIONA APENAS COM PRINT Notas: • echo Exemplos: 1. print -n “Entre com a opção desejada => “ Entre com a opção desejada Î__ 2. echo “Hoje é dia $dia” 3. echo “Bom dia” 4. echo “Os arquivos são: “ * 5. echo “Essa pessoa $nome eh muito legal” > arq 6. echo * Æo mesmo que o comando ls *
  • 31. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 31 Comandos de Impressão • cat Concatena e imprime. O comando cat não altera dados, ele toma a stdin e a reproduz no stdout. Possui também a opção de varrer o arquivo mas não pára a cada tela do terminal. Sintaxe: cat [opções] stdin Opções: • -n : lista as linhas do arquivo numerando-as file: Notas: • cat 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.
  • 32. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 32 Comando de Segurança • chmod Altera a permissão do arquivo. Sintaxe: chmod [quem] operação acesso arquivo Opções: • quem: u(usuário), g(grupo), o(outros), a (todos) • operação: +(atribuir), -(remover), = • acesso: r(read), w(write), x(execução) • -R : altera a permissão dos arquivos e diretórios descendetemente. Para tornar um shell script executável, é necessário alterar a permissão do arquivo. Comando de Leitura • read Direciona o terminal como stdin, ou seja , captura o que foi digitado no teclado. Sintaxe: read variável Notas: • chmod Se a sua shell for executar o comando FTP você deverá alterar a permissão do arquivo que contém o usuário e a senha para somente o dono ler, gravar e executar. Exemplos: chmod u=rwx,go= arquivo ls -la -rwx------ 1 lilliam supsof 110 Sep 25 16:33 arquivo • Exemplo: echo -n “Digite a opcao: “ read opcao if (($opcao > 9)) then echo “Opcao Invalida” fi
  • 33. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 33 Comando de Ordenação • sort Ordena e combina múltiplos arquivos. Sintaxe: sort [opções] stdin ..... Opções: • -b: ignora espaços em branco para encontrar a 1a ou última coluna do campo • -d: sorteia usando ordem alfabética. Somente letras, dígitos e espaços são considerados na comparação. • -f: altera todas as letras minúsculas para maiúsculas antes da comparação. • -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] [opção] [ , cpo fim.col fim] [opção] : define chave do sort • -o: especifica que o stdout vai ser o mesmo arquivo do stdin Notas: • O comando sort trabalha a nível de caracter, campo ou em uma combinação dos dois. Caso o arquivo sorteado possua linhas duplicadas estas podem ser retiradas com uniq. Para tornar mais eficiente esse comando deve ser utilizado após os dados terem sido selecionados (grep ou cut). As opções válidas para a opção -k são: b,d,f,n,r Valores default para a opção -k: cpo ini começo da linha col ini 1 a . 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
  • 34. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 34 Comandos de Seleção • line Copia uma linha do stdin e grava no stdout. Sintaxe: line stdin > stdout stdin - arquivo stdout - arquivo ou terminal • head Seleciona as 10 primeiras linhas de um arquivo. Sintaxe: head [opção] stdin > stdout Opções: • -c n : seleciona as n primeiras colunas do stdin • -n : seleciona as n primeiras linhas do stdin • tail Seleciona as 10 linhas finais de um arquivo Sintaxe: tail [opções] stdin > stdout Opções: • -n : seleciona as n últimas linhas do stdin • -f : mostra as linhas que estão sendo adicionadas no arquivo. Notas: head -c3 /etc/passwd tail -f /var/adm/messages
  • 35. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 35 Comandos de Seleção • sed Edita e altera dados. Sintaxe: sed [opções] stdin > stdout Opções: • -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” "s/ *$//g" Ædeleta espaço em branco até o fim da linha 1d arquivo Ædeleta a 1ª linha do arquivo • -f arquivo : contém os scripts que devem ser executados. Não colocá-los entre aspas duplas. • -n x,zp arquivo : Seleciona da linha "x" até a linha "z" do arquivo especificado. . - Não usar stdin como stdout - Pode ser alterado o delimitador do sed de "/ " para qualquer outro caracter "+", "(", "=", etc Notas: • O comando sed muda a informação dentro de um arquivo ou tabela. Este comando também deleta linhas de arquivos. Portanto pode ser utilizado como um programa que atualiza campos ou deleta linhas. Exemplos: 1. sed -e “s/café/chá/g” entrada > entrada_alterada Altera a palavra café para chá em todas as ocorrências (g) 2. sed -e “/João/d” entrada > saída Deleta todas as linhas do stdin que contém a palavra João 3. sed -e “s/devedor//g” entrada Deleta a palavra 4. sed -f arqcom entrada > arqsaida Executa os comandos que estão no arquivo arqcom. arqcom: s/shell/Shell/g s/Terça/terça/ ÆÆ altera 1 ocorrência por linha OBS: NÃO 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
  • 36. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 36 Comandos de Seleção • uniq Seleciona apenas uma ocorrência de cada linha do stdin. Obrigatoriamente stdin deve estar ordenado (comando sort). Sintaxe: uniq [opções] stdin Opções: • -u: seleciona linhas únicas • -c: conta o número de vezes que cada linha se repete • -d: seleciona apenas as linhas com mais de uma ocorrência • find Seleciona arquivos, a partir do diretório especificado. É recursivo. Sintaxe: find dir opções Opções: • -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 critério. Notas: Exemplos: • find . -name "*.HTML" -print Ælista todos os arquivos que terminam com .HTML • find . -type f -print Ælista todos os arquivos do tipo file a paritir do diretório corrente (.) • find /home -type d -print Ælista todos os arquivos do tipo diretórioa partir do diretório /home • find . -name "*.sqb" -print | xargs grep "matr_aluno" | wc -l
  • 37. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 37 Comandos de Seleção • grep Seleciona linhas usando um único critério de seleção. Sintaxe: grep [opções] string stdin Opções: • -c : conta o nº de vezes que a string aparece. • -i : ignora uppercase • -l : lista somente o nome dos arquivos que contém a string procurada. • -n : numera linhas que contém 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 String pode ser: • $variável • “palavra composta” • palavra • “metacaracteres” (* ? [a-z] ) • “stringmetacaracter” Notas: • O comando grep é a ferramenta principal para extrair informações de campos de dados, procurar cadeia de caracteres e escrever a informação em stdout. Exemplos: 1. grep “Mar*” arquivo 2. grep Maria arq* 3. grep -l Maria arquiv* 4. grep -n Maria arquivo 5. grep $variável arquivo 6. grep -v “Maria Amélia” arquivo 7. grep ”[a-z]” arquivo 8. grep ^R arquivo 9. grep -c Chico arquivo 10. grep -i maria arquivo 11. ps -ef | grep maria | grep d Ænão aparece a linha do grep anterior
  • 38. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 38 Comandos de Seleção • cut Seleciona colunas. Sintaxe: cut [opções] stdin Opções: • -cx-y : define coluna inicial(x) e coluna final(y) • -dCaracter : define delimitador • -fx,y : quais campos serão selecionados • -s : suprimi linhas que não contém delimitador. Somente pode ser usado junto com a opção -d OBS: O comando cut opera em colunas • wc Conta linhas, palavras e caracteres de arquivos. Sintaxe: wc [opções] stdin Opções: • -c: conta caracteres • -l : conta linhas • -w: conta palavras Notas: • O comando cut corta arquivos em colunas. Também pode operar em cada caractere ou campo, ou alguma combinação de ambos. Quando o arquivo tem algum separador entre campos você pode selecioná-los através de cut. Exemplos: 1. cut -f1,5 -d: arquivo 2. cut -c1-72 arquivo 3. cut -d: -s -f3,5 arquivo OBS: Não é permitido o uso da opção -c junto com a opção -d. • wc Exemplos: 1. grep -l Maria arqu* | wc -l 2. cat arq l wc -l
  • 39. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 39 Comandos de Seleção • split Divide o stdin em arquivos menores contendo um número específico de linhas . Sintaxe: split [opções] stdin [prefixo] Opções: • - qtd. linhas: especifica o nº de linhas de cada arquivo de saída. Default 1000 linhas por arquivo. • prefixo: prefixo dos stdouts criados. O sufixo é aa,ab até zz. Default prefixo é x. Notas: • 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,…)
  • 40. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 40 Comandos de Seleção • csplit Separa os arquivos sempre que encontrar uma combinação entre seus argumentos e o conteúdo do arquivo. Não funciona no FreeBSD Sintaxe: csplit [opções] stdin [argumentos] Opções: • -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 contém as linhas anteriores ao 1º argumento. • “%arg%” : cria um arquivo contendo os dados a partir do argumento. • -k: não desfaz a criação dos stdouts caso o no. de stdouts especificado seja maior que o qtd de stdin Notas: • csplit Exemplos: • O arquivo livro contém: Introdução, Capitulo1, Capítulo 2, Resumo. 1. csplit -f capit livro “/Capitulo /” “/Capitulo /” resultado: capit00 (contém Introdução) capit01 (contém Capítulo 1) capit02 (contém Capítulo2 e Resumo) 2. csplit -f capit livro “%Capitulo 1%” resultado: capit00 (contém Capítulo 1 Capítulo 2 e Resumo) 3. csplit livro “/Capitulo 1/” resultado: capit00 (contém Introdução) capit01 (contém Capítulo 1, 2 e Resumo) 4. csplit -k livro “/Capitulo /” (9) resultado: será criado até 10 stdout
  • 41. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 41 Comandos de Transformação • tr Transforma caracter por caracter. Sintaxe: tr ‘caracter velha‘ ‘caracter nova‘ stdin > stdout o comando TR é melhor que o DD, quando for converter strings. • dd Converte e copia arquivo. Sintaxe: dd if=stdin of=stdout conv=[opções conv] Opções do conv: • lcase: converte arquivo para minúsculo • ucase: converte arquivo para maiúsculo • ascii: converte ebcdic para ascii • ebcdic: converte ascii para ebcdic • ibm: converte ascii to versão ebcdic da IBM Não aceita passar path • sed Visto anteriormente. Notas: • O comando tr traduz os dados de entrada caractere por caractere, com base em tabelas de conversão (string) especificadas pelo usuário. Exemplos: 1. tr ‘(A-Z)’ ‘(a-z)’ arq1 > arq1min 2. tr ‘(:)’ ‘(t)’ cad1 > cad1t 3. for file in `ls` do mv $file `echo $file | tr ‘(A-Z)’ ‘(a-z)’ ` echo $file done
  • 42. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 42 Comandos de Junção • join Junta dois arquivos, combinando linha a linha. Os arquivos devem estar ordenados (comando sort). Sintaxe: join [opções] arquivo1 arquivo2 Opções: • -tCaracter: define delimitador • -a nº arquivo: produz uma linha de saída para cada linha do arquivo especificado pelo nº arquivo, mesmo para os campos do join que não casam com nenhuma linha do outro arquivo de entrada. • -o nºarquivo.campo : As linhas de saída são compostas pela lista dos campos especificados na variável nºarquivo.campo. Para definir mais campos separe-os por branco ou vírgula • -1 campo ou -2 campo : Faz o join de 2 arquivos usando o campo especificado na variável campo do arquivo 1 (-1) ou arquivo 2 (-2). • -e string: altera campos em branco do output pela string especificada Notas: • 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 arquivo2: Aldo:enfermeiro:7234 Bruno:IMECC João:digitador:7111 João:CCUEC Ricardo:médico:7323 1. join -t: arquivo1 arquivo2 2. join -a1-t: arquivo1 arquivo2 > arqsaida arqsaida: Aldo:HC:enfermeiro:7234 Bruno:IMECC:__________ João:CCUEC:digitador:7111 3. join -o 1.1 1.2 2.3 -t”:” arquivo1 arquivo2 arqsaída: Aldo:HC:7234 João:CCUEC:7111 4. join -1 2 -2 2 arquivo1 arquivo2 OBS: Obrigatoriamente a opção -a tem que vir antes da opção -t.
  • 43. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 43 Comandos de Junção • paste Anexa múltiplos arquivos coluna por coluna. Sintaxe: paste [opções] stdin1 stdin2 Opções: • -dCaracter: define delimitador • -s : junta linhas subsequentes do arquivo Notas: Exemplos: 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/João:digitador
  • 44. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 44 Comandos de Junção • awk Linguagem de processamento e procura de padrões. Encontra linha(s) no(s) arquivo(s) de entrada que combinam com um padrão especificado e então executa as ações definidas. Sintaxe: awk [opções] '/padrão/' {ação} stdin Opções: • -Fcaracter: define delimitador A ação pode ser: -f pgm: arquivo que contém as ações a serem executadas pelo comando awk. ‘pgm’: são as ações a serem executadas pelo awk. Notas: Exemplos: 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 5. awk -F: ‘{print $1 > “matr“; print $2 > “nome”}’ arq_fun 6. awk -F: ‘{printf “%15s %10sn”, $1, $3}’ arq1 7. awk -F: ‘/smith+ern/’ arq1 8. awk -F: ‘/amel??/’ arq_fun 9. awk -F: ‘{printf (“meu nome eh %s e meu ramal %5dn “ , $2,$4)} arq_fun 10. awk -F: ‘$3 ~/Oct/ {print $2 $3} ‘ arq1 11. awk 'NR == '$cont' {print $0} ' arq Æle linha por linha de um arquivo 12. awk ($1 == " '$var' ") [print $0}' arq
  • 45. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 45 Comandos de Junção • AWK (Cont.) Tipos de padrões de pesquisa: • ‘/string/’ : grava em stdout todas as linhas do stdin que contém pelo menos uma ocorrência da string. • ‘/string1+string2/’ : grava em stdout as linhas que contém 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 contém a string1 seguido por nenhum ou um caracter que precede o sinal ? • ‘/string1|string2/’ : grava em stdout as linhas que contém a string1 e/ou a string2. • ‘/string1[char1-char2]/’ : grava em stdout as linhas que contém 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 contém a string1 seguido por qualquer caracter que não esteja entre char1 e char2 inclusive (char1 e char2 devem estar em ordem). Notas:
  • 46. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 46 Comandos de Junção • AWK (Cont.) • ‘$1 ~/char1/’ : grava em stdout todos os registros que contém no 1º campo o caracter char1 ou uma string . • ‘$1 ~/^char1/’ : grava em stdout todos os registros que não contém no 1º campo o caracter char1 ou uma string. • ‘$2 ~/char1$/’ : grava em stdout todos os registros que contém o último caracter igual a char1 ou string. • ‘$1 == “string1” ‘ : grava em stdout todos os registros que contém 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.” Notas:
  • 47. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 47 Comandos de Junção • AWK (Cont.) Tipos de ações: ∗ Output: Impressão de campos, variáveis e constantes: ‘{ print $1 “ “ $2}’ : grava em stdout o campo 1 e campo 2 separados por um espaço em branco. Redirecionamento: ‘{ print $1 > “arqoutput”} ‘ : redireciona o campo 1 para o stdout arqoutput . Instruções aritméticas: ‘{ print $1 *= $2 } ‘ : o campo 1 é o resultado da multiplicação do campo1 com o campo2. ‘{print “ra” , $1 “média :” , $2 / $3 } ‘ : grava em stdout o campo 1 precedido da string ra e a string média é o resultado da divisão do campo $2 pelo campo $3 . Variáveis Especiais: ‘{ print NR, $0 } ‘ : grava em stdout os registros de stdin numerado. Notas: sequencia significado n nova linha b backspace t tab
  • 48. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 48 Comandos de Junção • AWK (Cont.) Concatenação de campos: ‘{ print $1 = $1 $2}' : o campo 1 é a concatenação do campo 1 com campo 2 Imprimir linha em branco: ‘{print “ “} ‘ Impressão formatada de campos variáveis ou constantes : ‘{printf “%15sn” , $1}’ : imprime o campo 1 por linha formatando-o utilizando 15 posições alinhado à direita. ‘{printf “%20d %-5sn”, $3+$2 , $1}’ : imprime o resultado da soma do campo2 e do campo3 e o campo 1. ‘{printf “%20s %4dn” , “NOME” , RAMAL”}’ imprime as constantes NOME e RAMAL no formato definido pelo printf. Notas: • Tabela de caracteres de controle para o printf caracter expressão c caracter ASC II d decimal inteiro e [-] d.dddddd [+-] dd f [-] ddd.dddddd s string % imprime % • Formatos válidos para o printf: Fmt $1 printf ‘{fmt, $1}’ %c 97 a %d 97.5 97 %5d 97.5 bbb97 %e 97.5 9.750000e+01 %f 97.5 97.500000 %7.2f 97.5 97.50 %06d 97 000097 |%s| Janeiro |Janeiro| |%10s| Janeiro | Janeiro| |%-10s| Janeiro |Janeiro | |%.3s| Janeiro |Jan| |%10.3s| Janeiro | Jan| |%-10.3s| Janeiro |Jan | %% Janeiro %
  • 49. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 49 Comandos de Junção • AWK (Cont.) ∗ Begin Ações que devem ser executadas antes do stdin ser lido. Na execução de mais de uma ação ela deve estar entre colchetes. BEGIN { FS = “:” printf (“%20s %5sn” , “NOME” , “RAMAL”) } { printf (“%20s %5sn”, $2 , $1) } ∗ End Ações que devem ser executadas após o stdin ser lido. Se for executar mais de uma ação ela deve estar entre colchetes. END { printf ("%20s" , "fim de relatório ") } END { print "fim de relatório" } Notas:
  • 50. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 50 Comandos de Junção • AWK (Cont.) ∗ Instruções condicionais: if (expressão) {ações} [else {ações} ] while (expressão) {ações} BEGIN { FS = “:” } if ($1 != prev { print “ “ prev = $1 } ∗ Variáveis especiais: NR: número da linha corrente NF: quantidade de campos da linha FS = “caracter”: define delimitador Notas:
  • 51. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 51 Date Algumas opções 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(mês/dia/ano) ♦ `date +%j` => 254 (dia do ano) ♦ `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` Notas:
  • 52. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 52 Dicas de programação 1. Se a sua shell for fazer FTP, alterar a permissão do arquivo que contém o usário e a senha para “700”. Este é um ítem obrigatório por medidas de segurança. 2. Cada sistema tem um usário para acessar o IBM (mainframe) via FTP. Se o objetivo deste ftp é acessar alguma visão DB2, deverá ser solicitado ao DBA autorização para acesso às visões. 3. Utilize filtros de redução, grep, cut e awk em primeiro lugar em um conduto, reduzindo a quantidade dos dados que deverão ser transferidos pelo Shell. Exemplo: grep $1 arq1 | sort 4. Utilize condutos ao invés de arquivos temporários para melhorar a eficiência da sua shell Com arquivo temporário: 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 páginas é muito complexo. Notas:
  • 53. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 53 Dicas de programação 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/mês/ano). 8. Organize os dados para maior eficiência da máquina: primeiro chaves primárias, depois chaves secundárias e depois os itens de dados. Notas:
  • 54. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 54 Executar comandos vi em modo batch • Utilizando o editor vi: vi arquivo < comandos_vi >/dev/null Comandos_vi: /FIM dd ^[ :x Notas: • vi ♦ Se o arquivo existir, touch atualiza a data do arquivo, se não 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 execução 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 alterações no arquivo aberto por ed ♦ q - sai do editor ed
  • 55. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuec.unicamp.br) Programação Shell 55 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 visão/relação que será acessada. • -qr Opções do isql que serão executadas. No caso, q (query) e r(run) • delvtab53 Arquivo que contém os comandos isql • Continuação da linha comando • logerror_delete Se ocorrer algum erro, será gravado neste arquivo Notas:
  • 56. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br) Programação Shell 56 R E F E R Ê N C I A S
  • 57. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br) Programação Shell 57 Comandos básicos do vi: INICIANDO O VI vi filename abre ou cria um arquivo vi +18 filename abre o arquivo na linha 18 vi +/”teste” filename abre o arquivo na 1 a . ocorrência 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 (além da pontuação) b move uma palavra à esquerda B move uma palavra à esquerda (além da pontuação) Return move uma linha abaixo Back Space move um caracter à esquerda Space Bar move um caracter à direita H move para o início da tela M move para o meio da tela L move para o fim da tela Ctrl-F avança uma tela Ctrl-D avança 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 INSERINDO CARACTER E LINHAS a insere caracter à direita do cursor A insere caracter à direita do cursor e sinaliza fim de inha I insere caracter à esquerda do cursor I insere caracter à esquerda do cursor e sinaliza fim de inha o insere linha abaixo do cursor O insere linha acima do cursor ALTERANDO O TEXTO cw altera palavra ( ou parte da palavra à direita do cursor) cc altera linha C altera parte da linha à direita do cursor s substitui a string onde o cursor está posicionado r repete string que o cursor está com um outro caracter r-Return para linha J junta a linha corrente com a linha acima xp muda o caracter que o cursor está posicionado com o caracter à direita - altera letra (upper ou lower) u desfaz o comando anterior U desfaz todas as alterações da linha :u desfaz o comando anterior da última linha DELETANDO TEXTO x deleta caracter dw deleta palavra (ou parte da palavra à direita do cursor) dd deleta linha D deleta parte da linha à direita do cursor :5,10 d deleta da linha 5 à linha 10
  • 58. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br) Programação Shell 58 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 SETANDO LINHA NUMERADA :set nu mostra as linhas numeradas :set nonu inibe a numeração das linhas PROCURANDO UMA LINHA G vai para a última linha do arquivo 21G 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 próxima ocorrência da string :g/search-string/s//replace-string/gc procura e altera, consultando antes de cada ocorrência :%s/string_velha/string_nova/g troca string_velha pela string_nova :g/....$/s/// deleta as 4 últimas posições :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 espaço em branco e 1 algarismo variando de 1 a 9 :g/^Capit [0-9]$/ . copy $ a mesma pesquisa, porem serão copiadas para o final do arquivo :g/string/d procura a string e deleta :%s/string velha/string nova/g :%s/^h.t$/host substitui palavra que começa com h e termina com t LIMPANDO A TELA Ctrl L limpa a tela INSERINDO UM ARQUIVO NUM ARQUIVO :r filename insere o arquivo depois do cursor :34 r filename insere o arquivo após a linha 34 SALVANDO E CANCELANDO :w ou :x salva as alterações (no buffer) :w filename grava o buffer no arquivo :wq ou :zz salva as alterações e sai do vi :q! sai do vi sem salvar as alterações arq .exrc ab vc - Vocabulary
  • 59. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br) Programação Shell 59 Í N D I C E
  • 60. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br) Programação Shell 60 O QUE É SHELL ?.............................................................................................. 2 QUANDO USAR ................................................................................................... 3 PRODUTIVIDADE............................................................................................... 4 FILTROS............................................................................................................... 5 REDIRECIONAMENTO...................................................................................... 6 CONDUTO............................................................................................................ 7 CONSTRUÇÃO DE UM SHELL SCRIPT .......................................................... 8 CARACTERES ESPECIAIS DO SHELL............................................................ 9 TIPO DE VARIÁVEIS........................................................................................ 11 • GLOBAL: .................................................................................................... 11 • LOCAL:....................................................................................................... 11 DEFINIÇÃO DE VARIÁVEIS ........................................................................... 12 • STRING....................................................................................................... 12 • STRING....................................................................................................... 13 • INTEIRO...................................................................................................... 14 • ARRAY ....................................................................................................... 15 EDIÇÃO DE STRING ........................................................................................ 16 • TYPESET ..................................................................................................... 16 TRATAMENTO DE VARIÁVEIS ..................................................................... 17 • TESTA SE A VARIÁVEL TEM CONTEÚDO.......................................................... 17 TRATAMENTO DE ERRO ............................................................................... 18 • $? - TESTA SE O COMANDO FOI EXECUTADO COM SUCESSO............................. 18 VARIÁVEIS DE AMBIENTE ............................................................................ 19 EXECUÇÃO DE UM SHELL SCRIPT.............................................................. 20 TRATAMENTO DE PARÂMETROS ............................................................... 21 PRINCIPAIS OPERADORES............................................................................ 22 OPERADORES DE TESTE ............................................................................... 23 COMANDOS CONDICIONAIS......................................................................... 24 • IF - THEN - ELSE .......................................................................................... 24 • CASE .......................................................................................................... 25 • FOR ............................................................................................................ 26 • WHILE ........................................................................................................ 27 COMANDOS DO SHELL .................................................................................. 28 COMANDOS DE IMPRESSÃO......................................................................... 30 • ECHO OU PRINT ........................................................................................... 30 • CAT ............................................................................................................ 31 COMANDO DE SEGURANÇA.......................................................................... 32 • CHMOD....................................................................................................... 32 COMANDO DE LEITURA ................................................................................ 32 • READ.......................................................................................................... 32 COMANDO DE ORDENAÇÃO......................................................................... 33 • SORT .......................................................................................................... 33 COMANDOS DE SELEÇÃO ............................................................................. 34 • LINE ........................................................................................................... 34 • HEAD.......................................................................................................... 34 • TAIL ........................................................................................................... 34 COMANDOS DE SELEÇÃO ............................................................................. 35 • SED ............................................................................................................ 35 • UNIQ........................................................................................................... 36 • FIND ........................................................................................................... 36 • GREP .......................................................................................................... 37 • CUT ............................................................................................................ 38
  • 61. Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@ccuecunicamp.br) Programação Shell 61 • WC ............................................................................................................. 38 • SPLIT .......................................................................................................... 39 • CSPLIT ........................................................................................................ 40 COMANDOS DE TRANSFORMAÇÃO............................................................ 41 • TR .............................................................................................................. 41 • DD.............................................................................................................. 41 • SED ............................................................................................................ 41 COMANDOS DE JUNÇÃO................................................................................ 42 • JOIN............................................................................................................ 42 • PASTE......................................................................................................... 43 • AWK ........................................................................................................... 44 DATE................................................................................................................... 51 DICAS DE PROGRAMAÇÃO ........................................................................... 52 EXECUTAR COMANDOS VI EM MODO BATCH ........................................ 54 COMO UTILIZAR ISQL NUM SHELL ........................................................... 55 COMANDOS BÁSICOS DO VI:........................................................................ 57