[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: Ajuda em Bash
From: |
Andre Luis Arantes Monteiro |
Subject: |
RE: Ajuda em Bash |
Date: |
Mon, 6 Nov 2000 21:11:39 -0200 |
> Data: Mon, 06 Nov 2000 14:24:13 -0200
> De: Junior <address@hidden>
> Assunto: Ajuda em Bash
>
> Tenho os seguintes scripts...
> file-1.pl
> file-2.pl
> file-3.pl
> file-4.pl
> file-5.pl
> file-6.pl
> file-7.pl
> file-8.pl
>
>so que preciso desses scripts rodando sem parar entao estou tentando fazer um
>script em bash e
> deixa-lo no cron para verificar se o servido esta rodando ou nao...
> #!/bin/bash
> for ((i=1; i<9; i++))
> do
> x=`ps -ef | grep file-$i | grep -v grep | wc -l`;
> if ($x eq 0) then
> #inicia o servico fi done;
>o meu problema esta no if alguem pode me ajudar ???
>obs sou iniciante ok???
Olá, Junior.
Você poderia tentar um script assim:
======================Picote Aqui========================
#!/bin/bash
i=1
while [ $i -ne 9 ] ; do
if [ `ps -ef | grep "file-$i" | grep -v "grep" | wc -l` -eq 0 ] ; then
# Inicia o servico. *_por exemplo_*:
/usr/local/bin/file-$i.pl
fi
i=`expr $i + 1`
done
======================Picote Aqui========================
Não sei como os programas em Perl estão escritos; não seria mais fácil criar um
loop infinito
dentro do próprio script file-?.pl, que então ficaria rodando sem parar. Você
poderia colocá-lo
para rodar em background (file-?.pl &), e quando quisesse terminá-lo, bastaria
dar um kill -9 no
PID do processo (por exemplo, "kill -9 `pidof file-1.pl`")? É apenas uma
sugestão, que acho que
poderia ser considerada, pois aí não haveria a necessidade de se rodar o
processo no cron.
Como já disse, não sei como cada um destes scripts .pl foram escritos.
Outra observação: a notação que você utilizou { for ((i=1; i<9; i++)) }, entre
outras, *se não me engano*,
é para o C-Shell (/bin/csh). O Bourne Shell (/bin/sh) e o Bourne Again Shell
(/bin/bash) utilizam
uma notação diferente. Posso estar enganado, pois utilizo apenas o bash (em
casa) e o sh (em
um servidor HP-UX).
Espero que tenha ajudado.
Andre Luis Arantes Monteiro
Programador
(12) 565-9551 (res)
(12) 528-4240 (com)
From (no email address) Mon Nov 06 16:49:40 2000
Return-Path: <address@hidden>
X-Sender: address@hidden
X-Apparently-To: address@hidden
Received: (EGP: mail-6_2_1); 7 Nov 2000 00:49:39 -0000
Received: (qmail 5358 invoked from network); 7 Nov 2000 00:49:39 -0000
Received: from unknown (10.1.10.142) by m2.onelist.org with QMQP; 7 Nov 2000
00:49:39 -0000
Received: from unknown (HELO burns.conectiva) (200.250.58.146) by mta3 with
SMTP; 7 Nov 2000 01:50:43 -0000
Received: (qmail 12264 invoked from network); 7 Nov 2000 00:46:38 -0000
Received: from verde.distro.conectiva (10.0.17.77) by burns.conectiva with
SMTP; 7 Nov 2000 00:46:38 -0000
Date: Mon, 6 Nov 2000 22:52:33 -0200 (EST)
X-Sender: aurelio@verde.distro.conectiva
To: "'address@hidden'" <address@hidden>
Subject: Re: [shell-script] RE: Ajuda em Bash
In-Reply-To: <address@hidden>
Message-ID: <Pine.LNX.4.21.0011062250030.966-100000@verde.distro.conectiva>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=iso-8859-1
Content-Transfer-Encoding: 8BIT
From: # aurelio marinho jargas <address@hidden>
@ 6/11, Andre Luis Arantes Monteiro:
> > De: Junior <address@hidden>
> > #!/bin/bash
> > for ((i=1; i<9; i++))
> > do
> Outra observação: a notação que você utilizou { for ((i=1; i<9; i++)) },
> entre outras, *se não me engano*,
> é para o C-Shell (/bin/csh). O Bourne Shell (/bin/sh) e o Bourne Again Shell
> (/bin/bash) utilizam
> uma notação diferente. Posso estar enganado, pois utilizo apenas o bash (em
> casa) e o sh (em
> um servidor HP-UX).
oi andre,
no bash 2.04 rola essa sintaxe
/usr/share/doc/bash-2.04/NEWS:
f. There are several new arithmetic operators: id++, id-- (variable
post-increment/decrement), ++id, --id (variabl pre-increment/decrement),
expr1 , expr2 (comma operator).
g. There is a new ksh-93 style arithmetic for command:
for ((expr1 ; expr2; expr3 )); do list; done
--
s·:(·>(·×^a]×http://www.verde666.org×^[:wq
From (no email address) Mon Nov 06 17:01:11 2000
Return-Path: <address@hidden>
X-Sender: address@hidden
X-Apparently-To: address@hidden
Received: (EGP: mail-6_2_1); 7 Nov 2000 01:01:09 -0000
Received: (qmail 14879 invoked from network); 7 Nov 2000 01:01:09 -0000
Received: from unknown (10.1.10.142) by m4.onelist.org with QMQP; 7 Nov 2000
01:01:09 -0000
Received: from unknown (HELO burns.conectiva) (200.250.58.146) by mta3 with
SMTP; 7 Nov 2000 02:02:13 -0000
Received: (qmail 13557 invoked from network); 7 Nov 2000 00:57:57 -0000
Received: from verde.distro.conectiva (10.0.17.77) by burns.conectiva with
SMTP; 7 Nov 2000 00:57:57 -0000
Date: Mon, 6 Nov 2000 23:03:52 -0200 (EST)
X-Sender: aurelio@verde.distro.conectiva
To: address@hidden
Subject: Re: =?ISO-8859-1?Q?[shell-script]_pegar_versão_do_bash_(was?=
=?ISO-8859-1?Q?:_txt2regexp.sh)?In-Reply-To:
<Pine.LNX.4.30.0011031629170.30012-100000@lilica.distro.conectiva>
Message-ID: <Pine.LNX.4.21.0011062301020.966-100000@verde.distro.conectiva>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=iso-8859-1
Content-Transfer-Encoding: 8BIT
From: # aurelio marinho jargas <address@hidden>
@ 3/11, Eliphas Levy Theodoro:
> # aurelio marinho jargas, @ 16:19:
> > @ 3/11, Marcos M. S. Rezende:
> > > Como que eu posso verificar a versão do meu bash?
> > prompt$ bash -version
> > GNU bash1, version 1.14.7(1)
> >
> > prompt$ bash --version
> > GNU bash, version 2.04.0(1)-release (i386-conectiva-linux-gnu)
> > Copyright 1999 Free Software Foundation, Inc.
>
> $ echo $BASH_VERSION
> 2.04.0(1)-release
> $ bash1
> $ echo $BASH_VERSION
> 1.14.7(1)
>
> aí dá pra modificar o IFS pra pegar a versão e o release:
> #!/bin/sh
> OLDIFS="$IFS"
> IFS=.
> set - $BASH_VERSION
> IFS="$OLDIFS"
> case $1 in
> 1) echo bash1;;
> 2) echo bash2;;
> *) echo não sei...;;
> esac
beleza!
mas como o case aceita metacaracteres, nem precisa mexer no IFS:
#!/bin/sh
case $BASH_VERSION in
1*) echo bash1;;
2*) echo bash2;;
*) echo não sei...;;
esac
vou botar isso no txt2regexp.sh, valeu.
--
s·:(·>(·×^a]×http://www.verde666.org×^[:wq
From (no email address) Mon Nov 06 17:06:55 2000
Return-Path: <address@hidden>
X-Sender: address@hidden
X-Apparently-To: address@hidden
Received: (EGP: mail-6_2_1); 7 Nov 2000 01:06:55 -0000
Received: (qmail 6260 invoked from network); 7 Nov 2000 01:06:55 -0000
Received: from unknown (10.1.10.26) by m4.onelist.org with QMQP; 7 Nov 2000
01:06:55 -0000
Received: from unknown (HELO burns.conectiva) (200.250.58.146) by mta1 with
SMTP; 7 Nov 2000 01:06:23 -0000
Received: (qmail 14110 invoked from network); 7 Nov 2000 01:02:21 -0000
Received: from verde.distro.conectiva (10.0.17.77) by burns.conectiva with
SMTP; 7 Nov 2000 01:02:21 -0000
Date: Mon, 6 Nov 2000 23:08:17 -0200 (EST)
X-Sender: aurelio@verde.distro.conectiva
To: address@hidden
Subject: Re: [shell-script] ANUNCIO: txt2regexp.sh
In-Reply-To: <012301c04753$766ebb80$address@hidden>
Message-ID: <Pine.LNX.4.21.0011062304040.966-100000@verde.distro.conectiva>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=iso-8859-1
Content-Transfer-Encoding: 8BIT
From: # aurelio marinho jargas <address@hidden>
@ 5/11, Infocruz:
> Fiz o seguinte:
> rpm -qa |grep bash
também dá, mas apenas em sistemas que usam o formato de
empacotamento RPM (conectiva, red hat, suse).
outros linux como debian e slackware e ainda os unixes não usam o
RPM.
por isso é preferível usar o --version
ah! o comando acima você pode fazer simplesmente:
prompt$ rpm -q bash
> De: "Marcos M. S. Rezende" <address@hidden>
> Enviada em: Sexta-feira, 3 de Novembro de 2000 15:23
> | Como que eu posso verificar a versão do meu bash? E a propósito,
> | alguém tem um exemplo de utilização do comando dialog com
> | radio-list?
--
s·:(·>(·×^a]×http://www.verde666.org×^[:wq
From (no email address) Mon Nov 06 17:34:58 2000
Return-Path: <address@hidden>
X-Sender: address@hidden
X-Apparently-To: address@hidden
Received: (EGP: mail-6_2_1); 7 Nov 2000 01:34:57 -0000
Received: (qmail 24490 invoked from network); 7 Nov 2000 01:33:36 -0000
Received: from unknown (10.1.10.142) by m8.onelist.org with QMQP; 7 Nov 2000
01:33:36 -0000
Received: from unknown (HELO burns.conectiva) (200.250.58.146) by mta3 with
SMTP; 7 Nov 2000 02:34:27 -0000
Received: (qmail 16916 invoked from network); 7 Nov 2000 01:30:02 -0000
Received: from verde.distro.conectiva (10.0.17.77) by burns.conectiva with
SMTP; 7 Nov 2000 01:30:02 -0000
Date: Mon, 6 Nov 2000 23:35:57 -0200 (EST)
X-Sender: aurelio@verde.distro.conectiva
To: address@hidden
Subject: Re: [shell-script] renomear arquivos
In-Reply-To: <4B813DAFDA55F14EA92BFABB590081A860BCCD@wtrjo081>
Message-ID: <Pine.LNX.4.21.0010271641020.940-100000@verde.distro.conectiva>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=iso-8859-1
Content-Transfer-Encoding: 8BIT
From: # aurelio marinho jargas <address@hidden>
@ 25/10, Julio Cezar Neves - DISB.O:
> > [...]
> > olha, e sed _dá_ pra fazer, mas eu aconselho outra ferramenta.
> > o próprio awk abaixo (que eu manjo nada) tá legal, curtinho.
> > [...]
> > são 5 linhas de sed.
>
> Mas qual das 3 soluções apresentadas (awk, sed ou a clássica) será a +
> veloz?
oi julio,
acho que a de sed que eu dei tende a ser a mais lenta por usar 3
comandos sed, além do while...
a sua ficou bem limpa, mas acho que a do awk ganha por ele ser
otimizado para manipulação de texto e ser chamado apenas 1 vez.
bem, já que estamos aqui... deixa eu pegar os 3 programinhas do
histórico da lista, rodar e comparar os tempos.
mmmmmmm.m....mmm.m.mmmm interessante, vejam:
o texto:
[~] cat txt
TUDO MAIUSCULO.txt
tudo minusculo.txt
tUDo dOiDo.txt
varias VARIAS varias palaVRAS.txt
os programas:
[~] cat tst.awk
#!/bin/awk -f
BEGIN {
FS="\\ "
OFS=""
}
{
printf "mv \"%s\" ", $0
for (i=1; i<NF; i++) {
prim=substr($i,1,1)
resto=substr($i,2)
$i=toupper(prim)tolower(resto)
}
printf "\"%s\"\n", $0
}
[~] cat tst-sed.sh
#!/bin/sh
while read linha
do echo $linha |
sed 's/^/ /;s/ \+/ /;
y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;
s/ \(.\)/\n \1\n/g' |
sed '/^ /{y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/;}' |
sed ':a;$!N;s/\n//;ta;s/ //g;'"s/^/mv \"$linha\" \"/;s/$/\"/"
done
[~] cat tst.sh
#!/bin/sh
while read Linha
do
NovaLinha for Palavra in $Linha
do
NovaPalavra="`echo $Palavra|cut -c1|tr a-z A-Z``echo $Palavra|cut
-c2-|tr A-Z a-z`"
NovaLinha="$NovaLinha$NovaPalavra"
done
echo mv \"$Linha\" \"$NovaLinha\" #| cut -c2-
done
os resultados:
[~] time cat txt | ./tst.awk
mv "TUDO MAIUSCULO.txt" "TudoMAIUSCULO.txt"
mv "tudo minusculo.txt" "Tudominusculo.txt"
mv "tUDo dOiDo.txt" "TudodOiDo.txt"
mv "varias VARIAS varias palaVRAS.txt" "VariasVariasVariaspalaVRAS.txt"
real 0m0.074s
user 0m0.030s
sys 0m0.020s
[~] time cat txt | ./tst-sed.sh
mv "TUDO MAIUSCULO.txt" "TudoMaiusculo.txt"
mv "tudo minusculo.txt" "TudoMinusculo.txt"
mv "tUDo dOiDo.txt" "TudoDoido.txt"
mv "varias VARIAS varias palaVRAS.txt" "VariasVariasVariasPalavras.txt"
real 0m0.235s
user 0m0.150s
sys 0m0.050s
[~] time cat txt | ./tst.sh
mv "TUDO MAIUSCULO.txt" "TudoMaiusculo.txt"
mv "tudo minusculo.txt" "TudoMinusculo.txt"
mv "tUDo dOiDo.txt" "TudoDoido.txt"
mv "varias VARIAS varias palaVRAS.txt" "VariasVariasVariasPalavras.txt"
real 0m0.652s
user 0m0.300s
sys 0m0.300s
o awk foi BEM mais rápido, embora aqui o resultado não tenha sido o
esperado e como não manjo de awk, não pude arrumá-lo.
o sed ficou em segundo, mesmo disparando 3 processos por |
a solução somente bash demorou mais, mesmo sendo o bash o
interpretador de comandos utilizado... interessante.
um for com 2 sub-shells demora mais que 3 chamadas de sistema ao sed,
por essa eu não esperava &:)
--
s·:(·>(·×^a]×http://www.verde666.org×^[:wq
- Ajuda em Bash, Junior, 2000/11/06
- RE: Ajuda em Bash,
Andre Luis Arantes Monteiro <=