50
10/11/13 Shell Script Profissional shellscriptprofissional.blogspot.com.br 1/50 26th August A diferença entra metacaracteres e coringas do Shell Metacaractere é uma ferramenta que para pesquisa. Os caracteres coringa são aqueles utilizados na linha de comando e nas opções de comando o case (definição do autor do livro). [http://2.bp.blogspot.com/- rmZ7F3gWpeI/UhvBaowa4RI/AAAAAAAAA7Y/ncL1Qyh6wrw/s1600/graf.jpg] Início Classic Shell Script Profissi pesquisar

Vários scripts

Embed Size (px)

Citation preview

Page 1: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 1/50

26th August

A diferença entra metacaracteres e coringas do Shell

Metacaractere é uma ferramenta que para pesquisa.

Os caracteres coringa são aqueles utilizados na linha de comando e nas opções

de comando o case (definição do autor do livro).

[http://2.bp.blogspot.com/-

rmZ7F3gWpeI/UhvBaowa4RI/AAAAAAAAA7Y/ncL1Qyh6wrw/s1600/graf.jpg]

InícioClassic

…Shell Script Profissi pesquisar

Page 2: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 2/50

[http://4.bp.blogspot.com/-

_Jfbs3Dsy3A/UhvC8ui0gDI/AAAAAAAAA7k/tl4pqQ2MNcg/s1600/graf1.jpg]

grep root /etc/passwd Ressalta a palavra "root" em toda o texto.

grep r̂oot /etc/passwd Ressalta a palavra "root" no ínício de cada linha.

grep bash$ /etc/passwd Procura por "bash" ao final de cada linha.

grep ' $̂' /etc/passwd Procura por uma linha vazia.

POESIA: O que é uma linha em branco senão um começo de linha seguido de

um fim de linha?

grep 'user' /etc/passwd Procura por todos os usuário "user" do sistema.

grep '[lL]inus' /etc/passwd Procura por todos os usuários, perdão, Deuses do

sistema, chamados Linus, com letra maiúscula e minúscula.

grep ' [̂aeiou]' /etc/passwd Procura por todas a linhas iniciadas por vogais.

grep ' [̂bcdfghjklmnpqrstvxz]' /etc/passwd Procura por todas as linhas iniciadas

em consoante.

grep '[0-9]' /etc/passwd Pocura por números entre 0 e 9 no texto.

grep ' .̂[aeiou]' /etc/passwd Procura por qualquer caractere seguido de vogal

no início de cada linha.

grep ' .̂.........................$' /etc/passwd Procura por linhas com exatamente 26

caracteres. Ou:

grep ' .̂\{26\}$' /etc/passwd

grep -E ' .̂{26}$' /etc/passwd

egrep ' .̂{20,40}$' /etc/passwd Procura por linhas de 20 a 40 caracteres.

egrep ' .̂{40,}$' /etc/passwd Procura por linhas de 40 caracteres ou mais, é

um intervalo aberto.

egrep '[0-9]{3,}' /etc/passwd Procurar por números entre 0 e 9 com 3 ou

mais caracteres.

Reportar problemas

Page 3: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 3/50

egrep '[0-9]{3,}' /etc/passwd | cut -d : -f 1 Procura por números entre 0 e 9,

a partir de 3 caracteres e redirecionan a saída para o comando cut que vai

mostrar o que tem no primeiro campo até os dois pontos.

egrep ' [̂aeiou].*bash$' /etc/passwd Traz linhas iniciadas por vogal e

terminadas em "bash".

egrep ' (̂user1|user2|user3):' /etc/passwd Procura por linhas iniciadas por

"user1" ou "user2" ou "user3".

* O que há de errado nos gráficos? Piadinha interna. ; )

Postado há 26th August por bferreira_user

0 Add a comment

26th August

#!/bin/bash

# caixa.sh

# versão 2.0 | Pois foi modificado por mim para melhor funcionamento

# Encaixota um texto qualquer vindo da STDIN

#

# Usando caracteres de controle, primeiro desenha uma caixa:

# +------------------+

# | |

# | |

# +------------------+

#

Page 4: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 4/50

#

# Depois coloca o texto recebido via STDIN dentro dessa caixa:

# +-----------------------+

# | O texto |

# | recebido |

# +-----------------------+

#

# A separação do código em dois passos permite personalizar

# separadamente a caixa e o texto, podendo-se facilmente

# adicionar cores ou fazer outras formatações.

#

# Configuração do usuário

caixa_largura=60

caixa_coluna_inicio=10

caixa_linha_inicio=10

texto_max_linhas=20

distancia_borda_texto=1

caixa_cor='33;1'

texto_cor='32'

#caixa_cor='33;43' # descomente essa linha para uma surpresa!

#-----------------------------------------------------------------------------------

texto="Hoje eu

estou de

FOLGA e não vou trabalhar!"

# Daqui para baixo não mexa

### Configuração Dinâmica

caixa_largura=$(echo "$texto" | wc -L) # remendo feito por mim

caixa_coluna_fim=$(( caixa_coluna_inicio+caixa_largura-1))

texto_coluna_inicio=$((caixa_coluna_inicio+distancia_borda_texto+1))

texto_largura=$(( caixa_largura-distancia_borda_texto))

texto=$texto #$($texto fmt -sw $texto_largura)

num_linhas=$( echo "$texto" | wc -l)

Page 5: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 5/50

total_linhas=$(( num_linhas+2)) # texto + bordas horizontais

### Checagem do tamanho do texto

if [ $num_linhas -gt $texto_max_linhas ]; then

echo "Texto muito extenso, não vai caber na tela"

exit 1

fi

### Compõe a linha horizontal da caixa

# É $caixa_largura-2 porque os "cantos" serão feitos com o +

for i in $(seq $((caixa_largura-2))); do

linha_caixa="$linha_caixa-"

done

### Limpa a tela

echo -ne '\033c'

### Desenha a caixa

echo -ne "\033[$caixa_linha_inicio;0H" # pula para a linha inicial

echo -ne "\033[${caixa_cor}m" # liga a cor da caixa

for i in $(seq $total_linhas); do # para cada linha...

echo -ne "\033[${caixa_coluna_inicio}G" # vai p/coluna inicial

if [ $i -eq 1 -o $i -eq $total_linhas ]; then # 1a ou última linha

echo +$linha_caixa+ # borda horizontal

else # senão

echo -e "|\033[${caixa_coluna_fim}G|" # bordas verticais

fi

done

echo -e '\033[m' # desliga as cores

### Coloca o texto dentro da caixa

echo -ne "\033[$((caixa_linha_inicio+1));0H" # pula p/a linha inicial

echo -ne "\033[${texto_cor}m" # liga a cor do texto

echo "$texto" | while read LINHA; do # para cada linha...

echo -e "\033[${texto_coluna_inicio}G$LINHA" # posiciona e mostra

done

echo -e '\033[m'

echo

Postado há 26th August por bferreira_user

Page 6: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 6/50

0 Add a comment

25th August

#!/bin/bash

# gauge.sh

# Barra de usando caracteres de controle

#

# [................................................] 0%

# [########################........................] 50%

# [################################################] 100%

#

#

# Aurélio Marinho Jargas - Shell Script Profissional, pág. 124

#

# Compre o livro. É muito bom! ; )

#

# Script alterado de para a correta exibição no Terminal

#

# barra vazia

## o -n serve para não quebrar a linha no final

echo -n '[.................................................] '

passo='#####'

for i in 10 20 30 40 50 60 70 80 90 100; do

sleep 1

pos=$((i/2-5)) # calcula a posição atual da barra

echo -ne '\033[G' # vai para o começo da linha

echo -ne "\033[${pos}C" # vai para a posição atual da barra

echo -n "$passo" # preenche mais um passo

echo -ne '\033[53G' # vai para a posição da porcentagem

echo -n "$i%" # mostra a porcentagem

done

echo

Postado há 25th August por bferreira_user

Page 7: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 7/50

0 Add a comment

25th August

Bem amigos, já faz um bom tempo que eu não publico neste blog. Mas já não

era sem tempo!

Vou dar continuidade aos posts, mesmo que paulatinamente, só para deixar o

autor com raiva.

Eu nem me lembrava, mas me fugiram alguns scripts e comandos, bobagem:

echo -e '\033[31m MENSAGEM IMPORTANTE!!! \033[m'

echo -e o -e é o escape, ele interpreta os escapes especiais;

\033 é o ESC, o escape;

[31m deixa o texto com a cor vermelha;

\033[m é o final do comando, para que só este texto fique em vermelho.

echo -e '\033[31;1m MENSAGEM IMPORTANTE!!! \033[m'

Neste exemplo, apenas acrescentamos o 1 que serve para ativar a cor brilhante,

nada mais.

Comandos de Movimentação do Cursor

ESC[nA Move o cursor n linhas para cima, na mesma coluna.

ESC[nB Move o cursor n linhas para baixo, na mesma coluna.

ESC[nC Move o cursor n colunas para a direita, na mesma linha.

ESC[nD Move o cursor n colunas para a esquerda, na mesma linha.

ESC[nE Move o cursor n linhas para baixo, na coluna 1.

ESC[nF Move o cursor n linhas para cima, na coluna 1.

ESC[nG Move o cursor para a coluna n da linha atual.

ESC[n;mH Move o cursor para a coluna m da linha n.

Lembrando que ESC é o \033.

echo -e '\033c\033[HH\033[4;7H.C\033[3DD\033[AA\033[GF\nG\nE\033[7GB'

echo -e o -e é o escape, ele interpreta os escapes especiais;

\033c serve para limpar a tela, equivale ao ESC[2J;

Page 8: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 8/50

\033[HH coloca a letra "H" no canto superior à esquerda da tela;

\033[4;7H. coloca o "." na linha 4 e coluna 7;

C coloca o C após o ponto, não é um comando, é a letra "C" mesmo;

\033[3DD coloca a letra "D" na coluna 3 à esquerda na mesma linha;

\033[AA coloca a letra "A" um ponto acima na mesma coluna;

\033[GF sobe um ponto na coluna 1 e coloca um "G" lá;

\nG\nE o \n desce linhas e coloca as letras "G" e "E" lá;

\033[7GB pula para a coluna 7 (7G é o comando) e coloca a letra "B".

Postado há 25th August por bferreira_user

0 Add a comment

11th January

#!/bin/bash

# como o mestre gostava:

# echo imprime o texto na tela do terminal

# -e faz o terminal interpretar o código

# \033[m é o Esc octal

# Bruna Ferreira é o meu nome :)

# executei isso num terminal de fundo preto e texto cinza brilhante (branco bold)

echo -e '\n'Opções de texto:'\n'

echo -e '\033[0mTexto normal sem cores\033[m'

echo -e '\033[1mCor brilhante\033[m'

echo -e '\033[30mTexto preto ou cinza (cinza com ;1)\033[m'

echo -e '\033[31mTexto vermelho\033[m'

Page 9: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 9/50

echo -e '\033[32mBruna Ferreira\033[m'

echo -e '\033[33mTexto marrom ou amarelo (amarelo com ;1)\033[m'

echo -e '\033[34mTexto azul\033[m'

echo -e '\033[35mTexto roxo\033[m'

echo -e '\033[036mTexto ciano\033[m'

echo -e '\033[37mTexto cinza ou branco (branco com ;1)\033[m'

echo -e '\n\033[35;1m***** Shell Script *****\033[m'

echo -e '\n'Opções de fundo:'\n'

echo -e '\033[5mO texto pisca (ou deveria)\033[m'

echo -e '\033[7mVideo inverso (invertido)\033[m'

echo -e '\033[40mFundo preto ou cinza\033[m'

echo -e '\033[41mFundo vermelho\033[m'

echo -e '\033[42mFundo verde\033[m'

echo -e '\033[43mFundo marrom ou amarelo\033[m'

echo -e '\033[44mFundo azul\033[m'

echo -e '\033[45mFundo roxo\033[m'

echo -e '\033[46mFundo ciano\033[m'

echo -e '\033[47mFundo cinza ou branco\033[m'

Postado há 11th January por bferreira_user

0 Add a comment

11th November 2012

Page 10: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 10/50

#!/bin/bash

# DEBUG CATEGORIZADO

# debug-categorizado.sh

# Exemplo de Debug categorizado em três níveis

# Se eu estiver errada, me corrijam: [email protected]

DEBUG=${1:-0} # passe o nível pelo $1

# Lembrando que $1 é a posição na linha de comando,

# temos ./debug-categorizado.sh ($0) 1 ($1)

Debug(){

[ $1 -le $DEBUG ] && echo "--- DEBUG $*" # -le significa menor ou igual

}

Debug 1 "Início do Programa"

i=0

max=5

echo "Contando até $max"

Debug 2 "Vou entrar no WHILE"

while [ $i -ne $max ]; do

Debug 3 "Valor de \$i antes de incrementar: $i"

let i=$i+1

Debug 3 "Valor de \$i depois de incrementar: $i"

echo "$i..."

done

Debug 2 "Sai do WHILE"

echo 'Terminei! '

Debug 1 "Fim do Programa"

Page 11: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 11/50

# PARA VER SE FUNCIONA, EXECUTE 'bash debug-categorizado.sh n'

# ONDE n PODE SER UM NÚMERO (DE DEBUG) DE 1 À 3

# Detalhe: eu não vou perder meu tempo explicando muito esses códigos de

depuração,

# eles só servem de exemplo para testar os scripts e detectar erros.

# Dá para se virar com os echos da vida.

# Para novos alunos das aulas de Sistemas Operacionais o quê interessa

mesmo é

# mexer com o sistema.

# Será que eu ainda me aventuro pelas faculdades? Vou esperar pra ver no

quê dá.

Postado há 11th November 2012 por bferreira_user

0 Add a comment

11th November 2012

#!/bin/bash

# DEBUG PERSONALIZADO

# grita.sh

# Mostra uma palavra ($TXT) em maiúsculas e com exclamações

# Exemplo: foo -> !!!!!FOO!!!!!

# Aqui o nosso salvador, Aurélio Marinho, usa uma função Debug()

# para depurar o código (emitir menságens de erro em caso de erro).

DEBUG=1 # depuração: 0 desliga, 1 liga

# Função de depuração

Debug(){

[ "$DEBUG" = 1 ] && echo "----------{ $*" # poderia ser uma msg colorida

}

#Debug(){

# [ "$DEBUG" = 1 ] && echo -e "\033[33;1m$*\033[m"

#}

Page 12: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 12/50

TXT="gritaria"

TXT=" $TXT " # Adiciona 5 espaços ao redor

Debug "TXT com espaços : $TXT"

TXT=$(echo $TXT | tr ' ' '! ') # Troca os espaços por exclamações

Debug "TXT com exclamações: [$TXT]"

TXT=$(echo $TXT | tr a-z A-Z) # Deixa o texto em maiúsculas

echo "$TXT"

Postado há 11th November 2012 por bferreira_user

0 Add a comment

11th November 2012

#!/bin/bash

# DEBUG SETORIZADO

# EXECUÇÃO PASSO A PASSO

# cinco2.sh

# Conta até cinco :)

# Dê 'Enter' para que a execução continue

# Não funciona no Bourne Shell (sh), recado do autor :)

echo $((0+1))

echo $((0+2))

trap read DEBUG # liga o passo a passo

echo $((0+3))

trap '' DEBUG # desliga o passo a passo

Page 13: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 13/50

echo $((0+4))

echo $((0+5))

Postado há 11th November 2012 por bferreira_user

0 Add a comment

11th November 2012

#!/bin/bash

# DEBUG SETORIZADO

# Estou quase desistindo, já faz tempo que eu não faço nada de útil,

# mas eu vou postar, mesmo que de vez em quando, para usar isso no futuro.

# Um dia eu vou seguir em frente.

# Usamos 'set -x' e 'set +x' para ligar e desligar o modo depuração de comandos

# Usamos 'set -v' e 'set +v' para ligar e desligar o modo depuração de linhas

# cinco.sh

# Conta até cinco :)

echo $((0+1))

echo $((0+2))

set -xv # liga o debug

echo $((0+3))

set +xv # desliga o debug

echo $((0+4))

echo $((0+5))

# a linha tem prioridade sobre o comando

Page 14: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 14/50

Postado há 11th November 2012 por bferreira_user

0 Add a comment

17th October 2012

#!/bin/bash

# cinco.sh

# Conta até cinco :)

# MAIS UM EXEMPLO DE DEBUG, NÃO BRIGUE COMIGO E COMPRE O LIVRO

echo $((0+1))

echo $((0+2))

echo $((0+3))

echo $((0+4))

echo $((0+5))

# Primeiro execute bash cinco.sh sem depuração

# Agora mais uma vez bash -x cinco.sh mostra os comandos

# Agora bash -v cinco.sh mostra as linhas do código (com a execução)

# Use as duas opções juntas bash -xv cinco.sh o -v tem prioridade

Postado há 17th October 2012 por bferreira_user

0 Add a comment

Page 15: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 15/50

17th October 2012

#!/bin/bash

# exemplo-aspas.sh

TXT=' um dois três '

echo $TXT # ocorre limpeza na variável pelo shell

echo "$TXT" # o valor aparece tal como foi atribuído

echo '$TXT' # não mostra o conteúdo da variável, use áspas duplas :)

Postado há 17th October 2012 por bferreira_user

0 Add a comment

17th October 2012

#!/bin/bash

# grita4.sh

# Mostra uma palavra ($TXT) em maiúsculas e com exclamações

# Exemplo: foo -> !!!!!FOO!!!!!

# CAPÍTULO 5 - DEPURAÇÃO (DEBUG)

# DEBUG GLOBAL (-X, -V)

TXT="gritaria"

TXT=" $TXT " # Adiciona 5 espaços ao redor

TXT=$(echo "$TXT" | tr ' ' '! ') # Troca os espaços por exclamações ÁSPAS

Page 16: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 16/50

TXT=$(echo "$TXT" | tr a-z A-Z) # Deixa o texto em maiúsculas ÁSPAS

echo "$TXT" # Mostra a mensagem

# Agora deu certo!

Postado há 17th October 2012 por bferreira_user

0 Add a comment

17th October 2012

#!/bin/bash

# grita3.sh

# Mostra uma palavra ($TXT) em maiúsculas e com exclamações

# Exemplo: foo -> !!!!!FOO!!!!!

# CAPÍTULO 5 - DEPURAÇÃO (DEBUG)

# DEBUG GLOBAL (-X, -V)

TXT="gritaria"

TXT=" $TXT "

echo $TXT | tr ' ' '! ' # é, nada ainda...

echo $TXT # cadê os espaços

echo "$TXT" # ah!!! malditas áspas!

echo "$TXT" | tr ' ' '! ' # foi

# Sem as áspas DUPLAS ao redor da variável o shell limpa seu conteúdo,

# o excesso de espaços é eliminado

Page 17: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 17/50

Postado há 17th October 2012 por bferreira_user

0 Add a comment

17th October 2012

#!/bin/bash

# grita2.sh

# Mostra uma palavra ($TXT) em maiúsculas e com exclamações

# Exemplo: foo -> !!!!!FOO!!!!!

# CAPÍTULO 5 - DEPURAÇÃO (DEBUG)

# DEBUG GLOBAL (-X, -V)

TXT="gritaria"

TXT=" $TXT " # Adiciona 5 espaços ao redor O PROBLEMA ESTÁ AQUI

echo "TXT com espaços : [$TXT]" # --> mostra se os espaços foram

adicionados à $TXT

TXT=$(echo $TXT | tr ' ' '! ') # Troca os espaços por exclamações

echo "TXT com exclamaçẽos : [$TXT]" # --> mostra se as exclamações

aparecem em lugar de espaços

TXT=$(echo $TXT | tr a-z A-Z) # Deixa o texto em maiúsculas

echo "$TXT" # Mostra a mensagem

# Ao final notamos que o problema está em trocar os espaços por exclamaçẽos

# Executando "bash -x grita2.sh" podemos ver o que acontece a cada comando

# Se há vários comando unidos por pipe ou agrupados em um subshell vemos

# sinais de "+", quanto mais fundo, mais sinais.

# Descobrimos que antes no primeiro tr não foi possível

Page 18: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 18/50

# adicionar espaços em branco ao redor de $TXT

Postado há 17th October 2012 por bferreira_user

0 Add a comment

17th October 2012

#!/bin/bash

# grita1.sh

# Mostra uma palavra ($TXT) em maiúsculas e com exclamações

# Exemplo: foo -> !!!!!FOO!!!!!

# CAPÍTULO 5 - DEPURAÇÃO (DEBUG)

# DEBUG SIMPLES (ECHO)

TXT="gritaria"

TXT=" $TXT " # Adiciona 5 espaços ao redor

echo "TXT com espaços : [$TXT]" # --> mostra se os espaços foram

adicionados à $TXT

TXT=$(echo $TXT | tr ' ' '! ') # Troca os espaços por exclamações

echo "TXT com exclamaçẽos : [$TXT]" # --> mostra se as exclamações

aparecem em lugar de espaços

TXT=$(echo $TXT | tr a-z A-Z) # Deixa o texto em maiúsculas

echo "$TXT" # Mostra a mensagem

# Ao final notamos que o problema está em trocar os espaços por exclamações

Postado há 17th October 2012 por bferreira_user

Page 19: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 19/50

0 Add a comment

17th October 2012

#!/bin/bash

# grita.sh

# Mostra uma palavra ($TXT) em maiúsculas e com exclamações

# Exemplo: foo -> !!!!!FOO!!!!!

# CAPÍTULO 5 - DEPURAÇÃO (DEBUG)

TXT="gritaria"

TXT=" $TXT " # Adiciona 5 espaços ao redor

TXT=$(echo $TXT | tr ' ' '! ') # Troca os espaços por exclamações

TXT=$(echo $TXT | tr a-z A-Z) # Deixa o texto em maiúsculas

echo "$TXT" # Mostra a mensagem

# Após a execução o resultado obtido não foi o esperado

# O resultado foi "GRITARIA", sem as exclamações

# Segue a primeira técnica de depuração (debug):

# É a Verificação de sintaxe (-n)

# execute "bash -n grita.sh" (sem áspas), o -n é uma opção

# de linha de comando do shell que serve para testar se há

# erros de sintaxe no código (como no gcc).

# Neste caso não há erros de sintaxe

Postado há 17th October 2012 por bferreira_user

0 Add a comment

Page 20: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 20/50

5th October 2012

#!/bin/bash

#usuarios-7-getopts.sh

# Mostra os logins e nomes de usuários do sistema

# Obs.: Lê dados do arquivo /etc/passwd

# Versão 1: Mostra usuários e nomes separados por TAB

# Versão 2: Adicionado suporte à opção -h

# Versão 3: Adicionando suporte à opção -V e opções inválidas

# Versão 4: Arrumando bug quando não tem opções, basename no

# nome do programa, -V extraindo direto dos cabeçalhos,

# adicionadas opções --help e --version

# Versão 5: Adicionadas as opções -s e --sort

# Versão 6: Adicionando opções -r, --reverse, -u, --uppercase,

# leitura de múltiplas opções (loop)

# Versão 7: Melhorias no código para que fique mais legível,

# adicionadas opções -d e --delimiter

# Versão 7: Modificada para usar o getopts

# Aurélio Marinho Jargas, Novembro de 2007

ordenar=0

inverter=0

maiusculas=0

delim='\t'

MENSAGEM_USO="

USO $(basename "$0") [OPÇÕES]

OPÇÕES:

-d C Usa o caractere C como delimitador

-r Inverte a listagem

-s Ordena a listagem alfabeticamente

-u Mostra a listagem em maiúsculas

-h Mostra esta tela de ajuda e sai

-V Mostra a versão do programa e sai

Page 21: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 21/50

"

# Tratamento das opções de linha de comando

# NESTA ORDEM: : liga o modo silencioso, hVd são as opções, : opção com

# argumentos, rsu são os argumentos que podem ser usados juntos

while getopts ":hVd:rsu" opcao

do

case "$opcao" in

# Opções que ligam/desligam chaves

s) ordenar=1 ;;

r) reverse=1 ;;

u) maiusculas=1 ;;

d)

delim="$OPTARG"

# Desta forma o caractere delimitador recebe a última coisa que foi

# digitada no bash, caractere ou o espaço vazio

;;

h)

echo "$MENSAGEM_USO"

exit 0

;;

V)

echo -n $(basename "$0")

# Extrai a versão diretamente dos cabeçalhos do programa

grep ' #̂ Versão ' "$0" | tail -1 | cut -d : -f 1 | tr -d \#

exit 0

;;

\?)

echo Opção inválida: $OPTARG

exit 1

;;

Page 22: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 22/50

:) # não é só um rostinho feliz, é a possibilidade de erro

echo Faltou argumento para: $OPTARG

exit 1

;;

esac # não é um judeu, é o fechamento do bloco case

done

# Extrai a listagem

lista=$(cut -d : -f 1,5 /etc/passwd)

# Ordena, inverte ou converte para maiúsculas (se necessário)

test "$ordenar" = 1 && lista=$(echo "$lista" | sort)

test "$inverter" = 1 && lista=$(echo "$lista" | tac)

test "$maiusculas" = 1 && lista=$(echo "$lista" | tr a-z A-Z)

# Mostra o resultado para o usuários

echo "$lista" | tr : "$delim"

# Deve-se executar no bash como teste: ./usuarios-7-getopts.sh -V

# ./usuarios-7-getopts.sh -h

# ./usuarios-7-getopts.sh -sru

# ./usuarios-7-getopts.sh -sru -d ,

# ./usuarios-7-getopts.sh -d

# ./usuarios-7-getopts.sh -d qualquercoisa <não me respnsabilizo>

Postado há 5th October 2012 por bferreira_user

0 Add a comment

5th October 2012

#!/bin/bash

# getopts-teste.sh

# Aurélio Marinho Jargas, Novembro de 2007

Page 23: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 23/50

# O getopts é um comando interno (builtin) do bash

# que serve para processar opções de linha de comando,

# ele identifica e extrai cada opção informada, além de

# fazer as duas verificações básicas de erro: quando o

# usuário digita uma opção inválida e quando uma opção

# vem sem um argumento obrigatório.

# NOTA: O GETOPTS SÓ FUNCIONA NO BASH E COM OPÇÕES CURTAS

# (EX.: -s EM LUGAR DE --sort)

# Loop que processa todas as opções da linha de comando.

# Atenção ao formato das opções válidas ":sa:"

# - Os dois-pontos do início ligam o modo silencioso

# - As opções válidas são 'sa:', que são -s e -a

# - Os dois-pontos de 'a:' representam um argumento: -a FOO

# NOTA: MODO SILENCIOSO SERVE PARA OMITIR MENSAGENS DE ERRO,

# ASSIM ELAS NÃO APARECEM NA TELA DO BASH

while getopts ":sa:" opcao

do

# $opcao guarda a opção da vez (ou ? e : em caso de erro)

# $OPTARG guarda o argumento da opção (se houver)

# NOTA: O $OPTARG É UMA VARIÁVEL DE AMBIENTE QUE GUARDA O

# ARGUMENTO DA OPÇÃO ATUAL (INSISTO, SE HOUVER)

case $opcao in

s) echo "OK Opção simples (-s)";;

a) echo "Ok Opção com argumento (-a), recebeu: $OPTARG";;

\?) echo "Erro Opção inválida: $OPTARG";;

:) echo "Erro Faltou argumento para: $OPTARG";;

esac

done

# O loop termina quando nenhuma opção for encontrada.

# Mas ainda podem existir argumentos, como um nome de arquivo.

# A variável $OPTIND guarda o índice do resto da linha de

# comando, útil para arrancar as opções já processadas.

# NOTA: $OPTIND É MAIS UMA VARIÁVEL DE AMBIENTE, SERVE

# PARA GUARDAR O ÍNDICE (POSIÇÃO NUMERADA) DO RESTO (FINAL) DA

LINHA

# DE COMANDO (NÃO-OPÇÕES, ESPAÇO VAZIO)

# DESTA FORMA - POSIÇÃO 1 './getopts-teste.sh' POSIÇÃO 2 ' '

# POR ISSO QUE SE FAZ O ÍNDICE MENOS UM

Page 24: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 24/50

echo

shift $((OPTIND - 1))

echo "íNDICE: $OPTIND"

echo "RESTO: $*"

echo

# NOTA: EXECUTE NO BASH

# ./getopts-teste.sh -a FOO -s /etc/passwd

# ./getopts-teste.sh /etc/passwd

# ./getopts-teste.sh

# ./getopts-teste.sh -a

# ./getopts-teste.sh -a qualquercoisa

# ./getopts-teste.sh -s

# ./getopts-teste.sh -s qualquercoisa

# índice 4 e resto /etc/passwd

# índice 1 e resto /etc/passwd

# índice 1 e resto vazio

# índice 2 e resto vazio

# índice 3 e resto vazio

# índice 2 e resto vazio

# índice 2 e resto qualquercoisa

# NOTA: OBSERVE AS MENSAGENS

Postado há 5th October 2012 por bferreira_user

0 Add a comment

4th October 2012

Os scripts que eu venho postando são do livro Shell Script Profissional do autor

Aurelio Marinho Jargas. Livro muito recomendado por professores de todo o

país.

Vale mesmo a pena comprar o livro e conferir a elaboração dos scripts passo-a-

passo.

Segue o link para o site oficial:

Page 25: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 25/50

http://www.shellscript.com.br/ [http://www.shellscript.com.br/]

[http://3.bp.blogspot.com/-

th7dPH3RoAY/UG235DBPFEI/AAAAAAAAATk/Q5DwGJU-AxM/s1600/capa.jpg]

Postado há 4th October 2012 por bferreira_user

0 Add a comment

4th October 2012

#!/bin/bash

# usuarios.sh

# Mostra os logins e nomes de usuários do sistema

# Obs.: Lê dados do arquivo /etc/passwd

# Aurélio, Novembro de 2007

# Versão 1: Mostra usuários e nomes separados por TAB

# Versão 2: Adicionado suporte à opção -h

# Versão 3: Adicionando suporte à opção -V e opções inválidas

# Versão 4: Arrumando bug quando não tem opções, basename no

# nome do programa, -V extraindo direto dos cabeçalhos,

# adicionadas opções --help e --version

Page 26: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 26/50

# Versão 5: Adicionadas as opções -s e --sort

# Versão 6: Adicionando opções -r, --reverse, -u, --uppercase,

# leitura de múltiplas opções (loop)

# Versão 7: Melhorias no código para que fique mais legível,

# adicionadas opções -d e --delimiter

# DIGITE ./usuariosv2.sh -h NA TELA DO TERMINAL PARA RODAR E

CONFERIR O RESULTADO

# OS COLCHETES INDICAM QUE O USO DE -h É OPCIONAL

# O COMANDO basename SERVE PARA ELIMINAR O PATH DO NOME DO

PROGRAMA

ordenar=0 # a saída deverá ser ordenada?

inverter=0 # a saída deverá ser invertida?

maiusculas=0 # a saída deverá ser em maiúsculas?

delim='\t' # caractere usado como delimitador de saída

MENSAGEM_USO="

Uso: $(basename "$0") [ OPÇÕES ]

-d --delimiter C Usa o caractere C como delimitador

-s --sort Ordena a listagem alfabeticamente

-r --reverse Inverte a listagem

-h --help Mostra esta tela de ajuda e sai

-V --version Mostra a versão do programa e sai

-u --uppercase Mostra a listagem em maiúsculas

"

# Tratamento das opções de linha de comando

# nome do programa estando na posição $0 e $1 sendo o switch na execução

em terminal

while test -n "$1"

do

case "$1" in

-s | --sort) ordenar=1 ;;

-r | --reverse) inverter=1 ;;

-u | --uppercase) maiusculas=1 ;;

# não pode ser executado com -s, -r ou -u por causa do exit 0

# se eu retirar as saídas 'exit 0' ou 'exit 1' o script continua a execução (óbvio

Page 27: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 27/50

¬¬)

# executa-se em terminal "./usuariosv5.sh -u -s -r" se eu colocar um -V não vai

funcionar

-d | --delimiter)

shift

delim="$1"

if test -z "$delim"

then

echo "Faltou o argumento para a -d"

exit 1

fi

;;

-h | --help)

echo "$MENSAGEM_USO"

exit 0

;;

# não pode ser executado com -s, -r ou -u por causa do exit 0

-V | --version)

echo -n "$(basename "$0")" # não coma comparadores de string, por favor

# Extrai a versão diretamente dos cabeçalhos do programa

grep ' #̂ Versão ' "$0" | tail -1 | cut -d : -f 1 | tr -d \#

exit 0

;;

# não pode ser executado com -s, -r ou -u por causa do exit 1

*)

if test -n "$1" # testa se a 'string' (variável) não é nula (espaço em branco)

then

echo "Opção inválida: $1"

exit 1

Page 28: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 28/50

fi

;;

esac

# Opção $1 já processada, a fila deve andar SHIFT

shift

done

# Extrai a listagem

lista=$(cut -d : -f 1,5 /etc/passwd)

# Ordena a listagem (se necessário)

test "$ordenar" = 1 && lista=$(echo "$lista" | sort)

# Inverte a listagem (se mecessário)

test "$inverter" = 1 && lista=$(echo "$lista" | tac)

# Converte para maiúsculas (se necessário)

test "$maiusculas" = 1 && lista=$(echo "$lista" | tr a-z A-Z)

# desta forma, << ./usuariosv7.sh -d , >>, passando a vírgula como argumento

de -d, haverá a troca de ":" por ","

# poderia ser outro caractere

# lá em cima a variável 'delim' recebe o '\t' para que em caso de se executar

# o script sem switches (sem o -d +argumento) haja a substituição de ':' por

tabulação (espaço em branco)

# Mostra o resultado para o usuários

echo "$lista" | tr : "$delim"

exit

Postado há 4th October 2012 por bferreira_user

0 Add a comment

Page 29: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 29/50

4th October 2012

#!/bin/bash

# usuariosv6.sh

# Mostra os logins e nomes de usuários do sistema

# Obs.: Lê dados do arquivo /etc/passwd

# Aurélio, Novembro de 2007

# Versão 1: Mostra usuários e nomes separados por TAB

# Versão 2: Adicionado suporte à opção -h

# Versão 3: Adicionando suporte à opção -V e opções inválidas

# Versão 4: Arrumando bug quando não tem opções, basename no

# nome do programa, -V extraindo direto dos cabeçalhos,

# adicionadas opções --help e --version

# Versão 5: Adicionadas as opções -s e --sort

# Versão 6: Adicionando opções -r, --reverse, -u, --uppercase,

# leitura de múltiplas opções (loop)

# DIGITE ./usuariosv2.sh -h NA TELA DO TERMINAL PARA RODAR E

CONFERIR O RESULTADO

# OS COLCHETES INDICAM QUE O USO DE -h É OPCIONAL

# O COMANDO basename SERVE PARA ELIMINAR O PATH DO NOME DO

PROGRAMA

ordenar=0 # a saída deverá ser ordenada?

inverter=0 # a saída deverá ser invertida?

maiusculas=0 # a saída deverá ser em maiúsculas?

MENSAGEM_USO="

Uso: $(basename "$0") [ -s | -r | -h | -V | -u ]

-s Ordena a listagem alfabeticamente

-r Inverte a listagem

-h Mostra esta tela de ajuda e sai

-V Mostra a versão do programa e sai

-u Mostra a listagem em maiúsculas

"

# Tratamento das opções de linha de comando

Page 30: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 30/50

# nome do programa estando na posição $0 e $1 sendo o switch na execução

em terminal

while test -n "$1"

do

case "$1" in

-s | --sort)

ordenar=1

;;

-r | --reverse)

inverter=1

;;

# não pode ser executado com -s, -r ou -u por causa do exit 0

# se eu retirar as saídas 'exit 0' ou 'exit 1' o script continua a execução (óbvio

¬¬)

# executa-se em terminal "./usuariosv6.sh -u -s -r" se eu colocar um -V não vai

funcionar

-h | --help)

echo "$MENSAGEM_USO"

exit 0

;;

-u | --uppercase)

maiusculas=1

;;

# não pode ser executado com -s, -r ou -u por causa do exit 0

-V | --version)

echo -n "$(basename "$0")" # não coma switches, por favor

# Extrai a versão diretamente dos cabeçalhos do programa

Page 31: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 31/50

grep ' #̂ Versão ' "$0" | tail -1 | cut -d : -f 1 | tr -d \#

exit 0

;;

# não pode ser executado com -s, -r ou -u por causa do exit 1

*)

if test -n "$1" # testa se a 'string' (variável) não é nula (espaço em branco)

then

echo "Opção inválida: $1"

exit 1

fi

;;

esac

# Opção $1 já processada, a fila deve andar SHIFT

shift

done

# Extrai a listagem

lista=$(cut -d : -f 1,5 /etc/passwd)

# Ordena a listagem (se necessário)

if test "$ordenar" = 1

then

lista=$(echo "$lista" | sort)

fi

# Inverte a listagem (se mecessário)

if test "$inverter" = 1

then

Page 32: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 32/50

lista=$(echo "$lista" | tac)

fi

# Converte para maiúsculas (se necessário)

if test "$maiusculas" = 1

then

lista=$(echo "$lista" | tr a-z A-Z)

fi

# Mostra o resultado para o usuários

echo "$lista" | tr : \\t | tr -d , # adicionado o "| tr -d , " para retirar as vírgulas

exit

Postado há 4th October 2012 por bferreira_user

0 Add a comment

4th October 2012

#!/bin/bash

# usuariosv4.sh

# Mostra os logins e nomes de usuários do sistema

# Obs.: Lê dados do arquivo /etc/passwd

# Aurélio, Novembro de 2007

# Versão 1: Mostra usuários e nomes separados por TAB

# Versão 2: Adicionado suporte à opção -h

# Versão 3: Adicionando suporte à opção -V e opções inválidas

# Versão 4: Arrumando bug quando não tem opções, basename no

Page 33: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 33/50

# nome do programa, -V extraindo direto dos cabeçalhos,

# adicionadas opções --help e --version

# Versão 5: Adicionadas as opções -s e --sort

ordenar=0 # a saída deverá ser ordenada?

inverter=0 # a saída deverá ser invertida?

maiusculas=0 # a saída deverá ser em maiúsculas?

MENSAGEM_USO="

Uso: $(basename "$0") [ -s | -h | -V ]

-s Ordena a listagem alfabeticamente

-h Mostra esta tela de ajuda e sai

-V Mostra a versão do programa e sai

"

# Tratamento das opções de linha de comando

# nome do programa estando na posição $0 e $1 sendo o switch na execução

em terminal

while test -n "$1"

do

case "$1" in

-s | --sort)

ordenar=1

;;

-h | --help)

echo "$MENSAGEM_USO"

exit 0

;;

-V | --version)

echo -n "$(basename "$0")" # não coma comparadores de strings, por favor

# Extrai a versão diretamente dos cabeçalhos do programa

grep ' #̂ Versão ' "$0" | tail -1 | cut -d : -f 1 | tr -d \#

exit 0

;;

Page 34: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 34/50

# não pode ser executado com -s, -r ou -u por causa do exit 1

*)

if test -n "$1" # testa se a 'string' (variável) não é nula (espaço em branco)

then

echo "Opção inválida: $1"

exit 1

fi

;;

esac

# Opção $1 já processada, a fila deve andar SHIFT

shift

done

# Extrai a listagem

lista=$(cut -d : -f 1,5 /etc/passwd)

# Ordena a listagem (se necessário)

if test "$ordenar" = 1

then

lista=$(echo "$lista" | sort)

fi

# Mostra o resultado para o usuários

echo "$lista" | tr : \\t | tr -d , # adicionado o "| tr -d ," para retirar as vírgulas

exit

Postado há 4th October 2012 por bferreira_user

Page 35: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 35/50

0 Add a comment

4th October 2012

#!/bin/bash

# usuariosv4.sh

# Mostra os logins e nomes de usuários do sistema

# Obs.: Lê dados do arquivo /etc/passwd

# Aurélio, Novembro de 2007

# Versão 1: Mostra usuários e nomes separados por TAB

# Versão 2: Adicionado suporte à opção -h

# Versão 3: Adicionando suporte à opção -V e opções inválidas

# Versão 4: Arrumando bug quando não tem opções, basename no

# nome do programa, -V extraindo direto dos cabeçalhos,

# adicionadas opções --help e --version

MENSAGEM_USO="

Uso: $(basename "$0") [-h | -V]

-h Mostra esta tela de ajuda e sai

-V Mostra a versão do programa e sai

"

# Tratamento das opções de linha de comando

# nome do programa estando na posição $0 e $1 sendo o switch na execução

em terminal

case "$1" in

-h | --help)

echo "$MENSAGEM_USO"

exit 0

;;

-V | --version)

Page 36: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 36/50

echo -n "$(basename "$0")"

# Extrai a versão diretamente dos cabeçalhos do programa

grep ' #̂ Versão ' "$0" | tail -1 | cut -d : -f 1 | tr -d \#

exit 0

;;

*)

if test -n "$1" # testa se a 'string' (variável) não é nula (espaço em branco)

then

echo "Opção inválida: $1"

exit 1

fi

;;

esac

# Processamento

cut -d : -f 1,5 /etc/passwd | tr : \\t

# grep ' #̂ Versão ' usuariosv4.sh --> vai procurar em 'usuariosv3.sh' todas as

linhas iniciadas por '# Versão'

# grep ' #̂ Versão ' usuariosv4.sh | tail -1 --> o 'tail -1' vai mostrar a primeira linha

de baixo pra cima

# grep ' #̂ Versão ' usuariosv4.sh | tail -1 | cut -d : -f 1 --> vai delimitar, por

campo, com a opção '-d',

# usando ':' como caractere delimitador e, '-f' determina a

posição

# grep ' #̂ Versão ' usuariosv3.sh | tail -1 | cut -d : -f 1 | tr -d \# --> elimina o

caratere '#' da saída padrão,

# NOTA: SE FOR EXECUTADO O PROGRAMA DESTA FORMA './usuariosv4.sh

#' O TERMINAL NÃO CONSIDERA '#' COMO

# UMA OPÇÃO INVÁLIDA, OU SEJA, ELE O CONSIDERA COMO SE FOSSE

UMA VARIÁVEL NULA, UM ESPAÇO EM BRANCO

Postado há 4th October 2012 por bferreira_user

0 Add a comment

Page 37: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 37/50

4th October 2012

#!/bin/bash

#usuariosv3.sh

# Mostra os logins e nomes de usuários do sistema

# Obs.: Lê dados do arquivo /etc/passwd

# Aurélio, Novembro de 2007

# Versão 1: Mostra usuários e nomes separados por TAB

# Versão 2: Adicionado suporte à opção -h

# Versão 3: Adicionando suporte à opção -V e opções inválidas

# OS COLCHETES INDICAM QUE O USO DE -h É OPCIONAL

# O COMANDO basename SERVE PARA ELIMINAR O PATH DO NOME DO

PROGRAMA

MENSAGEM_USO="

Uso: $(basename "$0") [-h | -V]

-h Mostra esta tela de ajuda e sai

-V Mostra a versão do programa e sai

"

# Tratamento das opções de linha de comando

# nome do programa estando na posição $0 e $1 sendo o switch na execução

em terminal

case "$1" in

-h | --help)

echo "$MENSAGEM_USO"

exit 0

;;

-V | --version)

echo "$(basename "$0") Versão 3"

exit 0

;;

Page 38: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 38/50

# avaliação de switch inválido

*)

echo "Opção inválida: $1"

exit 1

;;

esac

# Processamento

cut -d : -f 1,5 /etc/passwd | tr : \\t

Postado há 4th October 2012 por bferreira_user

0 Add a comment

4th October 2012

#!/bin/bash

# usuariosv2.sh

# Mostra os logins e nomes de usuários do sistema

# Obs.: Lê dados do arquivo /etc/passwd

# Aurélio, Novembro de 2007

# Versão 2

ajuda="

Menu: $(basename "$0") [-h | -V]

-h exibe este menu

-V exibe a versão do script

"

case "$1" in

-h | --help)

Page 39: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 39/50

echo "$ajuda"

exit 0

;;

-V | --version)

echo -n "$(basename "$0")"

grep ' #̂ Versão ' "$0" | tr -d \#

exit 0

;;

*)

if test -n "$1"

then

echo "Switch inválido: $1"

exit 1

fi

;;

esac

cut -d : -f 1,5 /etc/passwd | tr : \\t

Postado há 4th October 2012 por bferreira_user

0 Add a comment

4th October 2012

#!/bin/bash

#usuarios.sh

# Mostra os logins e nomes de usuários do sistema

# Obs.: Lê dados do arquivo /etc/passwd

# Aurélio, Novembro de 2007

# Versão 1: Mostra usuários e nomes separados por TAB

Page 40: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 40/50

# DIGITE ./usuarios.sh -h NA TELA DO TERMINAL PARA RODAR E CONFERIR

O RESULTADO

# SE FOSSE PASSADA A OPÇÃO -x COMO PARÂMETRO O PROGRAMA

IGNORARIA A MENSAGEM E

# CONTINUARIA A EXECUTAR

# OS COLCHETES INDICAM QUE O USO DE -h É OPCIONAL

MENSAGEM_USO="

Uso: $0 [-h]

-h Mostra esta tela de ajuda e sai

"

# Tratamento das opções de linha de comando

if test "$1" = "-h"

then

echo "$MENSAGEM_USO"

exit 0

fi

# Processamento

cut -d : -f 1,5 /etc/passwd | tr : \\t

Postado há 4th October 2012 por bferreira_user

0 Add a comment

4th October 2012

#!/bin/bash

# multiplicacao.sh

# Versão 1.0

Page 41: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 41/50

# 1 - Faça um programa que receba 2 valores de entrada e multiplique-os,

depois

# faça com o que o programa receba outro valor e divida o resultado da

multiplicação por esse valor.

ajuda="

Menu: $(basename "$0") [-h | -V]

-h exibe este menu.

-V exibe a versão do script

"

case "$1" in

-h | --help)

echo "$ajuda"

exit 0

;;

-V | --version)

echo -n "$(basename "$0")"

grep ' #̂ Versão ' "$0" | tr -d \#

exit 0

;;

*)

if test -n "$1"

then

echo "Switch inválido: $1"

exit 1

fi

;;

esac

echo "Digite os valores para multiplicação"

echo "Digite o primeiro valor"

Page 42: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 42/50

read a

echo "Digite o segundo valor"

read b

resultado1=$((a * b))

echo "Digite o dividendo"

read dividendo

resultado2=$((resultado1/dividendo))

echo "O resultado da divisão da multiplicação de $a por $b é $resultado2"

exit

Postado há 4th October 2012 por bferreira_user

0 Add a comment

4th October 2012

#!/bin/bash

# dados2.sh

# 2 - Faça um Programa que receba um nome de entrada, idade, sexo (M ou

F),

# e exiba na tela a seguinte mensagem: Meu nome é (nome) tenho (idade) sou

# do sexo (sexo).

# autor <nome do autor>

# data 16 - 09 - 2012

# versão 2.1

ajuda="

Page 43: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 43/50

Menu: $(basename "$0") [-h | -V]

-h exibe este menu.

-V exibe a versão do script

"

case "$1" in

-h | --help)

echo "$ajuda"

exit 0

;;

-V | --version)

echo -n "$(basename "$0")"

grep ' #̂ versão ' "$0" | tail | tr -d \#

exit 0

;;

*)

if test -n "$1"

then

echo "Switch inválido: $1"

exit 1

fi

;;

esac

echo "###### Coleta de dados ######"

echo "Nome"

read nome

echo "Idade"

read idade

echo "Sexo (M ou F)"

Page 44: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 44/50

read sexo

# O bloco abaixo vai testar se o valor da variável é

# minúsculo, se for o comando 'tr' vai convertê=lo

# em maiúsculo

if test "$sexo" = "m"

then

sexo2=$(echo "$sexo" | tr a-z A-Z)

elif test "$sexo" = "f"

then

sexo2=$(echo "$sexo" | tr a-z A-Z)

fi

# Este bloco vai testar se a variável $sexo recebeu

# um valor aceitável, ou seja, F ou M.

if test "$sexo2" = "M"

then

echo "Meu nome é $nome tenho $idade sou do sexo masculino."

elif test "$sexo2" = "F"

then

echo "Meu nome é $nome tenho $idade sou do sexo feminino."

else

echo "Meu nome é $nome tenho $idade."

echo "Sexo não cadastrado ou não quis informar."

fi

# Este programa não analisa a possibilidade de, no caso de digitação errada,

# perguntar novamente ao usuário seu sexo.

Page 45: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 45/50

exit

Postado há 4th October 2012 por bferreira_user

0 Add a comment

4th October 2012

#!/bin/bash

# dados.sh

# 2 - Faça um Programa que receba um nome de entrada, idade, sexo (M ou F),

# e exiba na tela a seguinte mensagem: Meu nome é (nome) tenho (idade) sou

# do sexo (sexo).

# autor <nome do autor>

# data 16 - 09 - 2012

# versão 2.0

ajuda="

Menu: $(basename "$0") [-h | -V]

-h exibe este menu.

-V exibe a versão do script

"

case "$1" in

-h | --help)

echo "$ajuda"

exit 0

;;

-V | --version)

Page 46: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 46/50

echo -n "$(basename "$0")"

grep ' #̂ versão ' "$0" | tr -d \#

exit 0

;;

*)

if test -n "$1"

then

echo "Switch inválido: $1"

exit 1

fi

;;

esac

echo "

###### Coleta de dados ######

"

echo "Nome"

read nome

echo "Idade"

read idade

echo "Sexo (M ou F)"

read sexo

# Logo abaixo o valor da variável $sexo será testada

# como eu o test funciona como uma chave só haverá uma

# opção válida, ligado ou desligado, F ou M.

test $sexo = 'M' && sexo='masculino'

test $sexo = 'F' && sexo='feminino'

echo "Meu nome é $nome tenho $idade sou do sexo $sexo."

Page 47: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 47/50

exit 0

Postado há 4th October 2012 por bferreira_user

0 Add a comment

4th October 2012

#!/bin/bash

# area-triangulo.sh

# Versão 1.0

# Faça um programa que calcule a área de um triângulo

# sabendo que o usuário deve entrar com as medidas.

# Fórmula: A=b*h/2

MENSAGEM_USO="

USO: $(basename "$0") [-h | -V]

-h exibe o menu de ajuda.

-V exibe a versão do programa.

"

case "$1" in

-h | --help)

echo "$MENSAGEM_USO"

exit 0

;;

-V | --version)

echo -n "$(basename "$0")"

grep ' #̂ Versão ' "$0" | tail | cut -d : -f 1 | tr -d \#

Page 48: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 48/50

exit 0

;;

* )

if test -n "$1"

then

echo "Opção inválida: $1"

exit 1

fi

;;

esac

echo "

########## Cálculo da área de um triângulo ##########

"

echo "Entre com a base do triângulo"

read b

echo "Entre com a altura do triângulo"

read h

# note que o script não verifica se as variáveis contém um valor numérico ou

não

echo "

Sua área é $((b*h/2)) unidades.

"

exit 0

Postado há 4th October 2012 por bferreira_user

0 Add a comment

Page 49: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 49/50

4th October 2012

#!/bin/bash

# area.sh

# Versão 1

# Faça um programa que calcule a área sabendo que a fórmula

# da área é A=LxL.

mensagem="

Menu: "$(basename "$0")" [-h | -V]

-h exibe o menu de ajuda.

-V exibe a versão do script

"

case "$1" in

-h | --help)

echo "$mensagem"

exit 0

;;

-V | --version)

echo -n "$(basename "$0")"

grep ' #̂ Versão ' "$0" | tr -d \#

exit 0

;;

*)

if test -n "$1"

then

echo "Opção inválida: $1"

exit 1

Page 50: Vários scripts

10/11/13 Shell Script Profissional

shellscriptprofissional.blogspot.com.br 50/50

fi

;;

esac

echo "

######## Cálculo da área de um retângulo/quadrado ########

"

echo "Entre com o valor de L1"

read L1

echo "Entre com o valor de L2"

read L2

echo "O valor da área é $(($L1*$L2))"

exit 0

Postado há 4th October 2012 por bferreira_user

0 Add a comment