Upload
juan-machadd
View
60
Download
2
Embed Size (px)
Citation preview
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
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
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:
# +------------------+
# | |
# | |
# +------------------+
#
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)
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
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
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;
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'
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
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"
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"
#}
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
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
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
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
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
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
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
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
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
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
;;
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
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
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:
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
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
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
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
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
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
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
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
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
;;
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
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)
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
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
;;
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)
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
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
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"
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="
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)"
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.
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)
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."
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 \#
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
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
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