shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] arquivo de fun��es:Conclus�o


From: moysespr
Subject: Re: [shell-script] arquivo de funções:Conclusão
Date: Mon, 26 Jan 2004 18:20:50 -0800 (PST)

Oi pessoal:

    Já faz um bom tempo que coloquei a questão vista lá embaixo. Na época
vários colegas deram sugestões pelas quais agradeço. Continuei experimentando e
testando a resposta do bash. Juntei tudo isso e apliquei no meu arquivo de
funções. Está dessa forma já faz algumas semanas e nem penso mais nele, porque
considerei a solução atual satisfatória, ao contrário do início quando estava
funcional, mas eu não gostava da forma como a seleção era feita.

        Guardei aquela mensagem justamente para não esquecer de dar retorno à
lista. Vou aproveitar o momento de baixo tráfego e liberar a minha consciência.
Para as pessoas experientes  não devo agregar nada, mas sempre lembro que deve
haver muitas pessoas começando ou, com pouca experiência, para as quais pode
haver algum benefício. E a elas lembro que, não estou dizendo que isto é o
correto ou a melhor opção, mas é uma forma que estou usando e com a qual estou
satisfeito atualmente.

Bem, agora vamos ao assunto:

        Eu optei por deixar meus scripts em um diretório que criei
específicamente para isso. É o /sh . Scripts bash estão todos lá, as excesões
que me lembro são sincronismo de relógio e conexão ppp discada, por opção
minha. Às vezes crio intencionalmente scripts, com o mesmo nome de binários
executáveis, e  que são colocados lá no /sh. O meu PATH é
/sh:/usr/bin:/bin:/usr/X11R...., assim meus scripts sempre têm precedência. Só
que é preciso lembrar, às vezes esqueço inicialmente, de colocar o path dos
binários chamados nos scripts de mesmo nome, senão lógicamente eles entram em
loop, chamando a si próprios.

Por enquanto só tenho um arquivo exclusivo de funções que chamei de "funcs" e,
claro, fica lá no /sh. Vejam que para garantir que ele seja usado corretamente
não está executável, pois deve ser executado no próprio shell que o chama:

web:~$ ls -l /sh/funcs
-rw-r--r--    1 root     root         4322 Jan 21 21:18 /sh/funcs

Para ter uma rápida descrição de cada função basta digitar:
. funcs

Para facilitar mais a busca:
. funcs|grep palavra

Para carregar funções, na console ou em qualquer script:
. funcs fun1 fun2 funx ( ou . /sh/funcs ... )

Que funções devem estar em um arquivo assim?

Considero boas candidatas aquelas que são, ou poderão vir a ser, usadas em mais
de um local. Daí não é nessário copiar em cada script e as manutenções ficam
facilitadas. O ideal ao criar funções para uso em vários locais é pensar
inicialmente em caixa preta, ou seja, simplesmente o que ela deve receber, se
como parâmetro ou via entrada padrao e, o que deve fornecer e se deve setar
status. Se o esboço foi bom ela poderá sofrer aperfeiçoamentos na forma como
funciona e o que usa, e ainda assim, os scripts onde é usada não precisarão ser
tocados, pois a forma de comunicação dela com os scripts se manteve.

Acho que chega. Coloco a seguir o meu ainda pequeno "funcs", apenas retirando
funções que me lembro de ter postado na lista para questões formuladas e outra
de tamanho maior. A essência da pauta é a possibilidade de selecionar a carga e
listar o conteúdo, justamente meu objetivo original. Se alguma das funções
tiver utilidade para alguém, melhor ainda. Elas estão no melhor formato para
copiar/colar, mas não para visulalização; para isso é só trocar os ';' por
'Enter' e formatar a gosto.
É isso. Espero que a colagem e o email não estraguem nada. Fico à disposição
para esclarecimentos.

-----ini
Arquivo=/sh/funcs # contém funções de uso geral testadas em bash 2.x

[ "$1" ]||{ echo ---;grep "\&\&eval \$F'" $Arquivo|cut -d  " " -f 2-|\
tr -s "'&" " "|cut -d" " -f 1,4-;echo ---;unset Arquivo;return;}
funcs=" $* "

function F { F="`echo "$funcs"|grep -o " $1 "`(){ #";}


#----- INICIO FUNCS -----

F hc&&eval $F'Mostra 30s de hora certa direto do US NAVAL OBSERVATORY
exec 3<>/dev/tcp/tycho.usno.navy.mil/80&&{
echo -en "GET /cgi-bin/anim HTTP/1.0\r\n\
Host: tycho.usno.navy.mil\r\n\
Content-type: application/x-www-form-urlencoded\r\n\
\r\n">&3;while read L;do [ "${L:0:3}" == "<H2" ]&&\
echo -ne "\r`date --date="${L:13:3}${L:9:4}${L:25:4}${L:15:10}-0000"`"
done<&3;exec 3<&-;echo;}
}'

F Smv&&eval $F'Comando mv seguro. Existindo no destino incrementa nome
na='';while [ -f $2$na ];do na=$[--na];done;mv -i $1 $2$na
}'

F lin&&eval $F'Insere uma linha tracejada de comprimento 80
 echo ----------------------------------------\
----------------------------------------
}'

F agora&&eval $F'Fornece o momento no formato yymmddHHMMSS
 echo -n `date +%y%m%d%H%M`
}'


F WG&&eval $F'Chama o wget com parâmetros
 wget -nv -cS --wait=60 --tries=5 --passive-ftp --proxy=off $1
}'

F d2b&&eval $F'Converte número decimal em binário
d="$1";[ $d ]||return 1;B='';while [ $d -gt 0 ];do B=$[$d%2]$B;\
d=$[$d>>1];done;[ $B ]||B=0;echo -n $B
}'

F b2d&&eval $F'Converte número binário em decimal
echo $[2#$1]
}'

F d2h&&eval $F'Converte número decimal para hexadecimal
H='';d=$1;[ $d ]||return 1;while [ $d != 0 ];do h='';r=$[$d%16]
case $r in [0-9])h=$r;;10)h=a;;11)h=b;;12)h=c;;13)h=d;;14)h=e;;15)h=f;;esac
[ $h ]||{ H=0;break;};H=$h$H;d=$[$d>>4];done;[ $H ]||H=0;echo -n $H
}'

F h2d&&eval $F'Converte número hexadecimal em decimal
[ $1 ]&&{ echo -n $[16#$1];return;};echo "???"
}'

F a2h&&eval $F'Converte asc para hexadecimal
[ $1 ]&&{ echo -n $1|xxd -p|tr -d "\n";return;};xxd -p -|tr -d "\n"
#echo -n $1|hexdump -C|cut -c9-60|tr -d " \n"
}'

F h2a&&eval $F'Converte hexadecimal para ascii
[ $1 ]&&{ echo -n $1|xxd -p -r;return;};xxd -p -r -
}'

F tecla&&eval $F'Retorna tecla listada em $1; $2=u/l saída upper/lower
T_L_='_';while [ ! "`echo "$1"|grep  "$T_L_"`" ];do read -r -s -n 1 T_L_
T_L_=`echo $T_L_|tr '[~^$.' '_'`;[ "$T_L_" ]||T_L_=_
[ "$2" == "u" ]&&T_L_=`echo $T_L_|tr a-z A-Z`
[ "$2" == "l" ]&&T_L_=`echo $T_L_|tr A-Z a-z`;done;echo "$T_L_"
}'


#----- FIM FUNCS -----
unset Arquivo funcs F 
-----fim


--- moysespr <address@hidden> wrote:
> Desejo concentrar muitas funções em um arquivo exclusivo.
> 
> Em scripts gostaria de carregar apenas as funções que vou precisar
> nele, com a chamada mais rápida e simples possível.
> 
> Se o bash tem algo exatamente para isso não consegui localizar.
> 
> De minha parte, podem apresentar "n" soluções, pois gosto de estudar
> e experimentar alternativas.
> 
> Grato.


__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free web site building tool. Try it!
http://webhosting.yahoo.com/ps/sb/


reply via email to

[Prev in Thread] Current Thread [Next in Thread]