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


Programação em Linux-Shell, Notas de estudo de Informática

Programação em linux - SHELL

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 18/02/2010

gustavo-dias-11
gustavo-dias-11 🇧🇷

4.7

(7)

46 documentos

1 / 11

Toggle sidebar

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

Não perca as partes importantes!

bg1
1
Programação em Shell
Taisy Weber
TSW 2
Programação em shell
4Comandos básicos bash
4Programação em shell
pipe,
redirecionamento de entrada e de saída,
comandos,
variáveis, estruturas de controle e condicionais
criação de scripts
Matthew & Stones cap 2
LDP, manuais para usuários
manuais UNIX e Linux
TSW 3
Apoio bibliográfico
comandos: preferencialmente man, info e LDP
programação em shell
Matthew, N; Stones, R. "Beginning Linux
Programming", Wrox press, 1999 (2th Edition) -
capítulo 2
»conferir programas e scripts em:
http://www.wrox.com
Ball, B. Usando Linux. Campus
Capítulo 22. Rápida introdução. Adequado para quem não
domina o inglês.
Siever, E. Linux in a Nutsell. O’Reilly
cópia no servidor gaea.inf.ufrgs.br pasta ProgLinux
TSW 4
Shell
4processador de comandos
4linguagem de programação (interpretador)
adequada para prototipação
programação rápida e simples
ideal para pequenos utilitários
fácil manutenção, configuração
grande portabilidade
4controle de tarefas
reuso de código
mas os programas não
são muito eficientes
TSW 5
Várias shells
4UNIX permite vários programas shell
o usuário escolhe um de sua preferência
mais comuns
sh (Bourne)shell original do UNIX
csh, tcsh e zsh C shell (Bill Joy)
ksh, pdksh Korn shell (David Korn)
bash Bourne Again Shell
muito popular em Linux
existe um grande número de outras shells
características são mais ou menos comuns
TSW 6
bash
POSIX-compatível
shell deve estar instalada em /bin/sh
verificar com comando ls -l /bin/sh
comandos bash
antes de entrarmos em programação shell é
necessário conhecer os comandos básicos da shell
Comandos Linux e MS-DOS guardam alguma
semelhança. Partes do MS-DOS foram inspiradas no
CP/M, que por sua vez foi inspirado no UNIX.
lab
COMMAND.COM shell única do DOS
pf3
pf4
pf5
pf8
pf9
pfa

Pré-visualização parcial do texto

Baixe Programação em Linux-Shell e outras Notas de estudo em PDF para Informática, somente na Docsity!

Programação em Shell

Taisy Weber

TSW 2

Programação em shell

4 Comandos básicos bash

4 Programação em shell

  • pipe,
  • redirecionamento de entrada e de saída,
  • comandos,
  • variáveis, estruturas de controle e condicionais
  • criação de scripts

Matthew & Stones cap 2

LDP, manuais para usuários

manuais UNIX e Linux

TSW 3

Apoio bibliográfico

– comandos: preferencialmente man , info e LDP

– programação em shell

  • Matthew, N; Stones, R. "Beginning Linux

Programming", Wrox press, 1999 (2th Edition) -

capítulo 2

» conferir programas e scripts em:

http://www.wrox.com

  • Ball, B. Usando Linux. Campus

Capítulo 22. Rápida introdução. Adequado para quem não

domina o inglês.

Siever, E. Linux in a Nutsell. O’Reilly

cópia no servidor gaea.inf.ufrgs.br pasta ProgLinux

TSW 4

Shell

4 processador de comandos

4 linguagem de programação (interpretador)

  • adequada para prototipação
  • programação rápida e simples
  • ideal para pequenos utilitários
  • fácil manutenção, configuração
  • grande portabilidade

4 controle de tarefas

reuso de código

mas os programas não

são muito eficientes

TSW 5

Várias shells

4 UNIX permite vários programas shell

  • o usuário escolhe um de sua preferência

– mais comuns

  • sh (Bourne) shell original do UNIX
  • csh, tcsh e zsh C shell (Bill Joy)
  • ksh, pdksh Korn shell (David Korn)
  • bash Bourne Again Shell

muito popular em Linux

existe um grande número de outras shells

características são mais ou menos comuns

TSW 6

bash

– POSIX-compatível

  • shell deve estar instalada em /bin/sh
    • verificar com comando ls -l /bin/sh

– comandos bash

  • antes de entrarmos em programação shell é necessário conhecer os comandos básicos da shell

Comandos Linux e MS-DOS guardam alguma

semelhança. Partes do MS-DOS foram inspiradas no

CP/M, que por sua vez foi inspirado no UNIX.

lab

COMMAND.COM shell única do DOS

TSW 7

Comandos UNIX

– se você não possui domínio dos comandos

básicos UNIX, está na hora de:

  • explorar os comandos UNIX (Linux)
  • estabelecer uma relação entre os comandos básicos e o

MS-DOS

  • familiarizar-se com os conceitos elementares de operação

de ambientes UNIX

  • aprender a usar redirecionamento e pipes
  • exercite-os listando arquivos diretórios, verificando o estado de processos ...

não tenha medo de experimentar!

lab

use man

TSW 8

Resumo de alguns comandos

ls : lista conteúdo de um diretório dado, se nenhum é dado lista o atual

cat : lê e mostra arquivos em stout , se não aparece arquivo então stin ,

permite concatenação

more : display o conteúdo do arquivo, uma tela de cada vez

grep : pesquisa em um ou mais arquivos por linhas que casam com uma

expressão regular dada ( -l : listar)

chmod : altera as permissões de acesso de um arquivo

touch : verifica se existe arquivo, senão cria

rm : remove arquivo

lab

revisar

use man

TSW 9

Redirecionamento

4 entrada e saída padrão

– stdin

– stdout

– entrada e saída padrão e descritores de arquivo

  • stdin - file descritor 0
  • stout - file descritor 1
  • st error out - file descritor 2

– redirecionamento

  • troca um arquivo padrão por outro arquivo indicado

entrada padrão

saída padrão

também stin e stout

TSW 10

Redirecionamento (>) de stout

– exemplo simples:

$ ls -l > lssaida.txt

– CUIDADO!!!

  • o redirecionamento escreve sobre o arquivo (se o arquivo já existe) apagando o conteúdo anterior

salva a saída do comando ls no arquivo lssaida.txt

redireciona saída

ls : lista o conteúdo de um diretório dado; se nenhum

diretório é dado, lista o diretório atual

TSW 11

Usando cat e >

– comando cat

$ cat rel.txt > novorel.txt

$ cat rel1 rel2 rel3> novorel.txt

  • entrada rápida de texto

$ cat > novorel.txt

>isso é uma linha de texto

>isso é mais uma linha de texto

>[EOF]

  • para mostrar o resultado

$ cat novorel.txt

lab

digite Crt+D para marca de fim de arquivo

exemplo : Ball, B. Usando Linux. pg 21

cat : lê e mostra arquivos em stout;

permite contatenação

TSW 12

Append >>

4 >> ( append )

– anexa a saída ao fim de um arquivo

  • evita apagar um arquivo que já existe como em >
  • também existe << (raro uso)

TSW 19

Exemplo de programa interativo

– determinar todos os arquivos que contém o

string POSIX

$ for arquivo in *

> do

> if grep -l POSIX $arquivo

> then

> more $arquivo

> fi

> done

primeira forma

arquivo é uma variável e

$arquivo seu conteúdo

grep e more são comandos

grep : pesquisa em um ou mais arquivos por linhas que

casam com uma expressão regular dada ( -l : listar)

more : mostra o conteúdo do arquivo, uma tela de cada vez

TSW 20

Programa interativo x script

4 programa interativo

– desvantagem

  • digitar o programa cada vez que for necessário
  • inibe reuso

4 shell script

  • armazenar programa em um arquivo
  • invocar o arquivo

– vantagem

  • scripts possibilitam reuso

primeira forma

segunda forma

TSW 21

Exemplo de shell script

4 arquivo chamado

primeiro.sh

  • .sh sem significado
  • indica comentário

  • #! comentário especial
    • indica qual programa deve ser usado para executar o arquivo
    • /bin/sh =shell default
  • exit 0
    • código de retorno
    • 0 indica sucesso

#!/bin/sh

primeiro.sh

compilar apenas os arqs.

contendo string POSIX

for file in * do if grep -l POSIX $file then more $file fi done exit 0

TSW 22

Executando scripts

– forma fácil

  • invocar a shell com o nome do arquivo

– forma mais elegante

  • invocar diretamente
  • pode não funcionar
    • o arquivo pode não ser localizado (se PATH não foi

atualizada para procurar no diretório atual)

$ /bin/sh primeiro.sh

$ chmod +x primeiro.sh $ primeiro.sh

chmod : altera as permissões

de acesso de um arquivo

+x : adiciona modo executável

TSW 23

Variáveis

– não são usualmente declaradas antes de usar

  • criadas quando usadas pela primeira vez
  • maiúsculas e minúsculas são diferenciadas
  • valor de uma variável: $ antes do nome

shell sintax

$ meuscumprimentos=Alo $ echo $meuscumprimentos Alo $ meuscumprimentos= ”Tudo bem” $ echo $meuscumprimentos Tudo bem $ meuscumprimentos=9+ $ echo $meuscumprimentos 9+

precisa de apóstrofes

se contém espaços

lab TSW 24

read

– read permite ler do teclado valor de variável

  • termina pressionando tecla de return

#!/bin/sh

echo Entre algum texto read texto echo $texto echo '$texto' agora contém $texto

lab

mostra o string $texto

mostra conteúdo

da variável

$texto

TSW 25

Apóstrofes na shell

4 pequena pausa para falar

sobre apóstrofes simples e

duplas

#!/bin/sh

myvar="Hi there"

echo $myvar echo "$myvar"

echo '$myvar' echo $myvar

echo Enter some text read myvar

echo '$myvar' now equals $myvar

exit 0

mostra valor

da variável

mostra string $myvar

\ remove qualquer

significado especial

de $

para conter

espaços

lab TSW (^) 26

Variáveis de ambiente

4 são variáveis pré-definidas

– valores são obtidos do sistema quando um

script inicia execução

  • dependem do ambiente de execução
  • normalmente maiúsculas
    • para distinguir das variáveis do usuário (geralmente

minúsculas)

  • dependem da configuração particular do ambiente

exemplos: $HOME, $PATH, $#, $$

TSW 27

Algumas variáveis de ambiente

– $HOME

  • diretório pessoal ( home ) do usuário atual

– $PATH

  • lista de diretórios onde procurar por comandos
    • separado por : (dois pontos) /usr/local/bin:/bin:/usr/bin:.:/home/neil/bin

– $# número de parâmetros passados

– $$ o process ID da shell script

exemplo

TSW 28

Mais algumas

variáveis de ambiente

– $PS

  • command prompt (usualmente $)

– $PS

  • command prompt secundário (usualmente >)

– $IFS

  • separador de campos de entrada
  • usualmente
    • espaço
    • tab
    • nova linha

TSW 29

Parâmetros

– variáveis adicionais são criadas quando a shell

é invocada com parâmetros

  • se a shell for invocada sem parâmetros então $# possui o valor 0 (zero)
  • $1, $2, ... parâmetros dados ao script
  • $* lista de todos os parâmetros

separados pelo 1o. caracter em IFS

  • $@ variação de $* que não usa IFS

IFS: separador de campos de entrada

TSW 30

Exemplo

salvar o arquivo com o nome

de tentar_var

não esquecer

chmod +x tentar_var

executar

$ ./tentar_var foo bar baz

o que acontece?

#!/bin/sh

salutation="Hello" echo $salutation echo "The program $0 is now running" echo "The second parameter was $2" echo "The first parameter was $1" echo "The parameter list was $*" echo "The user's home dir is $HOME"

echo "Please enter a new greeting" read salutation echo $salutation echo "The script is now complete" exit 0

lab

TSW 37

elif

#!/bin/sh

echo "Is it morning? Please answer yes or no" read timeofday

if [ $timeofday = "yes" ] then echo "Good morning" elif [ $timeofday = "no" ]; then echo "Good afternoon" else echo "Sorry, $timeofday not recognized. Enter yes or no" exit 1 fi

exit 0

script termina com valor 1

segundo teste

ainda tem um problema se entra return

lab TSW (^) 38

problema???

– problema com o if

  • timeofday será considerado como:

– para evitar esse problema

  • usar apóstrofes
  • timeofday será considerado como:

entrando com return

if [ = "yes" ]

if [ $timeofday = "yes" ]

condição inválida

gera mensagem de erro

if [ "$timeofday" = "yes" ]

if ["" = "yes" ]

condição válida

TSW 39

elif & if & teste com apóstrofes

#!/bin/sh

echo "Is it morning? Please answer yes or no" read timeofday

if [ "$timeofday" = "yes" ] then echo "Good morning" elif [ "$timeofday" = "no" ]; then echo "Good afternoon" else echo "Sorry, $timeofday not recognized." echo "Enter yes or no" exit 1 fi

exit 0 lab

apóstrofes

TSW 40

for

#!/bin/sh

for foo in bar fud 43 do echo $foo done exit 0 #!/bin/sh

for file in $(ls f*.sh); do echo $file done exit 0

lab

for variable in values do statements done

lista de valores bar fud 43

$(comand)

fornece a lista para o for

TSW 41

while

#!/bin/sh

echo "Enter password"

read trythis

while [ "$trythis" != "secret" ]; do

echo "Sorry, try again"

read trythis

done

exit 0

#!/bin/sh

foo= while [ "$foo" -le 20 ] do echo "Here we go again" foo=$(($foo+1)) done exit 0 lab

while condition; do statements done

apóstrofes desnecessárias

TSW 42

until

#!/bin/sh

until who | grep "$1" > /dev/null do sleep 60 done

Now ring the bell

and announce the expected user

echo -e \a echo "*** $1 has just logged in ***"

exit 0

until condition; do statements done

loop até usuário com login dado pelo

parâmetro $1 logar-se na máquina

toca o alarme

pipe

TSW 43

case

#!/bin/sh

echo "Is it morning? Please answer yes or no"

read timeofday

case "$timeofday" in

"yes") echo "Good Morning";;

"no" ) echo "Good Afternoon";;

"y" ) echo "Good Morning";;

"n" ) echo "Good Afternoon";;

* ) echo "Sorry, answer not recognised";;

esac

exit 0

case variable in pattern [ | pattern] ...) statements;; pattern [ | pattern] ...) statements;; esac

executa o primeiro comando que casa e finaliza

bom aparecer sempre no fim

TSW 44

case

#!/bin/sh

echo "Is it morning? Please answer yes or no" read timeofday

case "$timeofday" in yes | y | Yes | YES ) echo "Good Morning";; n* | N* ) echo "Good Afternoon";;

  • ) echo "Answer not recognised";; esac

exit 0

forma mais curta: agrupando alguns ramos

expansão do wildcard * em N* e n* pode casar com

um grande número de palavras, não apenas NO e no

exemplo do uso de * em case

TSW 45

case

#!/bin/sh

echo "Is it morning? Please answer yes or no" read timeofday case "$timeofday" in yes | y | Yes | YES ) echo "Good Morning" echo "Up bright and early this morning?" ;; [nN]* ) echo "Good Afternoon" ;;

  • ) echo "Sorry, answer not recognised" echo "Please answer yes or no" exit 1 ;; esac exit 0

saída com código 1

set

outra variação

TSW 46

Listas de comandos

4 permite executar uma série de comandos

– lista E ( AND list )

  • executa o próximo comando apenas se todos os anteriores executam com sucesso
  • executa enquanto comando retorna TRUE

– lista OU ( OR list )

  • executa o próximo comando apenas se todos os anteriores executam sem sucesso
  • executa enquanto comando retorna FALSE

TSW 47

Lista E

#!/bin/sh

touch f_one rm -f f_two

if [ -f f_one ] && echo "hello" && [ -f f_two ] && echo "there" then echo -e "in if" else echo -e "in else" fi exit 0

touch : verifica se arquivo

existe, senão cria

rm : remove arquivo

teste retorna FALSE

não executa

ramo else é executado porque

condition é FALSE (terceiro

comando da lista AND)

lab

statement1 && statement2 && statement3 && ..

TSW 48

Lista OU

#!/bin/sh

rm -f f_one

if [ -f f_one ] || echo "hello" || echo "there" then echo -e "in if" else echo -e "in else" fi exit 0

rm : remove arquivo

teste retorna FALSE

não executa

ramo then é executado porque

condition é TRUE (segundo

comando da lista OR)

lab

statement1 || statement2 || statement3 || ..

executa

TSW 55

Função: mais um exemplo

echo "Original parameters are $*"

if yes_or_no "$1" then echo "Hi $1, nice name" else echo "Never mind" fi

exit 0

lista de todos parâmetros

chamada de função com

passagem de um parâmetro

teste de valor numérico

0 verdadeiro

1 falso

lab

programa principal com invocação da função

fonte: my_name

executar com $ ./my_name.sh Taisy Weber

TSW 56

Comandos

4 normais

  • comandos que podem ser executados a partir do prompt da shell, não apenas dentro de um script

4 internos ( built-in )

  • comandos que só podem ser executados dentro de um script
  • não podem ser invocados externamente
    • para alguns deles existem programas externos

correspondentes

  • os internos são mais eficientes

qualquer comando UNIX válido

TSW 57

Alguns comandos

4 break

4 continue

4 echo

4 eval

4 exec

4 exit n

4 export

4 expr

4 printf

4 return

4 set

4 shift

4 trap

4 unset

mostra um string

gera saída

formatada, só

disponível

recentemente

ver $(( ))

TSW 58

Execução de comandos

4 $(command)

– captura o resultado da execução de um

comando e permite colocar em uma variável

  • resultado é uma string (saída do comando)
  • resultado não é estado de retorno

evitar forma antiga‘command’

#!/bin/sh

echo diretorio atual e’ $PSW echo usuario atual é $(wo)

exit 0 PSW variável de ambiente (não comando)

wo é comando e por isso leva ( )

TSW 59

Execução de comandos:

expansão aritmética

– alternativa ao comando expr

  • expr é lento pois invoca nova shell para execução da expressão

#!/bin/sh

x= while [ “$x” -ne 10 ]; do echo $x x=$(($x+1)) done

exit 0

TSW 60

expressões

Expressão Descrição

expr1 | expr

expr1 & expr

expr1 = expr

expr1 > expr

expr1 <= expr

expr1 < expr

expr1 <= expr

expr1 != expr

expr1 se^ expr1 não é zero, senão^ expr

zero se qualquer expr for zero, senão expr

igual

maior que

maior que ou igual

menor que

menor que ou igual

diferente

expr1 + expr

expr1 - expr

expr1 * expr

expr1 / expr

expr1 % expr

soma

subtração

multiplicação

divisão inteira

módulo

aritméticas

usadas em expr e em $(( … ))

TSW 61

Fim de programação usando shell

– vimos uma breve introdução ao potencial de

programação usando shell

– domínio dos recursos vem com a prática

  • muitos dos problemas de administração de um sistema UNIX podem ser facilmente resolvidos com programas shell aproveitando os recursos disponíveis