Você está na página 1de 51

http://www.zago.eti.br/script/scripts.

txt
Dicas pra criar scripts, modelos e FAQ com mensagens da Linux-br.
Use CTRL+F para refinar a pesquisa.
Linha de:

****************

sapara mensagens ou tpicos.

********************************************************
Zago
http://www.zago.eti.br/menu.html
http://www.zago.eti.br/script/A-menu-scripts.html
FAQ e artigos sobre Linux
Depedendo do problema procure soluo neste diretrio ou (site) em:
find.txt
-> localizar arquivos
cat.txt
-> edio de arquivos
sed.txt
-> edio de string e arquivos
awk.txt
grep.txt
tar.txt
-> compactar arquivos
ftp.txt
-> transmitir arquivos
convert.txt -> converso de arquivos
********************************************************
http://www.conectiva.com.br/suporte/pr/sistema.geral.criar.script.html
http://www.tldp.org/LDP/abs/abs-guide.pdf
Curso de shell script.
http://aurelio.net/shell/canivete.html
Canivete Suo do Programador Shell (bash)
http://aurelio.net/shell/canivete.html
Aurlio Marinho Jargas
http://aurelio.net/shell/canivete.html#sinais
sinais, exemplos de operadores, linhas de comando e script.
http://www.sun.com/bigadmin/scripts/index.html
Nesta pgina da SUN, tem uma lista enorme de scripts, tem
script pra quase tudo, est em ingles mas vale a pena conferir.
http://olinux.uol.com.br/artigos/258/1.html
Curso de Shell - Por: Alex Borro
Em portugues, muito bom pra iniciantes.
http://br.groups.yahoo.com/group/shell-script/
Lista Brasileira sobre Linux Shell Script.
********************************************************
1.3. Como crio um arquivo em lote no Linux ?
A sintaxe para fazer um arquivo de lote no Linux a seguinte:
Primeiramente crie um arquivo texto com o contedo:
[usuario@localhost]# mcedit teste.sh

#!/bin/bash
na primeira linha do script, pois esta caracteriza o SHELL a ser utilizado.
Logo aps coloque os comandos utilizveis no prompt do Linux (SHELL), incluindo os p
armetros como if, while e outros.
Aps isto, salve e mude as permisses do arquivo afim de execut-lo:
[usuario@localhost]# chmod +rwx teste.sh
Aps, execute-o usando ./ antes do nome do arquivo
[usuario@localhost]# ./teste.sh
fonte:
http://www.conectiva.com.br/suporte/pr/sistema.geral.criar.script.html
************************************************************
Script uma ferramenta muito til, poderosa e necessria em sistemas
Linux, pode simplificar muito trabalho, considere uma maravilha que
voc tem que aprender usar.
a segiur um resumo de comandos que uso normalmente e na sequencia
mensagens sobre o assunto que passou pela Linux-br, Dicas-l, Ginux e
links relacionados no final deste texto.
OBS. mensagens de erro com \r
Evite escrever scripts no DOS/WIN, no entendo como tem pessoas que
insistem em usar um sistema operacional pra mexer no outro, cada um na sua.
Os formatos de arquivos, mesmo os que esto em formato texto, msmo que voce
no veja a diferena, eles so diferentes.
O final de linha no Linux um LF e no DOS/WIN um CR+LF, pelo simples
fato de manipular um escript do Linux no DOS/WIN, o final da linha vai
ser modificado e no vai rodar no Linux, quando ocorrer erros ao executar
scripts copiados de outros locais, procure ver se na mensagem de erro aparece
o "\r", esta barra r que aparece na mensagem de erro e no faz parte do script
um indicio de que tem o CR no final da linha e que foi inserido pelo editor
DOS/WIN, para solucionar o problema precisa converter o arquivo pro
formato Unix ou refaze-lo, pode copiar e colar o texto em novo arquivo
ou veja dicas pra converter arquivos no FAQ:
http://www.zago.eti.br/convert.txt.
abra um editor de texto, ex.: vi e crie um arquivo texto com o contedo,
salve e depois torne-o executavel, por exemplo um arquivo teste:
# chmod +rwx teste
depois s digitar ./teste para executar ou editar novamente para
ver seu conteudo ou altera-lo.
Para executar o escript na inicializao do Linux, pode colocar os
comandos no final de /etc/rc.d/rc.local assim toda vez que ligar o micro
estes comandos sero executados e valer para todos os usuarios.
ou
Para executar o escript somente para um usuario especifico coloque os
comandos no seu ./bash
ou

coloque este escrip em um diretorio que o usuario possa ler e execute


quando necessario com ./nomedoescript.

exemplo de um script
#!/bin/bash
#Esse script pode ser distribuido livremente
#linhas para comentrios sobre o script
data="Hoje `date`"
echo $data
ou
$ echo "Hoje `date +%D `"
Hoje 08/01/02
ou
$ echo "Hoje `date +%d/%m/%Y ` "
Hoje 01/08/2002
tar -cxf /home/zago
script <arquivo_script> copia o contedo da tela em arquivo_script at que voc digite
o comando exit.
til para depurao.
CUIDADOS COM SCRIPT
1 - O script sempre inicia com:
#!/bin/sh
2 - certifique se os diretorios onde esto os scripts esto no path do
usurio que vai executar
3 - veja se o usurio tem permisso de executar o script
4 - Quando colocar o script no cron inclua o caminho completo ate o script
20 12 * * * /usr/local/bin/nomedoscript
fao o mesmo com programas chamados pelo script, por exemplo usando o comando
tar dentro de um script, indique antes do nome o caminho completo:
/bin/tar comandos e parametros, use whereis para localiar path do arquivo.
5 - Reveja periodicamente seus scripts, tenho visto acidentes srios por
falta de atualizao de scripts de backup, novos arquivos, diretrios e usurios
so adicionados ao sistema e podem ficar fora de um script de backup
desatualizado.
6 - todas as linhas de um script podem ser executadas diretamente no prompt
isto til para testar e depurar um script.
7 - Script uma ferramenta poderosa quando bem usada, em caso de dvida
teste em uma instalao a parte, uma linha errada no script pode destruir seu sistem
a.
************************************************************
************************************************************
************************************************************

links sobre tutorias e scripts:


totorial excelente para iniciantes em:
http://paginas.terra.com.br/informatica/zealous/shell-script/index.html
para ajudar a iniciantes aprender shell scripts.
www.shell-script.cjb.net
http://aurelio.net/ funes zz e muitos scripts
http://www.olix.hpg.ig.com.br/curso_de_shel.zip
http://www.sandyxsystems.co.uk/scripts/
http://sh.underlinux.com.br/
http://www.linuxdoc.org/HOWTO/Bash-Prog-Intro-HOWTO.html
http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html#toc14
http://linuxdoc.org/LDP/abs/html/ -> excelente - em ingls.
http://www.tldp.org/LDP/abs/html/ - Avanado
http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html - Bsico
http://www.revistadolinux.com.br/ed/006/shellscript.php3
http://www.revistadolinux.com.br/ed/008/shell_script.php3

Lista brasileira sobre Linux Shell Script em:


http://groups.yahoo.com/group/shell-script/

http://user.it.uu.se/~matkin/documents/shell/
http://vertigo.hsrl.rutgers.edu/ug/shell_help.html
http://www.freeos.com/guides/lsst/
http://www.freeos.com/guides/lsst/maspc.htm
http://www.tldp.org/LDP/abs/html/index.html -> em ingls.
************************************************************
redirecionar saida para variavel
s vc colocar entre CRASE.
Ex.: VAR=`cat /proc/partitions |tr " " "\n"|grep ide`
************************************************************
************************************************************
De:
Claudio Matsuoka <claudio@conectiva.com>
Para: Jozeph Brasil <jozeph@globalmedia.com.br>
Cc:
linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) Bash script...
Data: 13 Jul 2002 08:49:42 -0300
On Fri, 12 Jul 2002, Jozeph Brasil wrote:
>
>
>
>

Com sort -n -t : -k 3 /etc/passwd > passwd.new eu consigo organizar o


meu passwd de acordo com o ID... mas, como fao para organizar o
/etc/shadow de acordo com o /etc/passwd ? Isto ... corresponder
primeira linha root no passwd com primeira linha root no shadow...

Provavelmente o seguinte script fara' o que voce quer.


Versao condensada:
#!/usr/bin/perl
open P, "/etc/passwd"; while (<P>) { push @_, /^([^:]*)/; }
open S, "/etc/shadow"; while (<S>) { ($n) = /^([^:]*)/; $s{$n} = $_; }
print @s{@_};
Versao longa e comentada:
#!/usr/bin/perl
open P, "/etc/passwd";
while (<P>) {
push @_, /^([^:]*)/;
}
close P;

# le /etc/passwd
# coloca cada login name na lista

open S, "/etc/shadow";
while (<S>) {
($n) = /^([^:]*)/;
$s{$n} = $_;
}
close S;

# le /etc/shadow
# extrai o login name
# usa o login name para hash de linhas

print @s{@_};

# ordena de acordo com o /etc/passwd

************************************************************
De:
Andre Felipe Machado <andremachado@techforce.com.br>
Para: linux-br@bazar.conectiva.com.br
Assunto:
(linux-br) KFilereplace => substitui strings recursivamente em s
ubdiretorios
Data: 13 Jul 2002 15:10:54 +0000
Ol,
Criei rpm e src rpm para o CL8 do programa Kfilereplace.
Ele pode substituir strings em arquivos, recursivamente, em
subdiretrios. Muito prtico para trocar um email, por exemplo, em todas
pginas de um site.
Est na minha pgina pessoal:
http://orbita.starmedia.com/~andrefelipemachado/linux/index.html
Boa sorte.
Andr Felipe
http://www.techforce.com.br
http://www.revistadosmotoclubes.cjb.net
************************************************************
para atualizar bios antiga para o ano 2000
Dvida 1 -- O meu computador ele aceita o ano 2000 normalmente at que eu o
desligue! Desligando ele sempre volta pro ano de 1994, mas ele conserva a
hora. (minha placa antigona). Para o rWindows a AWARD disponibilizou uma
fixtool, mas para o Linux...
Ento eu fiz esse script estpido abaixo:
--#!/bin/bash

--horAtual=`date +%H:%M:%S`
--datAtual=`date +%m/%d`
--date -s $datAtual/2000
--date -s $horAtual
Digitei chmod a+x atualizar
Agora eu queria saber como fazer com que esse script execute toda vez que o
Linux inicializado?
Quando informamos qualquer variavel aps o nome do programa o ambiente
v assim:
prompt $ programa var1 var2 var3 ...
|
|
|
|
|->> $...
|
|
|
| --->> $3
|
|
| ------->> $2
|
|----------->> $1
|----------------->> $0
vc pode colocar no seu script tb algumas condies do tipo
if [ "$1" = "" ] && [ "$2" = "" ] && [ "$3" = "" ]; then
echo "Voc no informou nenhuma varivel..."
echo "Digite: programa [var's1] [var's2] [var's3]
exit 1
else
comandos
fi
[]'s
Marco
Em ter, 25 abr 2000, Reinado Brito escreveu:
> ->
> Tenho q montar um script, q quando eu execute ele aceite parametros...
>
> Ex.:
>
> $ programa -limpa
>
>
> "programa" eh o script
> "-limpa" eh o parametro
>
> e este parametro eh variavel, eu tenho que usar varios !!!!
>
************************************************************
Script... Agora vou ensinar um truque muiiiiiito safado: :)
startx {nome do gerenciador}
Exemplo...
startx fvwm2
Isto a vai executar o fvwm2. Claro que isto s funcionar se voc no
tiver o .xinitrc no seu diretrio $HOME (a Conetitica traduz isto como
$LAR ou $CASA?).
Para quem no enteu bem, a sintaxe do startx :

startx {parmetros do gerenciador} -- {parmetros do servidor}


Assim voc pode fazer coisas como:
startx olwm -- -bpp 8 # OpenLook com 256 cores
startx wmaker -- -bpp 16 # WindowMaker com 16M Cores
E por a vai... Agora para fazer um menuzinho legal, voc poderia usar
o DIALOG... O que DIALOG? D um "man dialog" e veja... :)

************************************************************
> Alguem tem algum exemplo de script ou dica para fazer um para que um
> determinado servidor Linux, faca a conexao com a ISP, receba as msgs e
> desligue. (...)
Eu ate'tenho um rascunho muito feio por aqui, acredito que quebre o
galho. Ele no leva muitas coisas em considerao (linua ocupada) mas
faz o servio.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #!/bin/sh
# esta linha apenas para deixar o sudo com sua senha na "cabea", se
# voc vai executar isto como root pode retir-la, assim como os outros
# "sudo"s.
sudo echo
# Eu uso o ppp-setup, ele simples e fcil de configurar.
sudo ppp-go
sleep 5s
# Enquanto o chat est sendo executado eu coloco "." na tela. :)
echo -n "Esperando a conexo PPP ser estabelecida "
while (sudo ps -a | grep -ie chat > /dev/null) do
echo -n "."
done
# Pula linha..
echo "\n"
# Verifica o estado da conexo
sleep 5s
if [ ppp ] && ( sudo ifconfig | grep ppp > /dev/null); then
( echo "Msg: Conectado!"
# Outro bom utilitrio o fetchmail. Com ele possvel baixar as
# mensagens at de servidores que no sejam POP3. Voc pode incluir
# uma linha para cada conta de e-mail, inclusive pegar toda a corres# pondncia dos usurios de uma vez s (mas a voc vai precisar ro# dar isto aqui como root).
fetchmail -n --uidl -l 131072 --flush -f .fetchconf
# Uma pausa para o sendmail terminar de verificar os endereos
sleep 5s
# Desconectando!
# sudo ppp-off
)
else

echo "Msg: Erro! No consegui me conectar."


fi
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Se voc no tiver o pppsetup pegue-o em:
http://www.tux.org/pub/people/kent-robotti/index.html
E se no tiver o fetchmail v em:
http://www.tuxedo.org/~esr/fetchmail
Na configurao do Fetchmail que uso UIDL, limito as mensagens em
128Kb e apago (--flush) as que passam disso. E no "-f" um
alternativo ao .fetchmailrc, a cara dele e' algo assim:
poll {servidor-de-correio}
protocol {protocolo, ex. pop3)}
username {seu nome}
password {sua senha}
--************************************************************
> Eu estou com uma duvida...aqui.. Como dar permissao para um
> usuario..comum.. vou dar um Exemplo tipo..liberar.um diretorio...ou
> coisa parecida..
Veja os utilitrios chown, chmod e chgrp. H documentao suficiente
sobre o assunto e a mensagem do Claudio foi bastante educativa, ele s
no disse que o chmod faz os atributos em base octal.
> Tmb..queria dar permissao para usar um dispositivo..um modem..tal
Geralmente um "chmod 666" no dispositivo j suficiente.
> AH..sera que alguem .tem ai um programinha para escolher o wm a usar
> eu tenho aquele StartSelector..mas so funciona como root..
Eu tenho um treco em Tcl/Tk que fiz s de brincadeira...
wmchoice.tcl
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #!/bin/sh
# the next line restarts using wish \
# copiado descaradamente do "hello world"
exec wish8.0 "$0" "$@"
button .fvwm -text "Fvwm2" -command { puts stdout "fvwm2" ; destroy
fvwm
button .wmaker -text "Window Maker" -command { puts stdout "wmaker"
. } pack .wmaker
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

. } pack .
; destroy
-

Coloque-o onde voc quiser (/usr/local/bin por exemplo), como root d


um "chmod 755 wmchoice.tcl" e depois altere o seu .xinitrc para ficar
assim:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (...)
# start some nice program

wmselect.tcl > $HOME/.wmchoice


choice=`cat $HOME/.wmchoice`
if [ ${choice} = "fvwm2" ]; then
fvwm2
fi
if [ ${choice} = "wmaker" ]; then
wmaker
fi
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Como eu disse isto a eu fiz s de brincadeira se algum quiser fazer
alteraes fique vontade (mas me mande uma cpia!).
--************************************************************
************************************************************
mail_check
Outro dos problemas que administradores de sistemas encontram
com bastante frequencia e o gerenciamento do espaco em disco.
O filesystem /var, por exemplo, e vital para o funcionamento
normal do sistema.
Se este filesystem atingir uma taxa de uso de 100% varios servicos
sao interrompidos, como por exemplo a coleta de dados para contabilizacao
de uso de recursos do sistema e o mais importante de todos, o correio
eletronico.
Quando o /var atinge 100% nenhuma mensagem pode ser enviada ou recebida
visto que mensagens que chegam sao gravadas em /var/spool/mail e mensagens
que saem vao para a fila em /var/spool/mqueue (a localizacao exata varia
de sistema para sistema, mas normalmente sao estas).
Varias medidas podem ser tomadas para evitar tamanho transtorno. O
script que se segue pode ajudar nesta tarefa transferindo arquivos
do diretorio /var/spool/mqueue para o diretorio home do usuario. O usuario
recebe tambem uma notificacao informando-o da transferencia dos arquivos
e os procedimentos que devem ser seguidos para recuperar suas mensagens.
------------------------------<mail_check>----------------------------------#!/bin/csh
# Definicao de Variaveis
set DATA = `date +%d%m%y`
set DIR = /usr/sys
set dir_home = '$''home'
# O laco abaixo ira primeiramente gerar uma listagem dos arquivos
# contidos em /var/spool/mail e selecionar aqueles que sejam maiores
# que 400K, ou seja, os usuarios afetados serao apenas aqueles que
# nao leem suas mensagens com frequencia. Os arquivos que forem maiores
# que este valor serao movidos para o diretorio home do usuario e receberao
# o nome mbox.ddmmyy, onde os valores do dia, mes e ano serao determinados
# a partir do comando "date +%d%m%y". O arquivo em /var/spool/mail e entao
# deletado e sua copia, agora no diretorio do usuario, e compactada.
# O ultimo passo e a mudanca de ownership do arquivo para o usuario (visto
# que o arquivo foi criado originalmente pelo usuario root.
#
# Todos os comandos contidos neste laco serao executados para todos os
# usuarios cujas mailboxes excedam a 400Kbytes.
foreach USER (`/bin/ls -l /var/mail | awk '$5 > 400000 {print $9}'`)
mv /var/mail/$USER ~$USER/mbox.$DATA

rm ~$USER/mbox.$DATA.gz >&! /dev/null


/usr/local/bin/gzip ~$USER/mbox.$DATA
chown $USER ~$USER/mbox.$DATA.gz
# A seguir e composta a mensagem que sera enviada para o usuario.
# O comando cat abaixo ira criar um arquivo em $DIR/mensagem.mail
# que contera todos os caracteres digitados ate que seja encontrado
# os caracteres EOF, que em nosso caso atuam como delimitadores.
# Vale a pena prestar atencao nessa facilidade, visto que e bastante
# util.
cat >! $DIR/mensagem.mail << EOF
Prezado(a) Usuario(a),
Visto que sua mailbox (/var/spool/mail/$USER) esta excedendo o tamanho
maximo permitido de 400K, ela foi transferida para o seu diretorio home
com o nome mbox.$DATA.gz.
Isto se fez necessario visto que o filesystem /var estava com uma
taxa de ocupacao proxima a 100%, impedindo que nossos usuarios
enviassem ou recebessem mensagens.
Favor seguir os seguintes passos para conseguir ler os seus mails
novamente :
1) cd (para ir para o seu diretorio principal)
2) /usr/local/bin/gzip -d mbox.$DATA.gz (para descompactar as mensagens)
3) cat mbox.$DATA >> /var/mail/$USER
Gostariamos de lembra-lo que seus mails devem ser lidos e movidos
para o seu espaco de armazenamento pessoal e nunca deixados na
caixa de correio localizada no diretorio /var.
A maioria dos programas utilizados para leitura de mail (elm, pine,
netscape, etc.) oferece facilidades para se criar folders, onde suas
mensagens podem ser guardadas separadas por assuntos em outro local
que nao o diretorio /var/spool/mail/$USER.
Em caso de duvidas envie mensagem para o endereco suporte@netway.com.br.
EOF
mail -s "Modificacoes em sua mailbox..." $USER < $DIR/mensagem.mail
end
----------------------------<end mail_check>---------------------------************************************************************
DNS - Root Name Servers
Para o correto funcionamento de um servidor DNS, e necessario que
se atualize periodicamente o arquivo chamado named.root.
Este arquivo esta disponivel,via ftp anonimo,
em rs.internic.net:/domain/named.root.
Este arquivo contem a lista dos servidores de mais alto nivel na
Internet, o dominio ".".
Caso esta lista esteja desatualizada os efeitos podem ser desastrosos
e potencialmente dificeis de se identificar. Todo servidor DNS ao
ser ativado precisa desta lista para entao chegar aos servidores
dos dominios mais baixos, como .com, .edu, etc e os dominios geograficos
(.br, .jp, .au, etc.)
Esta tarefa pode ser facilmente automatizada a partir de um shell
script, como o que se segue
---------------------< get_named.root>-----------------------------------#!/bin/ksh
# A seguir, e realizada uma sessao de ftp em modo batch. Os argumentos
# fornecidos ao programa ftp sao fornecidos na linha de comando ate se
# chegar ao delimitador, no nosso caso, a string EOF.
ftp -ni rs.internic.net << EOF
user anonymous queiroz@ccuec.unicamp.br
cd /domain
get named.root
EOF
# Uma vez recuperado o arquivo cabe compara-lo com a versao em

# uso. Se diferentes, efetuar a substituicao e dar um refresh


# no servidor DNS
# A localizacao do arquivo em uso pelo seu servidor e variavel
# e e determinada pelo valor da diretiva
# directory
/usr/local/named
# e pela diretiva
# cache .
named.root
# contidas no arquivo /etc/named.boot. Em nosso exemplo estamos
# assumindo que os arquivos de configuracao encontrem-se em
# /usr/local/named
# No laco abaixo, caso o comando diff retorne um valor diferente
# de zero, entao serao executados os comandos contidos na diretiva else.
# E enviado tambem um mail para os administradores notificando-os que
# houve uma alteracao no arquivo named.root
if diff named.root /usr/local/named/named.root 1> /dev/null 2> /dev/null
then
# Tudo normal, sai da shell
exit
else
# os arquivos sao diferentes, executar a substituicao, dar um refresh no
# named e enviar um mail a equipe de suporte
cp named.root /usr/local/named/named.root
kill -HUP `cat /etc/named.pid`
mail -s "Named substituido" suporte@acme.com.br < /dev/null
fi
************************************************************
Checagem de ocupacao de espaco do filesystem /home
A dica de hoje nos foi enviada por Rodrigo Carvalho (rodrigoc@liveware.com.br).
A dica consiste de um shell script que monitora a taxa de ocupacao do
diretorio /home e gera um alerta quando esta taxa se aproxima de 100%.
#!/bin/ksh
#
###########################################
#
# Script desenvolvida por Rodrigo O. Carvalho
# para o alerta de usuarios quanto a utilizacao
# excessiva do filesystem /home da servidora de
# arquivos da rede
#
# homespace v 1.0 - 02/04/97
#
###########################################
#
###########################################
#
# Definicao de variaveis
#
###########################################
#
###########################################
#
# Variavel em forma numerica do valor do filesystem
# /home exibido em porentagem
#
###########################################
PORCENT=`df -k /home | tail -1 | awk -F" " '{printf "%s", substr($5,1,length($5)
-1)}'`
###########################################
#
# Variavel que especifica o valor em que o

# administrador deve ser alertado, no caso,


# a procentagem do filesystem /home
# o default e 95% (95)
###########################################
MINIMO=95
###########################################
#
# Variavel que define o nome do usuario
# que devera receber a mensagem de alerta
# qto. ao uso do filesystem /home
#
###########################################
USER1="rodrigoc"
USER2="carlosef"
# No caso a Script estara sendo enviada para todos que eh uma alias para
# os usuarios da rede local
###########################################
###########################################
#
# Inicio
#
###########################################
if [ "$PORCENT" -ge "$MINIMO" ]
then
cat > ./message.filesystem.full << EOF
HOST: `hostname`
OCORRENCIA: filesystem /home superou $MINIMO de uso
Caros usuarios da rede da LIVEWARE filial Campinas,
Por favor facam uma verificacao em seus arquivos da rede, pois o espaco
em disco de nossa maquina esta se esgotando. Caso haja a necessidade de
que seus arquivos seja armazenados, solicite ao Grupo de Suporte a realizacao de um backup em fita.
Em caso de duvidas envie uma mensagem para suporte@liveware.com.br.
Obrigado pela colaboracao. Atenciosamente,
Grupo de Suporte Interno
suporte@liveware.com.br
PS.: Nao respondam a essa mensagem (reply) pois ela eh feita via sistema.
EOF
mail -s "FileSystem /home Full" todos < ./message.filesystem.full
else
exit
fi
************************************************************
Controle de laco em shells
Uma facilidade bastante poderosa oferecida pelas shells de sistemas
Unix em geral e o controle de laco. Por meio delas pode-se executar
rapidamente tarefas complexas.
A sintaxe e bastante simples e consiste basicamente no seguinte
% for variavel in a b c d ...
> do
> comandos
> ...
> done
Esta construcao e valida para a Bourne Shell e similares (ksh, p.ex.).
Na primeira linha define-se a variavel e os valores que esta variavel
ira assumir durante a execucao. A diretiva "do" indica o inicio
dos comandos a serem executados ate que se esgotem os valores
atribuidos a variavel. E a diretiva "done" sinaliza o fim da execucao.
O mais interessante e que a variavel pode assumir os valores gerados
por um comando do unix. Para isto basta delimitar o comando unix

entre aspas invertidas (`).


Todos os exemplos aqui citados sao invocados a partir da linha de comandos.
Ao se teclar <ENTER> apos a digitacao da linha contendo a diretiva
"for" o prompt se modifica para o caracter ">". Ao final do laco,
indicado pela diretiva "done", os comandos sao entao executados.
Nada impede entretanto que estes comandos sejam gravados em um arquivo
e executados como uma shell script tradicional.
O objetivo e justamente ensinar estruturas simples para serem utilizadas
diretamente da linha de comandos.
Os exemplos abaixo irao ajudar a esclarecer a utilizacao desta estrutura.
Exemplo 1:
Em um diretorio existem varios arquivos que possuem letras maiusculas
em seu nome. Renomea-los de forma a que em seu nome existam apenas letras
minusculas:
% for file in `ls`
> do
> mv $file `echo $file | dd conv=lcase`
> echo $file
> done
Neste exemplo a variavel "file" ira assumir os valores retornados
pelo comando ls.
O comando mv ira renomear os arquivos do diretorio corrente
para o valor retornado pela saida do comando echo processada
pelo comando dd. A opcao conv=lcase do comando dd faz uma traducao
dos caracteres maiusculos para minusculos.
O comando "echo $file" serve apenas para indicar o progresso
da execucao do comando.
Exemplo 2:
Gerar as versoes formatadas de varios arquivos que estao no formato
nroff. Cada documento formatado devera possuir a terminacao .doc.
% for file in `ls`
> do
> nroff -man $file | col -b > `echo $file | awk -F. '{print $1}'`.doc
> echo $file
> done
Neste exemplo, foi invocado o comando nroff para processar
o arquivo. A saida deste comando e entao redirecionada para
o comando "col" que ira retirar os sublinhados e caracteres
que nao entendidos corretamente por algumas impressoras.
O resultado destes dois comandos e gravado em um arquivo
cujo nome e formado com o auxilio do comando awk, que ira
obter do nome original o primeiro qualificador e acrescentar
o sufixo .doc. Por exemplo, o nome ls.1 seria substituido
pelo nome ls.doc e assim sucessivamente.
Exemplo 3:
Enviar a mensagem gravada no arquivo de nome "mensagem" para os enderecos
eletronicos gravados no arquivo de nome "usuarios".
% for user in `cat usuarios`
> do
> mail -s "Convocacao para reuniao semestral" $user < mensagem
> echo $user
> done
************************************************************
Redirecionamento da saida padrao em cshell
A cshell nao oferece uma maneira simples de se redirecionar a
saida padrao (standard output) para um arquivo e as mensagens
de erro para um outro (standard error).
Para fazer isto proceder como abaixo:
% (ls -l ab bc > /tmp/saida_padrao) >& /tmp/saida_de_erro
No nosso exemplo o arquivo ab nao existe e ira gerar uma mensagem

de erro que sera gravada no arquivo /tmp/saida_de_erro e as


caracteristicas do arquivo bc serao gravadas no arquivo /tmp/saida_padrao.
% more /tmp/saida_padrao
-rw-r--r-- 1 root
supsof
0 Oct 24 18:22 bc
% more /tmp/saida_de_erro
ls: 0653-341 The file ab does not exist.
Estranho, nao? Mas e assim mesmo que funciona :)
************************************************************
Script para remover acentos de documentos
--------------------------------------------------------------------Todas as dicas enviadas atraves desta lista sao geradas originalmente
com todos os acentos. Para facilitar a vida de quem le mail com programas
que nao oferecem suporte a caracteres acentuados, eu crio uma outra versao
do documento, sem conter os acentos. A dica de hoje, visto abordar acentuacao
obviamente nao pode ser veiculada sem os acentos.
Para realizar esta conversao, foi criado um shell script que, utilizando
o comando sed para efetuar a troca dos caracteres.
Este script pode ser utilizado para
varias outras finalidades. Nos faziamos antigamente, quando nao possuimos
conexao rapida com a Internet, um mirror de alguns servidores Web que
julgavamos uteis. Apos a transferencia das paginas via FTP (ainda nao
existiam ferramentas como wget e outros; talvez ate ja existissem,
mas nao as conheciamos) era rodado um shell script que convertia
tudo que fosse http://www.site.edu para http://www.unicamp.br.
Outra utilizacao, criar arquivos para processamento pelo programa
Ventura Publisher, que convertia algumas marcacoes de paragrafos
em tags para o Ventura. Pode-se ate criar um editor HTML, que realiza
a expansao de alguns tags em diretivas html.
O script possui dois componentes, um arquivo com os comandos propriamente
ditos e um outro com diretivas para o comando sed.
Vamos ao primeiro deles, o script tiraacento:
#! /bin/sh
#
#
Autor: Queiroz
#
Data : 11/08/94
#
#
Este shell script remove a acentuacao de um arquivo
#
# A seguir, a localizacao do arquivo onde se encontram as diretivas
# para o comando sed
MACROS=/home/queiroz/bin
# testa se foram fornecidos os arquivos de entrada e saida para
# o comando. Caso haja erro neste passo emitir a mensagem e encerrar
# o processamento
if [ $# -lt 2 ]; then
echo 1>&2 Sintaxe: $0 arquivo_entrada arquivo_saida
exit 1
fi
# Atribui a variavel infile o primeiro argumento e a variavel outfile
# o segundo argumento

infile=$1
outfile=$2
# Executa o comando sed para efetuar as substituicoes
sed -f $MACROS/tiraacento.sed $infile > $outfile
-------- Fim script tiraacento
O arquivo tiraacento.sed contem as diretivas para o comando sed.
Desta forma o caracter a sera substituido por ~a e assim por diante.
Caso se opte por remover totalmente a acentuacao basta substituir
s/a/~a/g por s/a/a/g. Algumas pessoas preferem desta forma.
tiraacento.sed
s/a/~a/g
s/A/~A/g
s/a/`a/g
s/A/`A/g
s/o/\^o/g
s/o/o/g
s/O/~O/g
s/e/e'/g
s/E/E'/g
s/a/a'/g
s/o/o'/g
s/A/A'/g
s/O/O'/g
s/c/,c/g
s/C/,C/g
s/e/\^e/g
s/E/\^E/g
s/u/u'/g
s/U/U'/g
s/a/a\^/g
s/A/\^A/g
s/i/i'/g
s/I/I'/g
s/U/U/g
s/u/u/g
---------- Fim arquivo tiraacento.sed
************************************************************
Tabela de conversao de shells
--------------------------------------------------------------------A dica de hoje e um documento muito util, chamado
tabela de conversao/equivalencia de shells. Serve para quem quer
converter scripts de uma shell para outra e tambem como material
de referencia para quem precisa escrever shell scripts em
qualquer uma das shells mais famosas.
---------------------------------------------------------------------

THE ULTIMATE SHELL- CONVERSION / EQUIVALENCE TABLE


""""""""""""""""""""""""""""""""""""""""""""""""""

This is the ultimate shell conversion table. It's made for those
who do shell programing and from time to time have to read shellscripts for a shell they don't know.
It is also for those who want to learn another shell.
All errors, modifications, exstensions and contributions should
be mailed to the author. When mailing to the author remeber to
include the current version number.
A tip if you are looking at this file inside vi: :set wrapmargin=0
No part of this file, or the file itself can be sold. You may only
give it away for free.
This file can be found on anon. ftp: alf.uib.no (129.177.30.3)
in the directory /pub/lpf/misc/shell-100.BetaA.Z
THIS IS A BETA-A RELEASE. IT WILL CONTAIN SEVERAL ERRORS IN THE
KSH/BASH AND Z-SHELL COLLUMNS. I SUSPECT THE WHOLE INPUT/OUTPUT
-REDIRECTION SECTION TO BE WRONG. FLAG SECTON Z-SHELL IS PROBABLY
WRONG. IF YOU FIND ERRORS, PLEASE REPORT THEM TO ME SO THAT I CAN
INCLUDE THE CORRECTIONS IN THE TABLE.
ALL CONTRIBUTIONS WILL BE NOTEFIED.
THE ERRORS ARE DUE TO THAT I MAINLY USE CSH AND RC.
OTHER ITEMS NOT INCLUDED IS VARIABLE SUBSTITUTION.
Version:
1.01 BETA-A
Copyright:
Ove Ruben R Olsen
Contributors:

(Ruben@uib.no)

INTRODUCTION
""""""""""""
The folowing shells are covered in this table:
SH
CSH
TCSH
KSH
BASH
ZSH
RC

The standard UNIX Bourne shell.


The C shell with a syntax reminiscent of C.
CSH with command line editing.
The Korn shell. A superset of SH
The GNU Bourne-Again shell.
The Z Shell. Author is Paul Falstad.
rc shell. A shell based on AT&T plan 9 shell.

When looking for TCSH, use CSH. Pure TCSH's are marked with an '*'.
When looking for BASH, use KSH. Pure BASH's are marked with an '*'.

FLAGS
"""""
SH
CSH/TCSH
KSH/BASH
ZSH
RC
-------------------------------------------------------------------------------------------------------------------------------------------------a
a
a
b
c
t
c
d*
e
e
e
e
e

f
f*
f

f
g
h

h
i

l*
m
m*
n
o
p
r

t
u
v
x

v
V
x
X

h
i
j

k
l

m
n

s
s
t
u
v

u
v

y
1 - 9
A - Z
-

-BASH's:
norc
noprofile
rcfile
version
quiet
login
nobraceexp.
nolineedi.
C
H

THE ULTIMATE SHELL- CONVERSION / EQUIVALENCE TABLE


""""""""""""""""""""""""""""""""""""""""""""""""""
Copyright: Ove Ruben R Olsen (Ruben@uib.no)
Version: 1.01 BETA-A
When looking for TCSH, use CSH. Pure TCSH's are marked with an '*'.
When looking for BASH, use KSH. Pure BASH's are marked with an '*'.
INTERNALS
"""""""""
SH
CSH/TCSH
KSH/BASH
ZSH
RC
------------------------------------------------------------------------------------------------------------------------------------------------:
:
:
.
.
#
#
#
#
&
&
&
&
FOO=BAR
set FOO = BAR FOO=BAR
FOO=BAR
@ FOO =EXPR
NAME ()
alias
NAME ()
NAME ()
fn
alias
alias
alias
fn
autoload
bg
bg
bg
bindkey
break
break
break
break
break
builtin*
builtin
bye*
bye
case WORD
in PATT )
LIST ;;
esac

switch ( WORD ) case WORD


case PATT:
in PATT )
LIST
LIST ;;
breaksw
esac
default:
LIST
breaksw
endsw

case WORD
in PATT )
LIST ;;
esac

chdir

chdir
chpwd
cd

cd

cd

dirs

cd
commands*
continue
declare*
dirs*

continue

continue

echo

echo

echo

echo
eval
exec
exit
export

echo
eval
exec
exit

enable*
print
eval
exec
exit
export
false

continue
declare
dirs
disable
disown
echo
echotc
enable
print
eval
exit
export
false

switch (LIST) {
case PATT CMD
}

cd

echo

eval
exit

for NAME
in WORD
do LIST
done

fg

fc
fg

fc
fg
for NAME
in WORD;
SUBLIST

foreach NAME
( LIST )
LIST
end

for NAME
in WORD
do LIST
done

for NAME for (NAME in LIST) CMD


in WORD
do LIST
done

function
functions

function
functions
getln
getopts

getopts
hash

getopts*
glob
goto
rehash

hash

rehash
hash

hashstat

if LIST
then LIST
elif LIST
then LIST
else LIST
fi

help*
history
history
if ( EXPR ) WORD

history

if ( EXPR )
then
LIST
else
LIST
endif

if LIST
then LIST
elif LIST
then LIST
else LIST
fi

if LIST
then LIST
elif LIST
then LIST
else LIST
fi

jobs

integer
jobs

integer
jobs
job
kill
let
limit
local
log

kill
limit

kill
let
ulimit
local*

logout
ls-F*

logout*

login
newgrp

logout

newgrp
nice
nohup
notify
periodic*
popd
pushd
precmd*

nohup
popd*
pushd*
pwd

read
readonly

read
readonly
repeat

popd
pushd
precmd
pwd
r
read
readonly
repeat
repeat WORD
do LIST
done

if (EXPR) {
LIST
} else LIST

return

return

return

return

select NAME
in WORD ;
SUBLIST
select NAME
in WORD
do LIST
done
sched*
set
shift

test
times
trap

setenv
shift
source
stop
suspend
time
onintr

type
umask
unset
unset

umask
unhash
unalias
unlimit
unset
unsetenv

set

sched
set
setopt

shift
source*

shift
source

suspend*
test
times
trap
true
type
typeset
umask

suspend

unalias
ulimit
unset

times
trap
trye
type
typeset
umask
unhash

shift
.

umask

ulimit
unlimit
unset
unsetopt

wait

wait

until LIST
do LIST
done

until LIST
do LIST
done

wait

vared
wait

wait
whatis

whence
while LIST
do LIST
done

while ( EXPR ) while LIST


LIST
do LIST
end
done

while LIST
do LIST
done

wich*

wich

while (EXPR) LIST

THE ULTIMATE SHELL- CONVERSION / EQUIVALENCE TABLE


""""""""""""""""""""""""""""""""""""""""""""""""""
Copyright: Ove Ruben R Olsen (Ruben@uib.no)
Version: 1.01 BETA-A
When looking for TCSH, use CSH. Pure TCSH's are marked with an '*'.
When looking for BASH, use KSH. Pure BASH's are marked with an '*'.

INPUT/OUTPUT - REDIRECTION
""""""""""""""""""""""""""
SH
CSH/TCSH
KSH/BASH
ZSH
-------------------------------------------------------------------------------------------------------------------------------------------------<WORD
< FILE
<WORD
<WORD
<<IDF
<<IDF
<<IDF
<<<WORD
>WORD

>>WORD

> FILE
>& FILE
>! FILE
>&! FILE
>> FILE
>>& FILE
>>! FILE
>>&! FILE

>WORD
>$WORD

>WORD
>! WORD

>>WORD

>>WORD
>>! WORD

<$DIGIT
<$>$DIGIT
>$-

<&DIGIT
<&<&p
>&WORD
>&<&p

THE ULTIMATE SHELL- CONVERSION / EQUIVALENCE TABLE


""""""""""""""""""""""""""""""""""""""""""""""""""
Copyright: Ove Ruben R Olsen (Ruben@uib.no)
Version: 1.01 BETA-A
When looking for TCSH, use CSH. Pure TCSH's are marked with an '*'.
When looking for BASH, use KSH. Pure BASH's are marked with an '*'.

PARAMETERS / SHELL ( ENVIRONMENT) VARIABLES


"""""""""""""""""""""""""""""""""""""""""""
SH
CSH/TCSH
KSH/BASH
ZSH
RC
------------------------------------------------------------------------------------------------------------------------------------------------auto_resume*
argv
argv
BASH*
BASH_VERSION*
BAUD
CDPATH
cdpath
CDPATH
cdpath
cdpath
COLUMNS
COLUMNS
cwd
PWD
PWD
dextract*
DIRSTACKSIZE
echo
edit*
EDITOR
ENV
EUID*
ERRNO
FCEDIT
fignore
FIGNORE*
fignore
filec
fpath
GID
glob_dot_filn.*
allow_null_gl.*
hardpaths
histchars
histchars*
histchars
HISTFILE
HISTFILE
history
HISTSIZE
history_control*
HOME
home
HOME
HOME
home
HPATH*
HOST
HOSTTYPE*
HOSTTYPE
hostname_comp.*
ignoreeof
ignoreeof*
IFS
IFS
IFS
ifs
LINES
LINES
LINENO
LISTMAX
LOGCHECK
MAIL
MAIL
MAIL
MAILCHECK
mail
MAILCHECK
MAILCHECK
MAILPATH
mail
MAILPATH
mailpath

no_exit_on_fai.*
nobeep
noclobber
nonomatch
notify

PATH

path

noclobber*
nolinks*
notify*
LANG
LINENO*
LC_COLLATE
LC_TYPE
NO_PROMPT_VARS*
OLDPWD
OPTARG*
OPTERR*
OPTIND*
PATH
PPID

OLDPWD
OPTARG
OPTERR
OPTIND
path
PPID

path
pid

printexitvalue*
PS1
PS2

prompt
prompt2*

PROMPT_COMMAND*
PS1
PS2
PS3
PS4*

PROMPT
PROMPT2
PROMPT3
PROMPT4
is also
PS1 - PS4

pushtohome*
RANDOM

RANDOM

recexact*
REPLY
savehist*
SHELL

shell

SECONDS
SHELL
SHLVL*

RPROMPT
RPS1
SAVEHIST
SECONDS
SHLVL

showdots*
signals
status
TERM*
term*
time
autologout*
uid*

status

TMOUT
UID*

verbose
version*

TIMEFMT
TTY
TMOUT
UID
USERNAME
VERSION

VISUAL
watch*

watch
WATCHFMT

wordchars*
--------------------------------------------------------------------Pensamento do dia:
"FORMAT C: ...Sim ...Sim ...Naaaaaaoooo!!! ^C ^C ^C ^C ^C"
************************************************************
De:
Jorge Godoy <godoy@metalab.unc.edu>

Para: twlinux <twlinux@terra.com.br>


Cc:
linux-br <linux-br@bazar.conectiva.com.br>
Assunto:
Re: (linux-br) Redirecionar mensagens de erro em shell script
Data: 14 Aug 2002 22:13:16 -0300
"twlinux" <twlinux@terra.com.br> writes:
> E pra redirecionar as saidas normais ???? um echo por exemplo???
STDIN = 0
STDOUT = 1
STDERR = 2

(Entrada padro)
(Sada padro)
(Sada de erros)

Exemplo de uso:
./programa 2> arquivo_de_erros 1> arquivo_de_sada
Sds,
-Godoy.

<godoy@metalab.unc.edu>

************************************************************
De:
Anderson Lizardo Gomes <lizardo@horizon.com.br>
Para: linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) #!/bin/bash - Como?
Data: 23 Sep 2002 13:12:05 -0400
Em Domingo, 22 de Setembro de 2002 18:15, HelpLinux escreveu:
> Tenho um script para configurar o firewall e roteador com compartilhamento
> de internet e no sei onde devo colocar e os procedimentos melhor
> recomendados para sua ativao...
> Quem puder ajudar, obrigado...
> Ah... e pq de "#!/bin/bash"?
> [...]
O "#!/bin/bash" no incio de um script serve para chamar o interpretador bash
para execut-lo. Isso torna os scripts, a grosso modo, auto-executveis,
bastando digitar algo como "./script_exemplo.sh". Sem o "#!/bin/bash", voc
precisa digitar:
bash script_exemplo.sh
para execut-lo. Esse "mtodo" aplica-se a vrios interpretadores. ex: perl,
csh, tcsh, awk. Basta mudar a linha para o caminho do programa desejado.
-Anderson Lizardo Gomes
Linux User #253643 - LFS User #4601
Site: http://adrenalinux.sytes.net/
************************************************************
De:
Claudio Matsuoka <claudio@conectiva.com>
Para: Marcio Merlone <mm@surf.com.br>
Cc:
linux-br@bazar.conectiva.com.br <linux-br@bazar.conectiva.com.br>
Assunto:
Re: (linux-br) Ajuda com bash script ninja
Data: 24 Oct 2002 08:47:03 -0200

On Wed, 23 Oct 2002, Marcio Merlone wrote:


> # Detalhe: eu passo o NOME da variavel como parametro
> # para o comando e nao seu valor!!
>
>
# Estas linhas abaixo que so a dvida como fazer!
>
# Ela substituiria
servidorX=`comando servidorX`
>
$servidor=`comando $servidor`
>
echo "Bla bla bla "${$servidor}
#!/bin/sh
a="comando a"
b="comando b"
lista="a b"
for i in $lista; do
eval echo $`echo $i`
done
************************************************************
De:
Claudio Matsuoka <claudio@conectiva.com>
Para: Lucas Zinato Carraro <lucaszc@dpi.ufv.br>
Cc:
linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) Ajuda em programao - Substituir Strings !!
Data: 23 Nov 2002 23:27:54 -0200
On Sat, 23 Nov 2002, Lucas Zinato Carraro wrote:
>
>
>
>
>
>
>
>
>
>

O queria saber como posso construir um pequeno script


Que leia um arquivo de texto e toda vez que ele encontrar
um determinada string ( ex Nome='Lucas Zinato Carraro')
ele guarde em um outro arquivo saida.txt
a linha que ele ocorreu e a varivel dando uma nova linha
para a proxima vez em que encontrar a ocorrncia
( ex : 300 - Lucas Zinato Carraro )
301 - Fernando Qualquer Coisa
308 - Ze da Silva

No sei se entendi direito. Este pequeno e pode fazer o que voce quer:
$ perl -ne '/:(Claudio Matsuoka),/ && print "$. - $1\n"' /etc/passwd
22 - Claudio Matsuoka
> De modo que eu possa passar este arquivo a uma outra pessoa
> que vai edit-lo.
Talvez seja mais simples fazer algo como
$ perl -pi.bak -e 's/Lemmiwinks/The Gerbil King/' *txt
para substituir todas as ocorrncias de "Lemmiwinks" para "The Gerbil
King" logo de uma vez em todos os arquivos *txt, sem precisar mandar
algum fazer manualmente.
> ex:

ler do sada.txt e ver que na linha 300 do arquivo original devo

> substituir Nome='Lucas' por Nome='Lucas Zinato Carraro'


> e na linha 308 substituir Nome='Ze da Silva' por Nome='Jose da Silva'
Pegue o arquivo original e o modificado e faa um diff -u. Aplique as
diferenas com patch. Mas no sei que bem isso traria.
************************************************************
De:
Arnaldo Carvalho de Melo <acme@conectiva.com.br>
Para: Syndson Silva <syndson@abeunet.com.br>, linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) funo substring no shell/bash. Existe?
Data: 29 Oct 2002 22:15:33 -0300
> "Syndson Silva" <syndson@abeunet.com.br> wrote:
> >
Tem como associar uma varivel do shell uma substring ?
Sim:
[acme@oops
[acme@oops
Carvalho
[acme@oops
Melo
[acme@oops

acme]$ nome="Arnaldo Carvalho de Melo"


acme]$ echo ${nome:8:8}
acme]$ echo ${nome:20}
acme]$

Facilmente encontrado numa rpida consulta ao bom e velho:


man bash
Procure por... "substring"
:-)
- Arnaldo
************************************************************
De:
Marcus Lima <marcuslima@marcuslima.eti.br>
Responder-a:
marcuslima@marcuslima.eti.br
Para: Leonardo Tavares <letagi@letagi.com.br>, LinuxBR <linux-br@bazar.conecti
va.com.br>
Assunto:
(linux-br) RES: (linux-br) Programa em Shell
Data: 02 Jan 2003 23:37:30 -0200
> Eu tenho o arquivo1.sh e quero dele chamar uma funo dentro do
> arquivo2.sh, que o meu arquivo de biblioteca de funes. Algum teria
> alguma ideia de como faze-lo.
Basta incluir o arquivo2.sh no arquivo1.sh, funciona como o include do C ou
do PHP, ou outras linguagens.
coloque dentro do arquivo1.sh essa linha:
. /path/to/arquivo2.sh
Depois basta chamar a funo que ela j estar incluida.
- Marcus Lima
--************************************************************
De:
Marcus Lima <marcuslima@marcuslima.eti.br>
Responder-a:
marcuslima@marcuslima.eti.br
Para: lizardo@users.sourceforge.net, linux-br@bazar.conectiva.com.br
Assunto:
(linux-br) RES: _(linux-br)_desafio_BASH:_como_fazer_substituio_de
_uma_string_contida_numa_variavel_usando_sed

Data: 18 Jan 2003 18:59:56 -0200


Anderson,
Questo conceitual...
sed "s/string1/string2/g" < arquivo > arquivo2; mv -f arquivo2 arquivo
Ainda assim mais facil que o Perl por estar usando comando nativos do
Linux.
Eu poderia indicar o PHP para fazer isso, mas como est no Subject...
Desafio BASH, estou me prendendo ao assunto.
- Marcus Lima.
************************************************************
De:
Paulino Kenji Sato <paulino@nobel.com.br>
Para: linux-br <linux-br@bazar.conectiva.com.br>
Assunto:
(linux-br) Re:_(linux-br)_desafio_BASH:_como_fazer_substituio_de_u
ma_string_contida_numa_variavel_usando_sed
Data: 18 Jan 2003 14:21:12 -0200
On Fri, 17 Jan 2003, Anderson Lizardo wrote:
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

Marcus Lima <marcuslima@marcuslima.eti.br> escreveu:


> > > O sed no edita arquivos.
> (...)
> sed significa Stream Editor, e com o Editor no nome esperasse que ele
> edite
> arquivos.
> (...)
> sed "s/string1/string2/g" < arquivo > arquivo2
O arquivo original continuou no editado... O que voc fez foi abrir
"arquivo", pass-lo pelo "filtro" do sed, enviando o resultado para
"arquivo2". Sem edies (ao meu ver). Agora, vamos tentar realmente
editar o arquivo "arquivo" com o sed:
bash$ cat arquivo
string1
bash$ sed "s/string1/string2/g" < arquivo > arquivo
bash$ cat arquivo
bash$
No funciona ;-). No quer utilizar o Perl para isso? Ento use o ed.

Claro que funciona, pense bem, se esta fazendo uma modificao em um


arquivo, modificao essa que pode no ser exatamente o que ser quer.
Se o altereo for feita em cima do mesmo arquivo, se se a mesma ficar de
forma no desejada, como e que fica, onde ta o original, mas esse era o
original.
Mesmo e perl o bom senso diz para no gravar as alteraes, que no se
sabe se vai estar correto, no mesmo arquivo.
Faria isso assim:
sed "s/string1/string2/g" arquivo.txt >arquivo.tmp
less arquivo.tmp
ficou do jeito desejado?
sim: rm arquivo.txt && mv arquivo.tmp arquivo.txt
no: goto sed
Perl nesse caso e util se tiver dezenas de strings para trocar, um ou

outro o sed e mais facil e rapido de se fazer.


Paulino
************************************************************
De:
Marcus Lima <marcuslima@marcuslima.eti.br>
Responder-a:
marcuslima@marcuslima.eti.br
Para: lizardo@users.sourceforge.net, linux-br@bazar.conectiva.com.br
Assunto:
(linux-br) RES: (linux-br) Substituio em scripts (Era: (linux-br)_
desafio_BASH:_como_fazer_substituio_de_uma_string_contida_numa_variavel_usando_sed
)
Data: 18 Jan 2003 22:40:55 -0200
> "Comandos nativos"? Se voc se refere aos builtins do bash, nem "sed",
> nem "mv", nem "ed", nem "perl" so comandos nativos do Linux. Se eu
> deletar o sed do meu computador, pronto, menos um comando nativo ;-)
Hmmm acho que no estamos falando com iniciantes... No ignore isso!
Quando eu digo "Comandos nativos *do linux*" (por favor no retire palavras
que trocam o sentido), estou me referindo a programas usuais do sistema.
Programas que so instalados por padro em diversas (se no todas) as
distribuies.
>
>
>
>
>
>

Existem diversas formas de se fazer a mesma coisa em um script. A


verdade que mesmo o Perl pode ser utilizado em um script bash (como
demonstrou um dos colegas da lista, Thiago, no ?). O que determina se
voc vai utilizar a ferramenta "x" ou "y" so fatores como: a
disponibilidade da ferramenta no sistema; a praticidade e as
funcionalidades da ferramenta disponvel; o gosto pessal; etc.

Certamente, podemos utilizar qualquer coisa disponvel para linha de comando


no shell script.
Como eu disse, poderia tambm ter feito em PHP:
#!/bin/bash
### Se for para uma palavra ou frase descomente esta linha
# echo "<?= strtolower($@).\"\n\"; ?>" | /usr/bin/php -q
### Se for para um arquivo descomente estas linhas
# for i in `cat $1`; do
# echo "<?= strtolower($i).\"\n\"; ?>" | /usr/bin/php -q >> $1.new
# done
Mas no seria usual para um (bash|tcsh|ash) script. Essa era a questo!
> Acabamos saindo um pouco do tpico... :-)
Ah sim, saimos bastante.
Gudiluqui,
- Marcus Lima.
--************************************************************
De:
Anderson Lizardo <andersonlizardo@yahoo.com.br>
Responder-a:
lizardo@users.sourceforge.net
Para: Thiago Macieira <thiagom@mail.com>, linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) desafio BASH: como fazer substituio de uma string c
ontida numa variavel usando sed
Data: 17 Jan 2003 21:37:38 -0300
Thiago Macieira <thiagom@mail.com> escreveu:

>
>
>
>
>
>

Anderson Lizardo wrote:


>Ou o "ed". O ed parece uma mistura de Vim com Sed. Veja:
O contrrio! O vi um ed visual e o sed o ed para streams. O ed
o
original!

Por isso que eu disse que _parece_... mas tudo bem, captei vossa
mensagem ;-)
Fazendo um breve resumo,
Para substituir strings em arquivos [1]:
- O Perl bom se voc vai fazer o script todo nele (IMO);
- O Vi(m) bom se voc quer fazer o trabalho "manualmente";
- O sed bom se voc quer fazer o trabalho em um script Bash, mas em
uma varivel ou sada de um programa (streams);
- O ed bom se voc quer fazer o trabalho em um script Bash, e quer
que o arquivo original seja modificado.
[1] Faltou citar que d pra fazer com o AWK tambm...
Claro, tudo isso so opinies, o mundo da programao em script oferece
mil e uma maneiras de se fazer a mesma coisa, e isso que a torna to
fascinante ;-)
=====
************************************************************
De:
Anderson Lizardo <andersonlizardo@yahoo.com.br>
Responder-a:
lizardo@users.sourceforge.net
Para: Marcus Lima <marcuslima@marcuslima.eti.br>, Thiago Macieira <thiagom@mai
l.com>, linux-br@bazar.conectiva.com.br
Assunto:
(linux-br) Re:_(linux-br)_desafio_BASH:_como_fazer_substituio_de_u
ma_string_contida_n uma_variavel_usando_sed
Data: 17 Jan 2003 21:51:54 -0300
Marcus Lima <marcuslima@marcuslima.eti.br> escreveu:
> > > O sed no edita arquivos.
> (...)
> sed significa Stream Editor, e com o Editor no nome esperasse que ele
> edite
> arquivos.
> (...)
> sed "s/string1/string2/g" < arquivo > arquivo2
O arquivo original continuou no editado... O que voc fez foi abrir
"arquivo", pass-lo pelo "filtro" do sed, enviando o resultado para
"arquivo2". Sem edies (ao meu ver). Agora, vamos tentar realmente
editar o arquivo "arquivo" com o sed:
bash$ cat arquivo
string1
bash$ sed "s/string1/string2/g" < arquivo > arquivo
bash$ cat arquivo
bash$
No funciona ;-). No quer utilizar o Perl para isso? Ento use o ed.

************************************************************
De:
Marcus Lima <marcuslima@marcuslima.eti.br>
Responder-a:
Marcus Lima <marcuslima@marcuslima.eti.br>
Para: Thiago Macieira <thiagom@mail.com>, linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) desafio BASH: como fazer substituio de uma string c
ontida numa variavel usando sed
Data: 17 Jan 2003 19:50:13 -0200
> > O sed no edita arquivos.
Oi Thiago, s uma correo
sed significa Stream Editor, e com o Editor no nome esperasse que ele edite
arquivos.
Os comandos do sed so parecidos com o do vim e no por acaso, a diferena
que no vim voc precisa acessar o arquivo para alterar e o sed faz isso em
linha de comando... Sendo assim:
sed "s/string1/string2/g" < arquivo > arquivo2
Funciona e bem mais simples que Perl.
Gudiluqui,
- Marcus Lima.
************************************************************
De:
oicrams@brfree.com.br
Para: linux-br@bazar.conectiva.com.br
Cc:
sss@novahamburgo.rs.gov.br
Assunto:
(linux-br) REsposta p/ desafio BASH
Data: 19 Jan 2003 08:17:21 +0000
sss,
Use GAWK ele foi criado exatamente para tarefas deste tipo.
O seguinte AwkScript resolve o seu problema( de forma mais
elegante e eficaz ;-) ):
awk '
BEGIN\
{
nomes="paulo pedro joao andre fabiano"
# Dividindo a varivel 'nomes' em arrays: n[1]=paulo, n[2]=pedro ...
.
split(nomes,n)
# Mesclando n[2] (pedro) com a string '@server.br'...
nomeselecionado=n[2]"@server.br"
}
{
if ($0 ~ nomeselecionado) # Se a linha contm 'nomeselecionado', ento
...
$0=gensub(nomeselecionado, "X", "g")
print
}' /home/arquivo > /home/arq-alterado.txt

--

************************************************************
De:
Anderson Lizardo <andersonlizardo@yahoo.com.br>
Responder-a:
lizardo@users.sourceforge.net
Para: Thiago Macieira <thiagom@mail.com>, linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) desafio BASH: como fazer substituio de uma string c
ontida numa variavel usando sed
Data: 17 Jan 2003 15:11:03 -0300
--- Thiago Macieira <thiagom@mail.com> escreveu: > -----BEGIN PGP
SIGNED MESSAGE----> Tente assim:
> perl -pi -e 's/'$nomeselecionado'@server.br/x/' /home/arquivo
>
> O sed no edita arquivos. Quando voc precisar fazer isso, utilize o
> Perl como
> acima. Note que todos os apstrofes acima so comuns. No existem
> apstrofes
> invertidos ali.
Ou o "ed". O ed parece uma mistura de Vim com Sed. Veja:
bash$ cat teste.txt
fulano@server.br
bash$ TESTE="fulano"
bash$ echo -e ",s/${TESTE}@server.br/x/g\nwq" | ed -s teste.txt
bash$ cat teste.txt
x
bash$
/me s usa Perl se for para fazer o script inteiro (embora a
documentao fala que o Perl tambm bom para fazer comandos rpidos
em 1 linha), no Perl dentro de Bash...
************************************************************
De:
Paulo Roberto Bagatini <arkanon@ceat.net>
Para: Andre Ribeiro Souto <soutoandre2000@yahoo.com.br>
Cc:
lista linux <linux-br@bazar.conectiva.com.br>
Assunto:
Re: (linux-br) manual s/programo em shell?
Data: 10 Jan 2003 21:51:44 -0200
Andre Ribeiro Souto said the following on 01/10/03 16:01:
ola alguem sabe onde posso encontrar um manual sobre
programao shell
man bash
http://www.linuxdoc.org/HOWTO/Bash-Prog-Intro-HOWTO.html
abs-guide: http://freshmeat.net/projects/advancedbashscriptingguide
http://www.google.com.br/search?q=%22shell+programming%22
-************************************************************
De:
Rodrigo Formel <formel@campusvirtual.br>
Para: linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) TCL/TK
Data: 25 Jan 2003 23:16:11 -0200
Seja bem vindo!
Tente lista tcl-br no yahoogrupos, ela s de Tcl/TK, outra boa
referncia o site do Souza Monteiro: http://www.souzamonteiro.com
(vive fora do ar mas muito bom).

[]'s
Formel
Em Sb, 2003-01-25 s 18:49, Geraldo Jr escreveu:
> Boa noite a todos. Acabei de me cadastrar na lista e essa a minha primeira
> mensagem.
>
> Estou estudando lingugens de script e durante essa semana dei meus primeiros
> passos com a linguagem TCL.
> Executei com sucesso alguns exemplos simples com diversos comandos bsicos.
> Estou com um problema no comando exec. Como posso escrever uma linha de
> cdigo TCL com o exec para executar o comando awk -F: '{print $1}'
> /etc/passwd ?
>
************************************************************
De:
Rauklei P.S.=?ISO-8859-1?Q?Guimar=E3es?= <rauklei@ligbr.com.br>
Para: rudy@digihelpnet.com.br
Cc:
linux-br <linux-br@bazar.conectiva.com.br>
Assunto:
Re: (linux-br) programaaum BASH
Data: 27 Jan 2003 23:41:00 -0200
On Mon, 27 Jan 2003 14:05:25 +0000
Rudy <rudy@digihelpnet.com.br> wrote:
>
>
>
>
>
>

DAe moada...
Seguinte preciso fazer um script onde
uma string receba o valor passado pelo comando
ifconfig | grep ppp0
Alguem aih sabe como posso fazer isso?????

Ppp0=$(ifconfig | grep ppp0 | awk '{print $1}');


claro que o ideal fazer um loop/while para saber se o ppp0 "est no
ar", e exibir qdo necessrio, mas como c queria s isso...
[]'s
-Rauklei P.S. Guimaraes
************************************************************
De:
Eduardo Rocha <erocha@actha.com.br>
Para: Sergio S. Barbosa <celser@uol.com.br>
Cc:
Lista Linux <linux-br@bazar.conectiva.com.br>
Assunto:
Re: (linux-br) Criacao de Scripts
Data: 30 Jan 2003 14:19:10 -0200
Velhinho, depende da linguagem script que vc quer criar. Pode ser Perl, Tcl/tk,
expect, bash, csh, phyton, awk, etc etc etc. Se for bash, o que bastante provvel,
d uma olhada em:
http://www-106.ibm.com/developerworks/library/l-bash.html
http://www-106.ibm.com/developerworks/library/l-bash2.html
http://www-106.ibm.com/developerworks/library/l-bash3.html
Eduardo Rocha
Sergio S. Barbosa wrote:
Ol colegas. Gostaria de obter um material para aprender a criar scripts no

Conectiva Linux 8. Poderiam me indicar um local onde eu possa encontrar.


Sergio S. Barbosa
************************************************************
De:
Paulino Kenji Sato <paulino@nobel.com.br>
Para: linux-br <linux-br@bazar.conectiva.com.br>
Assunto:
(linux-br) Shell script e variaveis
Data: 12 Feb 2003 22:02:40 -0200
On Wed, 12 Feb 2003, Dorian Bolivar wrote:
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

-----BEGIN PGP SIGNED MESSAGE----Hash: SHA1


Ol,
On Wednesday, 12 February 2003 18:00, Paulino Kenji Sato wrote:
> Considere o seguinte bash script:
> #!/bin/bash
> CONTADOR=0
> find $1 -name "*.jpg" | while read f; do
>
#faz um monte de coisas aqui
>
CONTADOR=$[ $CONTADOR + 1 ]
> done
> echo "Nmero de arquivos processados: $CONTADOR"
>
> Ao executar esse script, o $CONTADOR sempre esta com o valor inicial
> 0. Eu sei por que isso acontece, o pipe abre uma nova shell.
> Como fazer para ter o valor atualizado do $CONTADOR?
Se eu entendi +/- o problema, pergunto: voc j experimentou exportar a
varivel para o ambiente, tanto na declarao quanto na atualizao?

Sim, olha
(1)
#!/bin/bash
C=0
export C
head -1 /etc/passwd | while read f; do
echo $f
C=$f
export C
done
echo "C = $C"
$ ./x
root:x:0:0:root:/root:/bin/bash
C = 0
agora se fao
(2)
#!/bin/bash
C=0
export C
head -1 /etc/passwd | ( while read f; do
echo $f
C=$f
export C
done
echo "C = $C" )

$ ./x
root:x:0:0:root:/root:/bin/bash
C = root:x:0:0:root:/root:/bin/bash
Explicao: (pelo que entendi)
No (1) o pipe (|) abre uma nova shell, e herda as variaveis, mas
no consegue devolver o que herdou ao seu ascendente.
No caso (2) tambem cria uma nova shell, mas o par () e usando para agrupar
os comandos, todo o resto da execuo ocorreu no shell filho. O pai comea
o servio e deixa para o filho terminar.
Um "scripteiro" casual como eu no lembra de usar o () para agrupar,
mesmo tendo o livro de bash a mo. :)
***********************************************************
De:
Thiago Pimentel <thiagop@infonet.com.br>
Para: Fernando Tauscheck <ferlistas@yahoo.com.br>
Cc:
linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) Argumentos em shell scripts!!
Data: 09 Mar 2003 03:38:53 -0300
On Sun, 9 Mar 2003 03:00:29 -0300
Fernando Tauscheck <ferlistas@yahoo.com.br> wrote:
>
Quero fazer uma rotina de teste para emitir uma msg de erro,
>
avisando da
> obrigatoriedade do argumento. Abaixo estou enviando meu 'GRANDE'
if test -z $1; then
echo "Passe um argumento.";
exit 0;
fi;
thiago
************************************************************
De:
Edson Olivio <edsongnu@yahoo.com.br>
Para: linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) Programao_Shell_(em_bash)
Data: 12 Mar 2003 15:52:04 -0300
Olah !!
O livro "Linux - Programao Shell" jah estah na 3a.
Edio, e continua com uma tima qualidade =]
visite este link
http://br.groups.yahoo.com/group/shell-script/
onde vc pode se cadastrar e trocar muitas ideias sobre
shell-script =]
[]'s
Edson
************************************************************
pause e CTRL+C
De:
AWK <oicrams@brfree.com.br>
Para: linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) Sobre Shell script

Data:

12 Apr 2003 19:31:50 -0300

clmr,
Voce deve usar o read com a opo '-p', assim:
$ read -p "Pressione qualquer tecla para continuar ..."
A tecla pressionada ser salva na varivel $REPLY
Para evitar o envio do CTRL-C para o programa voc deve
usar o comando 'trap' com argumento 2
[ ]'s
************************************************************
De:
Renato Q. Todorov - Webmaster Jet Sites <renato@jetsites.com.br>
Para: Daniel Ferreira <dafer@terra.com.br>
Cc:
Hever Costa Rocha <hever@barroco.com.br>, linux-br@bazar.conectiva.com.b
r
Assunto:
Re: (linux-br) Dvida sobre shell script
Data: 11 Apr 2003 14:33:29 +0000
Ou entao crie um alias!! Eh bem mais facil e pratico.. veja:
root@darkness:/# alias grande='cd /diretorio/muuuuuuuuito/longo'
root@darkness:/# grande
root@darkness:/diretorio/muuuuuuuuuito/longo#
Renato Quinhoneiro Todorov
renato@jetsites.com.br
"When you know Slackware, you know Linux...
when you know Red Hat, all you know is Red hat"

Em Sex, 2003-04-11 s 11:30, Daniel Ferreira escreveu:


> Ao invs de executar o script desse jeito:
>
> $ ./script
>
> tente fazer:
>
> $ . script
>
> []s,
-*************************************************************
De:
Glnio Crtes Himmen <glenio.himmen@bol.com.br>
Para: linux-br@bazar.conectiva.com.br
Assunto:
(linux-br) Menu em SHELL !!!
Data: 11 Apr 2003 14:43:13 -0300
Galera,
Abaixo tem um menu que uso no Red Hat 8 e no funciona, sendo que o mesmo
menu no SCO funciona...

O problema est na linha que tem o "\c" sem as aspas, este comando no SCO
faz com que o cursor torne ao final da mensagem aguradando o usurio digitar
algo e pressionar <ENTER>...
No Linux, no volta, no SCO funciona que uma maravilha...
Outra coisa, qual o comando que substitui o FINGER ???
Os dois problemas so encontrados em testes no Red Hat 8...
Algum se habilita ???
----------INICIO DO MENU----------#!/bin/sh
while true
do
clear
echo "
==========================="
echo "
Escolha o Modulo que Deseja"
echo "
==========================="
echo ""
echo "
1 - Iptu
"
echo "
2 - Issqn
"
echo "
0 - Saida Geral
"
echo ""
echo "
ESCOLHA A OPCAO -> \c"
read a
if [ "$a" = "0" ]
then exit
fi
if test "$a" = ""
then echo "\n\nOPCAO INCORRETA"
sleep 3
continue
fi
if [ $a -gt 2 ]
then echo "\n\nOPCAO INCORRETA"
sleep 3
continue
fi
if [ $a -lt 1 ]
then echo "\n\nOPCAO INCORRETA"
sleep 3
continue
fi
if [ "$a" = "1" ]
then
cd /dataflex/iptu
. ./setpath
dfrun menu
fi
if [ "$a" = "2" ]
then
cd /dataflex/issqn
. ./setpath
dfrun iss
fi
done
clear
exit

--------------TERMINO DO MENU-----------------OBS. ZAGO


neste texto tem solues para o problema apontado nesta mensagem
*************************************************************
De:
Brunhara <lista-linux@sangiovanne.com.br>
Para: Frederico Madeira <fred@rce.neoline.com.br>, Linux - BR <linux-br@bazar.
conectiva.com.br>
Assunto:
Re: (linux-br) Dvida shell
Data: 10 Apr 2003 22:29:40 -0300
Ola, Frederico Blz!!
1) wc -l arquivo
2) head -Numero-da-Linha arquivo |tail -1
----- Original Message ----From: "Frederico Madeira" <fred@rce.neoline.com.br>
Pessoal,
COmo poderia realizar as seguintes operaes no shell:
1. Contar quantas linhas um determinado arquivo tem
2. Ler apenas uma determinada linha do arquivo
*************************************************************
De:
Bruno Tinoco <brunocrt@hotmail.com>
Para: linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) Sobre Shell script
Data: 09 Apr 2003 14:53:44 +0000
Ol clmr,
No existe pause, porem voc pode simular
utilizando um "read" esperando que usurio
tecle ENTER antes de continuar a execuo do
programa
--------------------#!/bin/sh
echo "Tecle ENTER para continuar \c"
read ENTER
exit 0
--------------------Quanto ao Ctrl-C voc pode resolver
o problema capturando sinais (signals)
Em programao shell ( sh [Bourne Shell] ) existe uma
tabela de nmeros que significam um tipo de
signal:
0 Normal Comando de Sada

1 SIGHUP (Deconectou a Sesso)


2 SIGINT (Interrupo)
15 SIGTERM (Kill)
Ento voc pode bloquear o comando "Control-C"
dando um trap no signal de interrupo. Veja o
exemplo:
----------------------#!/bin/sh
trap 'sleep 10; exit 0' 2
echo "Ctrl-c desativado espere 10 segundos para finalizar o programa"
------------------------ isso a!
Abrao,
Bruno C. Reded Tinoco
brunocrt@hotmail.com
From: "clmr" <clmr@bol.com.br>
To: <linux-br@bazar.conectiva.com.br>
Subject: (linux-br) Sobre Shell script
Date: Tue, 8 Apr 2003 12:26:26 -0300
Prezados amigos
Tenho duas pequenas dvidas:
Como colcar um comando de pause em um script solicitando ao usrio
pressionar qualquer tecla para continuar e como barrar a tecla CTRL C para
evitar que quando pressionada o script seja encerrado e volte ao prompt.
*************************************************************
De:
Brunhara <lista-linux@sangiovanne.com.br>
Para: clmr <clmr@bol.com.br>, linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) Sobre Shell script
Data: 09 Apr 2003 11:22:51 -0300
sleep
trap
----- Original Message ----From: "clmr" <clmr@bol.com.br>
Prezados amigos
Tenho duas pequenas dvidas:
Como colcar um comando de pause em um script solicitando ao usrio
pressionar qualquer tecla para continuar e como barrar a tecla CTRL X para
evitar que quando pressionada o script seja encerrado e volte ao prompt.
*************************************************************
De:
Thiago Macieira <thiagom@mail.com>
Para: Renato Riolino <thenightkiller@ig.com.br>, Linux-BR <linux-br@bazar.cone
ctiva.com.br>
Assunto:
Re: (linux-br) Duvida Shell Script

Data: 06 Apr 2003 02:05:59 +0100


Renato Riolino wrote:
>Ol!
>
>Como eu faria, em shell script, para jogar um range numerico dentro de
>um for ?
>
>Algo assim:
>
>for i in [1..100]; do echo $i; done
Utilize um while:
i=1
while [ $i -lt 100]; do
printf "%02d" $i
i=$[ $i + 1 ]
done
-*************************************************************
De:
Julio Biason <slow@cscience.org>
Para: linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) Sobre scripts...
Data: 12 Apr 2003 21:33:53 -0300
Giovani Perez do Carmo <giovaniperez@ig.com.br>:
> Qual a linguagem utilizada nos scripts???
Depende do interpretador, indicado na primeira linha.
Tu pode fazer um script em bash e colocar
#!/bin/sh
Ou em Python
#!/usr/bin/python
Ou, se tu for maluco o suficiente, em Perl. :)
#!/usr/bin/perl
-*************************************************************
De:
Sthenley Macedo <sthenley@bit1.com.br>
Responder-a:
sthenley@bit1.com.br
Para: linux-br@bazar.conectiva.com.br
Assunto:
(linux-br) RE: Ajuda em Shell script
Data: 15 Apr 2003 01:25:24 -0300
Salve!
> AVVER=`cat readme.txt | tr "\n" " " | cut -d" " -f91`
> se eu der echo $AVVER vem uma beleza, mas se eu colocar echo
$AVVER.zip
>(...)
Vai depender do resto do script, mas talvez seja s a sintaxe:

Echo ${AVVER}.zip
ou
Echo $AVVER".zip"
Talvez ajude.
Virtualmente,
-**********************************************************************
De:
Syndson Silva <syndson@abeunet.com.br>
Responder-a:
syndson@linuxbr.com.br
Para: Srgio Assuno <sergio@mistermouse.com.br>, Linux-BR <linux-br@bazar.conectiv
a.com.br>
Assunto:
Re: (linux-br) Comando echo
Data: 15 Apr 2003 07:27:30 +0000
> Mas o problema que estou usando o comando echo pra gravar no arquivo
> /etc/named.conf, e preciso que o contedo da varivel $fdominio fique entre
> " " dentro do arquivo, mas nao estou conseguindo faze-lo, preciso de algo
> mais ou menos assim:
> zone "dominio.com.br"
>
>
type master;
>
file "dominio.com.br";
> };
Deixe-me entender: voc quer que as aspas sejam escritas no arquivo, cert
o?
Ento, voc deve colocar uma contrabarra antes de cada aspa. Isto tambm
vale para qualquer caracter especial que o shell interprete como comando.
Do jeito que est fazendo, se escrever:
echo "dominio.com.br"
sair -> dominio.com.br
echo \"dominio.com.br\" sair -> "dominio.com.br"
Espero ter ajudado.
Syndson Silva.

Um abrao,

*************************************************************
De:
Elias Andrade - Suporte=?us-ascii?Q?_t=E9cnico?= - Litoral On Li
ne <esan@fox.lol.com.br>
Para: Nelson <nramos@estado.com.br>
Cc:
linux-br@bazar.conectiva.com.br
Assunto:
RE: (linux-br) Shell Script
Data: 23 Apr 2003 20:41:10 -0300
Ol!,
Seguinte, d uma lida no BASH Programming Introduction HOW-TO:
http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Bash-ProgIntro-HOWTO.html
Nele h um exemplo bacana de como aplicar o "for i in", e com certeza
vai lhe ajudar, uma vez que foi a primeira documentacao que li pra poder fazer
scripts :-).
*************************************************************
De:
Marcio Merlone <mm@surf.com.br>
Para: Antonio F. Zago <zagolinux@uol.com.br>

Cc:
Nelson <nramos@estado.com.br>, linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) Shell Script 2 - a misso
Data: 28 Apr 2003 11:15:14 -0300
On 25 Apr 2003 23:40:39 -0300
"Antonio F. Zago" <zagolinux@uol.com.br> wrote:
> >
>
>
>
>
>
>
>
>
>

Que comando usar para que aparea algo como, no windows: Precione qualquer

> tecla para continuar??


Ol
Pesquise por pause neste FAQ
http://www.zago.eti.br/scripts.txt
http://www.zago.eti.br/menu.html
Zago

Eu uso o read
#!/bin/sh
printf "Pressione "S" para continuar...\n"
read bla
case $bla in
'S')
printf "Ok, vou ocntinuar entao.\n"
;;
*)
printf "Abortando...\n"
;;
esac

-Marcio Merlone
*************************************************************
De:
AWK <oicrams@brfree.com.br>
Para: Marcio Merlone <mm@surf.com.br>, Antonio F. Zago <zagolinux@uol.com.br>
Cc:
Nelson <nramos@estado.com.br>, linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) Shell Script 2 - a misso
Data: 30 Apr 2003 12:22:05 -0300
Pessoal,
mais simples do que parece, pode-se apenas usar o comando 'read' com as
opes -n e -p:
$ read -n1 -p"Pressione qualquer tecla p/ continuar..."
A tecla pressionada armazenada na varivel $REPLY
;-)
*************************************************************

De:
AWK <oicrams@brfree.com.br>
Para: Marcio Merlone <mm@surf.com.br>, Antonio F. Zago <zagolinux@uol.com.br>
Cc:
Nelson <nramos@estado.com.br>, linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) Shell Script 2 - a misso
Data: 30 Apr 2003 12:22:05 -0300
Pessoal,
mais simples do que parece, pode-se apenas usar o comando 'read' com as
opes -n e -p:
$ read -n1 -p"Pressione qualquer tecla p/ continuar..."
A tecla pressionada armazenada na varivel $REPLY
;-)
[ ]'s
*************************************************************
De:
Julio Biason <slow@cscience.org>
Para: linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) loop
Data: 25 Apr 2003 19:54:43 -0300
Jorge Dantas <jldnf@terra.com.br>:
> Pessoal, como fao um loop para o comando netstat|grep 111.111.111.11, quero
> que ele fique rodando indefinidamente.
while true; do netstat|grep 111.111.111.11; done
-*************************************************************
De:
Frederico Madeira <fred@rce.neoline.com.br>
Para: Diorgenes Mello <diorgenes.mello@ig.com.br>
Cc:
dup <debian-user-portuguese@lists.debian.org>
Assunto:
Re: (linux-br) GOTO no Shell Script
Data: 30 May 2003 09:32:38 -0300
Vc faz de forma semelhante.
Define as funes:
funcao1 ()
{
echo "OK"
}
funcao2 ()
{
echo "NOK"
}
if [ condiao for verdadeira ]
then
funcao1
else
funcao2
fi
exit 0

Frederico Madeira
fred@rce.neoline.com.br
ICQ: 37152149
Registered GNU/Linux n 206120
-----------------------------Powered by LINUX
Em Sex, 2003-05-30 s 09:02, Diorgenes Mello escreveu:
> Como funciona o GOTO(como era nos arquivos bat) em Shell script, em .bat
> ficaria tipo assim:
>
>
> ping site 1 se funcionar goto func1
>
se no goto nfunc1
> :func1
> echo Funcionou
> :nfunc1
> echo No funcionou.
*************************************************************
De:
Ricardo Guedes <baby@babylinux.dyndns.org>
Para: Marco Antnio Brugiolo Gonalves <Marco@dees.ufmg.br>, linux-br@bazar2.conec
tiva.com.br
Assunto:
Re: (linux-br) teste condicional
Data: 10 Jun 2003 22:16:59 -0400
USUARIO=`whoami`;
if [ $USUARIO == "root" ]; then
echo "Logado com: $USUARIO";
fi
Dvidas:
1o. man bash (Tem tudo l)
2o. Olhe no FAQ
3o. Olhe no Google (bash if condition) tambm em 3 minutinhos:
O quarto resultado esclarecia a tua dvida (Muita coisa mesmo...)
Ricardo Guedes
*************************************************************
De:
Felipe Kellermann <stdfk@terra.com.br>
Para: Wilson Bento Picaz Bom <wbpb2002@yahoo.com.br>
Cc:
Linux-Br <linux-br@bazar.conectiva.com.br>
Assunto:
Re: (linux-br) Script
Data: 17 Jun 2003 13:55:52 -0300
On Tue, 17 Jun 2003 8:46am -0000, Wilson Bento Picaz Bom wrote:
> Em um Script tenho uma variavel "senha". Gostaria que quando fosse
> solicitada a gigitacao ficasse mascarada: "******".
>
> Tem como fazer isto ?
$ cat senha.sh
#!/bin/sh
echo -n "senha: "
while read -s -n1 a && [ "${a/[[:ctrl:]]/}" ]
do echo -n \* && b="$b$a";
done; echo -e "\nsenha='$b'";
$ $_

senha: **********
senha='aquiasenha'
$
-*************************************************************
De:
sedrez@tecgraf.puc-rio.br
Para: Rodrigo Faria Tavares <rodrigofaria@mav.com.br>
Cc:
linux-br@bazar2.conectiva.com.br
Assunto:
RE: (linux-br)Shell
Data: Thu, 10 Jul 2003 17:32:15 -0300 (BRT)
On 10-Jul-2003 Rodrigo Faria Tavares wrote:
>#/bin/bash
>
> $i = "13";
> $j = "25";
> for $i in $i -lt 25 $i++
> do
> echo "192.168.$i.0"
> done
Rio de Janeiro, 10-Jul-2003
Cus!! Parece BASIC! E misturado com alguma outra coisa!
As variveis do shell tem o valor atribuido apenas com o nome.
i=13
j=25
O "for" do shell opera somente com uma lista de elementos. Por exemplo:
for i in 13 14 15 16 17 18 19
Se voc quiser fazer a varivel percorrer um intervalo, precisa ser feito
com "while":
i=13
i=25
while [ $i -lt $j ] ; do
...
i=`expr $i + 1`
done
Esta a verso portvel, vai funcionar em sh e ksh, tambm em outros
sistemas. Em bash, voc pode usar outra sintaxe para incrementar a varivel:
i=$[ $i + 1 ]
Ou voc pode ser criativo na hora de usar o "for":
i=13
j=25
for i in ` yes "" | cat -n | head -$[ $j - 1] | tail +$i ` ; do
...
done

----Paulo F. Sedrez
*************************************************************
De:
Anderson Lizardo <andersonlizardo@yahoo.com.br>
Para: Rodrigo Faria Tavares <rodrigofaria@mav.com.br>, linux-br@bazar2.conecti
va.com.br
Assunto:
Re: (linux-br)Shell
Data: Thu, 10 Jul 2003 16:18:25 -0300 (ART)
Em Quinta, 10 de Julho de 2003 13:51, Rodrigo Faria Tavares escreveu:
> estou iniciando em programacao de shell script fiz um simples
Aproveite e leia http://www.tldp.org/LDP/abs/html/index.html ;-)
> algoritmo fiz um chmod 755 gera_ips
> [script original]
> tem algum erro de sintaxe ?
muitos ;-). Acredito que voc esteja acostumado com o Perl, pois est
usando o "$" na frente da definio das variveis. A vai o script
corrigido:
#!/bin/bash
# ^^^^ Voc esqueceu do "!" acima
# Diferentemente do Perl, no se usa "$" na atribuio de variveis
# Tambm no necessrio ";" ao final de cada linha (embora no cause
# problema algum)
i=13
j=25
# Uma das formas de se fazer loops. veja outras em
# http://www.tldp.org/LDP/abs/html/loops.html
for ((; i < $j; i++)); do
echo "192.168.$i.0"
done
# Fim do script
-Anderson Lizardo
*************************************************************
De:
Dragon <marcio@ig.com.br>
Para: Lista Linux-BR <linux-br@bazar.conectiva.com.br>
Assunto:
(linux-br) Algumas dicas de Bash...
Data: Sat, 28 Jun 2003 15:19:46 -0300 (BRT)
#/bin/bash
# here_document.sh --- Demostra um pouco o uso do Here Document,
#
e algumas dicas de Bash.
#
# Mrcio Mendona --- oicrams@brfree.com.br
# 23-Jun-2003
#
# Usando o Here Document para comentar um bloco de texto...
: << FIM_COMMENT
Este texto digitado neste campo dever ser ignorado

pelo Bash, ou seja, tudo digitado entre o : e a string


limitadora do Here Document.
FIM_COMMENT
# Um pequeno macete...
num=80
# Note o "\>" ao invs do tradicional "-gt"
[ $num \> 50 ] && echo " \"\$t\" MAIOR que 50" || echo "\"\$t\" MENOR que 50"
# Usar [[ $num > 50 ]], tambm funciona! ;-)
# Outra dica - Uma nova forma de redirecionamento...
echo "A sada do comando \"grep '^' <(ls -l)\""
grep '^d' <(ls -l) # O mesmo que ls -l | grep '^'
========================
Mrcio Mendona
*************************************************************
De:
Anderson Lizardo <andersonlizardo@yahoo.com.br>
Para: Rodrigo Faria Tavares <rodrigofaria@mav.com.br>
Cc:
linux-br@bazar2.conectiva.com.br
Assunto:
Re: (linux-br)shell - soma de variaveis inteiras
Data: Wed, 30 Jul 2003 22:11:48 -0300 (ART)
Em Quarta, 30 de Julho de 2003 16:15, Rodrigo Faria Tavares escreveu:
> como fazer um somatorio no shell
> (...)
> no shell nao aceita j++
Aceita sim! ;-)
basta colocar a expresso entre (( e )) (timo para quem est acostumado
com programao C). Ex:
#!/bin/bash
j=1
((j++))
echo $j # Deve imprimir "2"
-Anderson Lizardo
De:
Antonio S. Martins Jr. <shadow@wnet.com.br>
Para: Rodrigo Faria Tavares <rodrigofaria@mav.com.br>
Cc:
linux-br@bazar2.conectiva.com.br
Assunto:
Re: (linux-br)shell - soma de variaveis inteiras
Data: Wed, 30 Jul 2003 21:32:52 -0300 (EST)
On Wed, 30 Jul 2003, Rodrigo Faria Tavares wrote:
>
>
>
>
>
>
>

como fazer um somatorio no shell


por exemplo :
na linguagem C++
j = 0
j++ que igual a j=j+1

>
> no shell nao aceita j++
>
> como posso fazer isso ?
>
Ola,
no shell:
j=$((j+1))
abracos,
*************************************************************
De:
claudio@conectiva.com
Para: Alisson Marques da Silva <alissonmarq@yahoo.com.br>
Cc:
linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br) Duvida prograo shell
Data: Wed, 30 Jul 2003 21:44:20 -0400 (EDT)
On Wed, 30 Jul 2003, Alisson Marques da Silva wrote:
> for USUARIO in *
>
> Como fao para em vez de percorrer o diretorio ele percorra um arquivo de
> texto com o nome dos usuarios ??
for i in `cat bla`; do
*************************************************************
De:
crg <crg3k@terra.com.br>
Para: Marco Antnio Brugiolo Gonalves <Marco@dees.ufmg.br>, linux-br@bazar2.conec
tiva.com.br
Assunto:
Re: (linux-br) teste condicional
Data: Wed, 11 Jun 2003 09:30:47 -0300
Em Tera 10 Junho 2003 20:50, Marco Antnio Brugiolo Gonalves escreveu:
> tentei escrever um script mas no meio precisei verificar
> quem era o usuario entao fiz:
>
> USUARIO=who -q
> if $USUARIO=root then
>
> Fiz uns testes e vi que a variavel USUARIO esta recebendo
> o valor correto, mas nao consigo fazer o teste condicional
> retornar valor nenhum.
>
> COMO FAO UM TESTE CONDICIONAL ?
man test
Um exemplo que eu uso em meus scriprs para verificar se eh o root:
#/bin/bash
if test $UID -eq 0
then
echo eh o root.
else
echo nao eh o root.
fi

boa sorte!
CRG
*************************************************************
De:
Igor Hercowitz <igor.hercowitz@terra.com.br>
Para: linux-br@bazar2.conectiva.com.br
Assunto:
Re: (linux-br)Shell script
Data: Mon, 1 Mar 2004 18:34:24 -0300
Ae anderson!
Ve se eh um ShellScript assim que voce quer para rodar dos jogos de Snes :)
=======[nome.sh]====================
#!/bin/bash
#Script para rodar ROMS do SNES9x
echo "Digite o nome da rom (nome.extensao)"
read ROM
snes9x $ROM
exit 0
==================================
nao se esqueca de depois torar o script executavel com chmod +x <nome.sh>
Ah sim, o nome.sh pode ser qualquer nome.
Abracos,
Igor
*************************************************************
De:
Thiago Macieira <thiago@macieira.info>
Para: linux-br@bazar2.conectiva.com.br
Assunto:
Re: (linux-br)Permissoes
Data: Fri, 12 Mar 2004 16:25:39 -0300
-----BEGIN PGP SIGNED MESSAGE----Hash: SHA1
Elisson Ferraz PUC wrote:
>Bom dia lista!
>Como q fao para rodar um shell script como root.
S tem um jeito: rode-o como root. Ou seja, faa login como root, ou use
o su ou sudo.
Scripts no podem ser setuid-root.
[corta script]
Dica: chage.
- -Thiago Macieira - Registered Linux user #65028
thiago (AT) macieira (DOT) info
*************************************************************
De:
Jeimerson C Chaves <popconta@bol.com.br>
Para: Rafael Nery <rafael.nery@uol.com.br>, linux-br@bazar.conectiva.com.br
Assunto:
Re: (linux-br)shell scripts
Data: Sat, 3 Apr 2004 11:36:39 -0300
Artigos manuscritos, de tempos esquecidos contam que em Saturday 03 April 2004

08:58, Rafael Nery Escreveu:


> Ol!
> Estou querendo comear a estudar shell scripts... Onde eu possa achar algo
> que comea desde o inicio... Uma apostila, ou um livro.
> Obrigado,
Amigo,
tem este inico veja se pode te ajudar...
man bash
shell que sera ultilizado para a pesquisa.
man test
Comando "test" ultilizado para comparar variaveis
o mesmo pode ser substituido por "[ ]"
Ex: test A = B
[ A = B ]
Obs: Os espacos em branco entre os parametros sao
importantes em toda a programcao shell.
Operadores de fluxo
if <expressao test>
then
<codigo verdadeiro>
else
<codigo falso>
fi
while <expressao test>
do
<enquanto a expressao test for verdadeiro execulta este codigo>
done
Exemplo:
for i in `ls`
do
echo $i
echo "aaa$ibbb"
done
cat arq.txt | while read a
do
echo "--- $a"
done > arq1.txt
exemplo de programas
------>> INICIO <<------#! /usr/local/bin/bash # se este script for feito em FreeBSD
#! /bin/bash # se este script for feito em linux
# Comentario

for i in `ls *.txt`


do
a= `echo $i |cut -d "." -f1`
echo "$a.jpg"
mv $i $a.jpg
------->> FIM <<-------Comandos uteis
grep <palavra> arq.txt
grep -v <palavra> arq.txt

(retorna as linhas que contem palavra)


(retorna as linhas que nao contem as plavras)

kill -9 `ps -ax | grep fw |cut -c1-5`


(deruba todos os processos que iniciem com "fw" no nome)
tar czvf teste.tgz * ( compacta todos os arquivos em teste.tgz)
tar zxvf teste.txt descompacta o conteudo de teste.tgz)
sort <arquivo original>.txt > <arquivo ordenado>.txt
(ordena o conteudo de um arquivo)
man perl

(par quem quer conhecer um shell mais poderoso )

################### Exercicio #############################


################### manutencao de matricula ################
inc.bash <matricula> <nome>
- inclui um registro matricula e nome
alt.bash <matricula <novo nome>
- Procura uma matricula se existir coloca o novo nome
exc.bash <matricula>
- Exclui um registro que tenha a matricula
bkp.bash
- faz um backp do arquivo com o formato <ANO> <MES> <DIA> <HORA>
<MINUTO>-escola.bkp
Arquivo escola.txt
-

Deve ser ordenado por matricula


Nap pode ter matricula repitida
Deve ter um registro por linha
campos matricula e nome separados por ";"

-Um grande abrao,


Jeimerson C. Chaves Administrador de Redes Grupo Diroma - BSD User = 050859
http://www.diroma.com.br/
eMail: jeimerson@diroma.com.br
Voice: +55 64 453-1586 Caldas Novas-GO, Brazil
"Aquilo que vale, no o quanto fazemos, e sim, como fazemos!"
*************************************************************
De:
Dicas-L-Owner@unicamp.br
Assunto:
[Dicas-L] Scripts para todos os gostos
Data: Tue, 15 Jun 2004 02:32:10 -0300

-------------------------------------------------------------------Comente esta dica em http://www.Dicas-L.unicamp.br/dicas-l/20040615.php


-------------------------------------------------------------------Ensinando a Ousar
http://www.idph.net/artigos/nossacomunidade/ensinando_a_ousar.php
-------------------------------------------------------------------Scripts para todos os gostos
============================
Mais alguns sites de scripts e programao:
- Cetus Links - Object-Orientation (http://www.cetus-links.org)
- FreeScripts.Com (http://www.FreeScripts.com/scripts/)
- Java Boutique (http://www.javaboutique.com)
- The Script Archive (http://www.scriptarchive.com/)
- Linux Software and Web Scripts (http://www.fortunecity.com/skyscraper/seagate/
507/)
- Script Search (http://www.scriptsearch.com/)
- CGI Resources (http://www.cgi-resources.com/)
- Shell Dorado (http://www.shelldorado.com/)
- Sandyx Systems Scripts (http://www.sandyxsystems.co.uk/scripts/)
- Compilers Net (http://www.compilers.net)
- Programmers Heaven.com (http://www.programmersheaven.com)
- PHP Coding Standard (http://alltasks.net/code/php_coding_standard.html)
Recomendao: Irado Furioso Com tudo <irado@globecom.net>
-------------------------------------------------------------------As mensagens da lista Dicas-L so veiculadas diariamente
para 25021 assinantes.
Todas as mensagens da Dicas-L ficam armazenadas em
http://www.Dicas-L.unicamp.br.
A redistribuio desta e outras mensagens da lista Dicas-L pode
ser feita livremente, deste que o contedo, inclusive esta nota,
no sejam modificados.
--------------------------------------------------------------*************************************************************