txt
Dicas pra criar scripts, modelos e FAQ com mensagens da Linux-br.
Use CTRL+F para refinar a pesquisa.
Linha de:
****************
********************************************************
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
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.
************************************************************
************************************************************
************************************************************
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:
>
>
>
>
# 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{@_};
************************************************************
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 :
************************************************************
> 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
. } pack .
; destroy
-
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.
---------------------------------------------------------------------
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
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
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
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 LIST
do LIST
done
wich*
wich
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
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>
(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
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:
>
>
>
>
>
>
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?????
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:
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"
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
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
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
>
> 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