Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Curos Básico se Shell, Manuais, Projetos, Pesquisas de Informática

Curso básico de shell script, ensina a como fazer programas básico usando shell script.

Tipologia: Manuais, Projetos, Pesquisas

2021

Compartilhado em 12/04/2021

manuel-junior-25
manuel-junior-25 🇧🇷

3 documentos

1 / 118

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
O q u e é o K o r n
S h e l l
V a r i á v e i s d e m e m ó r i a
U s o d a s a s p a s n o U n i x
E s t r u t u r a s d e c o n t r o l e
D e s v i o s s i m p l e s e m ú l t i p l o s
T r a t a m e n t o d e a r q u i v o s d e d a d o s
I n t r o d u ç ã o a l i n g u a g e m A W K
C o m a n d o s d o U n i x ú t e i s e m s c r i p t s
L i n k s d a I n t e r n e t s o b r e U n i x
R o d i v a l d o M a r c e l o R a i m
u n d o
P a r a u s u á r i o s e a d m i n i s t r a d o r e s U n i x
d
i
ç
ã
o
2
0
0
9
-
1
1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Pré-visualização parcial do texto

Baixe Curos Básico se Shell e outras Manuais, Projetos, Pesquisas em PDF para Informática, somente na Docsity!

O q u e é o Ko r n– Shel l

Va r i á v ei s d e me mór i a

Uso d a s a sp as no Uni x

Est r u t u r as de con t r ol e

De sv i o s si mp l e s e múl t i pl o s

Tr a t a men t o d e a r q ui vo s d e d ado s

I n t r odu ç ão a l i ngu a gem AWK

Co ma nd o s d o Uni x út ei s em sc r i p t s

L i n ks d a I n t e r ne t sob r e Un i x

Ro d i va l do Ma r ce l o Rai mu nd o

Pa r a u s u á r i o s e a d m i n i s t r a d o r e s Un i x

Ed i ç ã o 200 9 - 1 1

Introdução

É interessante como um ambiente operacional como o Unix pode possuir, embutido em um de seus interpretadores de comando, uma linguagem de programação completa, capaz de criar se for o caso, sistemas completos além de ferramentas que agilizam a operação e administração de sistemas.

Criado no final da década de 60, o Unix é um sistema operacional que começou como um ambiente de teste por estudantes que eram programadores e precisavam de um sistema operacional em que ferramentas independentes pudessem ser combinadas para obterem os resultados desejados.

Com a implementação da linguagem de programação Shell, o sistema foi tornando-se mais e mais poderoso. Podia-se combinar os recursos do Unix em forma de programas, e não somente no modo interativo.

Com esta obra procuro suprir para aqueles que vivem no ambiente Unix uma ferramenta tanto de referência como um tutorial. Referência porque por mais que usemos a ferramenta e nos atemos a um grupo de comandos, sempre esquecemos alguma funcionalidade que nos será útil algum dia. Tutorial por que para aqueles que querem aprender a linguagem Korn Shell, seja como mais uma nova linguagem ou como a primeira, poderá não só desenvolver sua lógica em uma linguagem completamente estruturada, mas também poderá sentir a diferença entre desenvolver programas no próprio sistema operacional e apenas criar arquivos com sequencias de comandos, pois às vezes mesmo no prompt de comandos, sentimos a necessidade de comandos para manipulação de strings, operações matemáticas, tratamento de variáveis, desvios, estruturas de laço (looping) e até mesmo colocar a saída de um comando em uma variável.

Procurei tornar esse livro o mais didático possível, de modo a ser entendido tanto pelos profissionais da área como por iniciantes no assunto. Coloquei ao longo do livro alguns exemplos, para que você possa ir se acostumando com o novo ambiente.

Complemento que, para iniciar neste livro você deve, como pré-requisito, conhecer o ambiente Unix em seu modo interativo, isto é, interagindo no prompt de comandos, embora no início do livro ocorra uma revisão rápida de conceitos do Unix e sobre o comportamento do Korn Shell em modo interativo. Mesmo assim, você deverá estar acostumado aos comandos básicos do Unix e, principalmente, ao uso do manual on-line pois, mesmo depois de anos e anos de uso do Unix, sempre tem uma opção ou parâmetro de algum comando que nunca conseguimos nos lembrar.

Espero poder, àqueles que estão à procura de uma obra sobre Korn Shell em português, ajudá-los a entender a linguagem e que, se for o caso, encontrar o caminho para vencer a resistência ao aprendizado e uso do Unix no que se refere à programação estruturada. Sugestões e críticas construtivas serão sempre bem vindas.

Bom aprendizado e boa sorte.

Rodivaldo Marcelo Raimundo Assessor Certificado em Gerenciamento de T.I. Auditor de Segurança da Informação Especialista em Sistemas Operacionais Unix

Capítulo 1 - O que é o Shell

O Shell é um programa interativo que serve como interpretador de linha de comando com as seguintes funções:

  • pesquisa por um comando e executa o programa a ele associado
  • substitui os valores das variáveis do Shell pelo conteúdo a ela associado
  • executa substituição de comandos
  • completa nomes de arquivos a partir de caracteres de geração de nomes de arquivos (curingas)
  • manipula redirecionamento de entrada e saída e pipelines

Ele é responsável pela interface entre o usuário e o sistema operacional, traduzindo os comandos por ele digitados para serem executados pelo hardware.

O Korn Shell contém uma interface de programação interpretada, incluindo testes, desvios e loops. Aos programas criados usando a interface programada do Unix damos o nome de Shell-Script ou Shell Script.

O uso de alias

Alias é um novo nome, ou apelido, para o comando. Para conseguir isso se usa o comando interno alias :

alias nome = string

Um alias pode ser usado para abreviar longas linhas de comando ou fazer com que comandos comportem-se diferente da execução padrão.

Se string contiver espaços, deverá ser digitada entre aspas (simples ou duplas).

Os aliases definidos possuem prioridade de execução em relação aos comandos do Unix. Quando atribuído interativamente, ficará ativo até o logout da sessão de terminal. Para que um alias esteja disponível no momento do logon, deve-se colocá-lo no arquivo /etc/profile (caso queira que os aliases estejam disponíveis para todos que se logarem), no arquivo .profile no diretório de login do usuário (ficando disponível somente para o usuário logado) ou no arquivo .kshrc , também existente no diretório de login do usuário. Exemplos:

alias cls=clear alias ls='ls –logt' alias lsf='ls –laF' alias rm='rm –i' alias del='rm –f' alias dir=ls

Para que os alias sejam carregados a partir do arquivo .kshrc - arquivo lido a cada execução do comando ksh - deve ser adicionada a seguinte linha no arquivo .profile do usuário:

export ENV=$HOME/.kshrc

Edição da linha de comando

Permite a recuperação da última linha de comando para ser executada.

Usando os comandos do editor de textos vi a linha poderá ser editada antes da execução.

Para ativar o recurso, deverá, no prompt de comando do Korn Shell, ser executado o seguinte comando:

set –o vi

Para que este recurso seja atribuído automaticamente no momento do logon, coloque o comando acima em seu arquivo .profile.

Para recuperar a linha de comando, pressione a tecla ESC e em seguida a tecla K , que no editor vi tem a função seta-para-cima.

 Não use as teclas de seta pois estas não funcionam no modo usual como em outros

editores de texto. Use os comandos de navegação do vi: L como seta-para-a-direita, H como seta-para-a-esquerda, K como seta-para-cima e J como seta-para-baixo. Os demais comandos de edição de texto do vi continuam valendo para a edição de linha de comando do Shell.

Ambiente do usuário

O ambiente do usuário descreve a sessão para o sistema, contendo as seguintes informações, geralmente armazenadas em variáveis de ambiente:

  • caminho para o diretório home - variável HOME ;
  • onde enviar seu correio eletrônico - variável MAIL ;
  • fuso horário no qual você está trabalhando - variável TZ ;
  • com que nome você se logou - variável LOGNAME ;
  • onde seu Shell pesquisará os comandos - variável PATH ;
  • seu tipo de terminal - variável TERM ;
  • outras definições que seus aplicativos possam precisar.

Muitos aplicativos necessitam que o ambiente seja customizado de alguma maneira. Isso é feito através da modificação do arquivo .profile do usuário. para que a customização valha de maneira geral, isso deve ser definido no arquivo /etc/profile.

 Vale lembrar que o arquivo /etc/profile só pode ser manipulado pelo administrador

do sistema operacional - usuário root - ou outro usuário com permissões equivalentes.

Configurando variáveis do Shell

Variáveis do Shell são atribuídas da seguinte maneira:

NOME_DA_VARIAVEL = conteúdo

Isto pode ser digitado como uma linha de comando ou em uma linha de um Shell Script-script.

 Não deve haver espaço antes ou depois do sinal de igual. Isso assegura que a atribuição

seja feita corretamente, não sendo interpretada como um comando e seus argumentos separados por espaços. Caso o conteúdo da variável contenha espaços este deverá ser atribuído entre aspas (simples ou duplas) ou serão mostrada mensagens de erro.

Duas variáveis importantes – PATH e TERM

PATH – relação de diretórios, usada pelo Shell para a pesquisa de comandos. Os diretórios a serem

pesquisados devem estar separados por dois pontos (:). Exemplo:

export PATH=/usr/bin:/etc:/bin:/home/user1:.

 Apesar da comodidade, evite colocar o diretório corrente (.) na lista de diretórios da

variável PATH. Se algum programa estiver no diretório corrente que não o que pensa estar os resultados podem ser imprevisíveis ou desastrosos.

TERM – descreve o tipo de terminal. Deve ser atribuído um valor de acordo com o terminal em

uso. Para a maioria dos aplicativos usa-se o valor vt100 , mas pode assumir outros valores dependendo do fabricante do terminal, ou da necessidade para um aplicativo de um tipo de

Exercícios

1 - Crie um alias chamado limpatela que execute o comando clear.

2 - Coloque o alias criado anteriormente no seu arquivo .kshrc. Faça com que seja carregado a cada execução de shell ou em cada login efetuado

3 - Altere o comportamento dos seguintes comandos de acordo com as solicitações abaixo:

  • rm - deve pedir confirmação sempre que um arquivo seja removido, independente do uso dos caracteres geradores de nome de arquivo ( ***** ,? e [] )
  • ls - deve mostrar lista longa, diferenciando, no nome de arquivo, diretórios, arquivos comuns, executáveis, links, etc. Além disso, deve mostrar o i-node do arquivo listado
  • clear - deve aguardar 5 segundos antes de limpar a tela

Capítulo 2 - Capacidades de substituição do Shell

Uma característica interessante no Shell é a capacidade de podermos manipular textos, números e até saída de comandos através de variáveis. A isso chamamos substituição do Shell.

Existem 3 tipos de substituição no Shell:

  • substituição de variáveis;
  • substituição de comandos;
  • substituição do til.

Esses métodos de substituição são utilizados para acelerar a execução e a digitação da linha de comando, mas serão bastante úteis quando usados no desenvolvimento de aplicativos em Korn Shell.

Substituição de variáveis

Cada variável terá um valor a ela associado. Quando o nome de uma variável for precedido por um sinal de $ (dólar) o Shell substituirá o parâmetro pelo conteúdo da variável. Este procedimento é conhecido como Substituição de Variável. Uma das maneiras de exibirmos o conteúdo de uma variável é usando o comando echo:

echo $ PATH

/usr/bin:/usr/contrib/bin:/usr/local/bin

Ou pode ser passada como argumento para um comando:

ARQUIVO=/home/morro.txt

more $ ARQUIVO

Pode-se também alterar uma variável utilizando a mesma e/ou outra variável:

PATH= $ PATH: $ HOME:.

Preste atenção no exemplo de concatenação abaixo:

TXT1=Casa

TXT2=Mae

TXT3=Joana

echo $ TXT1da $ TXT2 $ TXT

MaeJoana

echo ${ TXT1 } da $ TXT2 $ TXT

CasadaMaeJoana

Observe que no último exemplo foram usadas as chaves para circundar o nome da variável, senão o Shell poderia interpretar a variável como TXT1da o que seria um nome de variável diferente de TXT1. Neste caso a variável TXT1da não existe, retornando uma string nula para a concatenação.

Substituição de comando

A substituição de comandos é usada para substituir um comando por seu resultado dentro da mesma linha de comando. Isto será útil quando for necessário armazenar a saída de um comando em uma variável ou passar essa mesma saída para outro comando. A sintaxe utilizada é:

$( comando )

A substituição de comandos permite que você capture o resultado de um comando e utilize-o como um argumento para outro comando ou armazene sua saída em uma variável. Veja os exemplos a seguir:

  • Armazenando o diretório corrente em uma variável:

DIR_ATUAL= $(pwd)

  • Passando uma lista de arquivos do comando ls para o comando cp:

cp $(cat filelist.txt) /home/user1/backup

  • Efetuando um backup dos arquivos do dia de hoje, criando um arquivo de backup com timestamp em seu nome: tar -cvf backup. $(date +"%Y%m%d.%H%M%S") .tar
    $(ls -la|grep -v ^d|grep " $(date +"%b %e")"|awk '{print $9}')

A barra invertida no final da linha informa ao shell que o comando continua na linha seguinte, o que gera um prompt secundário ( > ) para que a linha seja completada. Isto é muito útil quando a linha de comando digitada começa e estourar os limites visíveis da tela.

Substituição do ~ (til)

A substituição do til é executada de acordo com as seguintes regras:

  • Um til seguido pelo nome de um usuário existente em /etc/passwd , assume $HOME daquele usuário

cd ~ user10 - vai para o diretório /home/user

ls -logtr ~ user5/bin - lista o conteúdo do diretório /home/user5/bin

  • Um til sozinho ou em frente a uma / é substituído pelo conteúdo da variável HOME

HOME=/home/user echo ~ - retorna /home/user ls –lF ~ /file1 - será substituído por /home/user3/file

  • Um til seguido do sinal de + é substituído pelo valor da variável PWD

PWD=/home/user3/tree

ls –logt ~+ /poodle - Será substituído por /home/user3/tree/poodle

  • Um til seguido de - será substituído pelo valor da variável OLDPWD

OLDPWD=/home/user3/mail

ls ~- - Será substituído por /home/user3/mail

Capítulo 3 - Introdução ao Quoting

Muitos caracteres no sistema Unix tem significado especial para o Shell. Por exemplo, o espaço em branco é o delimitador entre comandos e argumentos. O carriage-return (CR) dá o sinal para o Shell executar a linha introduzida. O $ é usado para mostrar o valor associado a uma variável.

Ha situações em que você quer que o Shell não interprete o significado especial associado a esses caracteres. Você precisa apenas do caractere literal. Portanto, o sistema Unix deve oferecer um mecanismo que remova ou omita o significado especial de um determinado caractere. Esse mecanismo é conhecido como Quoting.

Caracteres usados no mecanismo de Quoting

Os caracteres usados no mecanismo de Quoting são os seguintes:

  • Barra invertida - \ - ignora o caractere subsequente
  • Aspas simples - ' ' - ignora todos os caracteres envolvidos
  • Aspas duplas - " " - ignora os caracteres envolvidos com exceções

Quoting Barra Invertida - \

A barra invertida () remove o significado do caractere situado imediatamente depois ela.

A barra invertida sempre remove o significado do próximo caractere sem exceções. Exemplos:

  • Exibindo um texto:

echo a \ omite o efeito do próximo caractere echo a ** omite o efeito do próximo caractere

  • Criação de variáveis

COR=vermelho ** branco ** e ** azul echo o valor de ** $COR e $COR o valor de $COR e vermelho branco e azul

  • Ignorando a mudança de linha, permitindo dividir linhas longas em mais de uma linha echo um dois **\

** tres quatro um dois tres quatro

 O prompt secundário sempre aparecerá quando pressionada a tecla ENTER após .

Quoting Aspas Simples - ' '

As aspas simples (' ') também desativam a interpretação especial dos caracteres especiais. Todos os significados dos caracteres especiais situados entre aspas simples são omitidos. As aspas simples não podem ter seu significado omitido porque são necessárias para abrir e fechar a string assinalada. Exemplos de uso de aspas simples:

  • Criação de variáveis

COR= ' vermelho branco e azul ' echo ' o valor de $COR e $COR ' o valor de $COR e $COR

  • Exemplo com a correta substituição de variável

COR= ' Ciano, Fucsia, Roxo, Branco e Azul ' echo ' o valor de $COR e ' $COR o valor de $COR e Ciano, Fucsia, Roxo, Branco e Azul

  • Não se remove o efeito da aspa simples diretamente entre aspas simples

echo 'this doesn't work'

faltou fechar a segunda aspa'

this doesnt work

faltou fechar a segunda aspa

  • Mostrando literalmente caracteres especiais do Unix

echo ***** arq_temp.001 arq_temp.002 arq_temp.003 arq_temp.004 arq_temp. echo '*****'


echo ###########

echo '###########' ###########

Quoting Aspas Duplas - " "

Aspas duplas ( " " ) são menos abrangentes. A maior parte dos caracteres especiais situados entre

aspas duplas perdem o significado. As exceções são o símbolo $ (quando usado para substituição de variáveis e de comandos), { nome de variável } ,a barra invertida ( ** ), a crase ( ` ) e a aspa dupla ( " ), que é exigida para fechar a string assinalada. Você pode usar a barra invertida ou aspas simples entre as aspas duplas para omitir o significado de $ ou ". Exemplos:

  • Aspas duplas com atribuição e substituição de variáveis

COR="vermelho, amarelo branco e azul" echo "o valor de $ COR e $COR" o valor de $COR e vermelho, amarelo branco e azul

  • Aspas duplas com substituição de comandos

LOGNAME=$(whoami) DIR_CORR= " $LOGNAME - seu diretorio atual e $(pwd) " echo $DIR_CORR Administrador - seu diretorio atual e /home/Administrador

  • Aspas duplas com uso dos caracteres especiais do Unix

echo "todos estao aqui, \, ', ",{ } ( )" todos estao aqui, , ', ",{ } ( )