#!/bin/sh # .bashzz # também disponível em: # http://www.conectiva.com.br/~aurelio/programas/bash/funcoesZZ # # DESCRIÇÃO: # funções de uso geral para bash[12], que buscam informações em # arquivos locais e dicionários/tradutores na internet # # INSTALAÇÃO: # copie este arquivo para seu diretório "home" e inclua-o na sua shell # [prompt]$ cp .bashzz ~ # [prompt]$ echo . ~/.bashzz >> ~/.bashrc # # AS FUNÇÕES: # [prompt]$ zz # zzajuda zzdicdict zzkill zzsomahora # zzbeep zzdicjarg zzlimpalixo zztrocaarquivos # zzcalcula zzdictodos zzlinux2dos zztrocaextensao # zzdicabl zzdolar zzramal zztrocapalavra # zzdicbabel zzdominiopais zzrpmdisco # zzdicbabi zzdos2linux zzrpmdono # # DEMONSTRAÇÃO: # [prompt]$ zzdicabl estorvo # estorvo (ô) s.m. cf. estorvo, do v. estorvar # estorvor (ô) s.m. # [prompt]$ zzdolar # compra venda # LIVRE 1,8360 1,8380 # PARALELO 1,8700 1,9400 # TURISMO 1,7800 1,8600 # EURO 1,5827 1,5868 # [prompt]$ zzdominiopais cx # CX Christmas Island # [prompt]$ zzrpmdisco /mnt/cdrom/conectiva/RPMS/vim-* # 7Mb # [prompt]$ zzsomahora 12:56 03:31 # 16:27 # [prompt]$ zzcalcula '11*(2^8+sqrt(16))+0.34' # 2860.34 # # OBSERVAÇÕES: # - funções que fazem busca na internet necessitam que o pacote 'lynx' # esteja instalado, ou redefina o $ZZDUMP # - não copie e cole as funções com o mouse, pois alguns caracteres # de controle deixarão de funcionar # # AGRADECIMENTOS: # arnaldo c. de melo, wanderlei cavassin, ademar reis jr., eliphas levy, # fernando roxo, osvaldo santana neto, rodrigo missiaggia, raul dias # # REGISTRO DE MUDANÇAS: # 20000222 ** 1ª versão # 20000424 ++ cores, beep, limpalixo, rpmverdono # 20000504 ++ calcula, jpgi, gifi, trocapalavra # ++ ajuda, echozz, forzz # 20000515 ++ dominiopais, trocaextensao, kill # -- jpgi, gifi: o identify já faz # <> $* > "$@" # 20000517 <> trocapalavra -> basename no $T # 20000601 -- dicbabel: agora com session &:( # 20000612 ++ celulartim, trocaarquivo # 20000823 <> dicjarg: + palavras com # espaços (valeu wanderlei) # -- celulartim # 20000914 ++ dicabl, dicdict, dicbabel # <> nome oficial para .bashzz # -- dicdic: página fora do ar # 20000915 ++ mini-manual no cabeçalho # ** 1º anúncio externo ZZC=1 # colorir mensagens? 1 liga, 0 desliga ZZDUMP='lynx -dump -nolist' ZZSEDURL='s| |+|g;s|&|%26|g' echozz(){ [ "$ZZC" = 1 ] && echo -ne '\033[1m' ; echo -e "$*\033[m" ; } # ---------------------------------------------------------------------------- # mostra uma tela de ajuda com explicação e sintaxe de todas as funções # obs.: tátátá, é xunxo. sou preguiçoso sim, e daí &:) # não se esqueça de mudar o valor da variável $ZZARQ caso dê pau # uso: zzajuda # ---------------------------------------------------------------------------- zzajuda(){ local ZZARQ=$HOME/.bashzz # a rota completa e nome deste arquivo sed -n '1s/.*/*** ajuda das funções ZZ para bash (Q sai)/p;2s/.*/ /p;/^$/,${ s_\(\\)_\1_;s/^# //p;}' $ZZARQ | uniq | less -r } # #### U M A L I N H A / D I V E R S O S # ---------------------------------------------------------------------------- # procura um ramal num arquivo local # troque o /wb/ramais.txt pelo arquivo desejado # uso: zzramal nome-do-cara # ---------------------------------------------------------------------------- zzramal(){ [ "$1" ] && grep -i "$*" /wb/ramais.txt ; } # ---------------------------------------------------------------------------- # restaura o 'beep' da máquina # se por algum motivo o 'beep' da sua máquina parou de funcionar ou mudou a # freqüência ou duração, essa função o retorna a seu estado original # uso: zzbeep # ---------------------------------------------------------------------------- zzbeep(){ echo -ne '\033[10;750]\033[11;100]' ; } # ---------------------------------------------------------------------------- # retira linhas em branco e comentários # para ver rapidamente quais opções estão ativas num arquivo de configuração # ex.: cat /etc/inittab | zzlimpalixo # ---------------------------------------------------------------------------- zzlimpalixo(){ sed '\§^[ ]*\(#\|$\)§d' | uniq ; } # ---------------------------------------------------------------------------- # mata os processos que tenham o(s) padrão(ões) especificado(s) no nome do # comando executado que lhe deu origem # obs.: se quiser assassinar mesmo o processo, coloque a opção -9 no kill # uso: zzkill padrão [padrão2 ...] # ex.: zzkill netscape # zzkill netsc soffice startx # ---------------------------------------------------------------------------- zzkill(){ local C P ; for C in "$@" ; do for P in `ps x --format pid,comm | sed -n "s/^ *\([0-9]\+\) [^ ]*$C.*/\1/p"` do kill $P ; done ; done } # #### A R Q U I V O S (use por seu próprio risco) # ---------------------------------------------------------------------------- # encontra o pacote que tem um arquivo ou bilioteca qualquer (demora) # uso: zzrpmdono arquivo [dir-rpms] # ex.: zzrpmdono libgd # zzrpmdono lilo.conf /tmp/meus-pacotes/ # ---------------------------------------------------------------------------- zzrpmdono(){ [ "$1" ] || { echo 'uso: zzrpmdono arquivo [dir-rpms]'; return; } local D=/mnt/cdrom/conectiva/RPMS ; [ "$2" ] && D="$2" for A in $D/*.rpm ; do rpm -qlp $A | grep "$1" && echozz "@ $A" ; done } # ---------------------------------------------------------------------------- # conversão de arquivos texto entre DOS e linux # obs.: o arquivo original é gravado como arquivo.{dos,linux} # uso: zzdos2linux arquivo(s) # zzlinux2dos arquivo(s) # ---------------------------------------------------------------------------- zzdos2linux(){ local A ; for A in "$@" ; do cp "$A" "$A.dos" && chmod -x $A && sed 's/ $//' "$A.dos" > "$A" && echo "convertido $A" ; done ; } zzlinux2dos(){ local A ; for A in "$@" ; do cp "$A" "$A.linux" && sed 's/$/ /' "$A.linux" > "$A" && echo "convertido $A" ; done ; } # ---------------------------------------------------------------------------- # troca a extensão de um (ou vários) arquivo especificado # uso: zztrocaextensao antiga nova arquivo(s) # ex.: zztrocaextensao .doc .txt * # ---------------------------------------------------------------------------- zztrocaextensao(){ [ "$3" ] || { echo 'uso: zztrocaextensao antiga nova arquivo(s)'; return; } local A p1="$1" p2="$2" ; shift ; shift ; for A in "$@" ; do [ "$A" != "${A%$p1}" ] && mv -v "$A" "${A%$p1}$p2" ; done } # ---------------------------------------------------------------------------- # troca o conteúdo de dois arquivos, mantendo suas permissões originais # uso: zztrocaarquivos arquivo1 arquivo2 # ex.: zztrocaarquivos /etc/fstab.bak /etc/fstab # ---------------------------------------------------------------------------- zztrocaarquivos(){ [ "$2" ] || { echo 'uso: zztrocaarquivos arquivo1 arquivo2'; return; } local at="$HOME/.zztmp"; cat "$2" > $at; cat "$1" > "$2"; cat "$at" > "$1"; rm $at; echo "feito: $1 <-> $2" } # ---------------------------------------------------------------------------- # troca uma palavra por outra em um (ou vários) arquivo especificado # obs.: se quiser que seja insensível a maiúsculas/minúsculas, apenas # coloque o modificador 'i' logo após o modificador 'g' no comando sed # desligado por padrão # uso: zztrocapalavra antiga nova arquivo(s) # ex.: zztrocapalavra excessão exceção *.txt # ---------------------------------------------------------------------------- zztrocapalavra(){ [ "$3" ] || { echo 'uso: zztrocapalavra antiga nova arquivo(s)'; return; } local A T p1="$1" p2="$2" ; shift ; shift ; for A in "$@" ; do T=/tmp/${A##*/} cp $A $T && sed "s§$p1§$p2§g" $T > $A && rm -f $T ; echo "feito $A" ; done } # #### C Á L C U L O # ---------------------------------------------------------------------------- # calculadora: + - / * ^ % # mais operadores, ver `man bc` # uso: zzcalcula número operação número # ex.: zzcalcula 2 / 3 # zzcalcula '2^2*(4-1)' # 2 ao quadrado vezes 4 menos 1 # ---------------------------------------------------------------------------- zzcalcula(){ [ "$1" ] && echo "scale=2;$*" | bc ; } # ---------------------------------------------------------------------------- # soma o espaço em disco que um (ou mais) pacote ocupará quando instalado # uso: zzrpmdisco pacote(s) # ex.: zzrpmdisco /mnt/cdrom/conectiva/RPMS/vim-* # ---------------------------------------------------------------------------- zzrpmdisco(){ [ "$1" ] || { echo 'uso: zzrpmdisco pacotes'; return; } ; local T B r T=0; for r in $*; do B=`rpm -qp --queryformat %{SIZE} $r`; T=$((T+B)) ; done T=$((T/1024)); [ $T -ge 1000 ] && echo "$(($T/1024))Mb" || echo ${T}Kb } # ---------------------------------------------------------------------------- # soma dois horários # uso: zzsomahora horário1 horário2 # ex.: zzsomahora 12:37 08:45 # ---------------------------------------------------------------------------- zzsomahora(){ [ "$1" ] || { echo "uso: zzsomahora 12:37 08:45"; return; } local h1 h2 m1 m2 H M h1=${1%:*}; m1=${1#*:}; h2=${2%:*}; m2=${2#*:} # $h1:$m1 $h2:$m2 h1=${h1#0}; m1=${m1#0}; h2=${h2#0}; m2=${m2#0} # s/^0// M=$((m1+m2)); H=$((h1+h2+M/60)); M=$((M%60)) # min, hrs, min_sobra printf "%02d:%02d\n" $H $M } #-----------8<------------daqui pra baixo: FUNÇÕES QUE FAZEM BUSCA NA INTERNET #-------------------------podem parar de funcionar se mudarem nas páginas # #### C O T A Ç Ã O (internet) # ---------------------------------------------------------------------------- # http://www.agrural.com.br # busca a cotação do dia do dólar e do euro # uso: zzdolar # ---------------------------------------------------------------------------- zzdolar(){ local URL=http://www.agrural.com.br/indicadores/dolar.htm echozz " compra venda" ; $ZZDUMP $URL | sed -n 's/.*\<\([01],[0-9]\{4\}\)\>.*/\1/p' | sed 'N;s/\n/ /' | sed '1s/^/LIVRE /;2s/^/PARALELO /;3s/^/TURISMO /;4s/^/EURO /' } # #### D O M Í N I O S (internet) # ---------------------------------------------------------------------------- # http://www.professional.org/user-cgi/pse/domain.pl # busca a descrição de um código de país da internet (.br, .ca etc) # uso: zzdominiopais código # ex.: zzdominiopais .br # zzdominiopais org # ---------------------------------------------------------------------------- zzdominiopais(){ [ "$1" ] || { echo 'uso: zzdominiopais [.]código'; return; } local URL=http://www.professional.org/user-cgi/pse/domain.pl local INI='The domain ' ; $ZZDUMP "$URL?domain=${1#.}" | sed -n "/$INI/,$ {/$INI\|^ *$/d;s/^ */ /p;}" } # #### T R A D U T O R E S e D I C I O N Á R I O S (internet) # ---------------------------------------------------------------------------- # http://babelfish.altavista.digital.com # faz traduções de palavras/frases/textos em português e inglês # uso: zzdicbabel [i] texto # ex.: zzdicbabel my dog is green # zzdicbabel i falcão detona! # ---------------------------------------------------------------------------- zzdicbabel(){ [ "$1" ] || { echo 'uso: zzdicbabel [i] palavra(s)'; return; } local URL='http://babelfish.altavista.digital.com/raging/translate.dyn' local L=en_pt INI='^