Copiando um trecho do livro "Bombando o Shell
<http://www.brasport.com.br/informatica-e-tecnologia/linux/bombando-o-shell-caixas-de-ferramentas-graficas-do-shell-linux/>"
que apresenta diversas ferramentas gráficas do Shell, inclusive o novÃssimo
e fantástico yad.
==================================
Diálogo --gauge
Onde:
<Percent> - à um opcional que indica a percentagem inicial (o padrão é zero)
Uma caixa --gauge mostra uma barra de progresso que vai aumentando a medida
que valores são passados para sua entrada primária.
Além destes valores, também podemos passar texto para este diálogo. A forma
de fazê-lo é a seguinte:
-
Abra o processo de comunicação com o --gauge mandando o texto XXX para
sua entrada primária;
-
Agora se você mandar números para a entrada primária, eles serão
considerados atualizações do percentual de tarefa cumprida;
-
Se você mandar texto ele será colocado na parte superior da caixa,
abaixo da linha do --title;
-
Para encerrar o processo de comunicação, envie novamente o texto XXX.
Se o XXX não for usado, o texto recebido por sua entrada primária será
ignorado, mas os valores serão entendidos e atualizarão a percentagem
cumprida.
A seguir um exemplo simples do uso deste diálogo:
*Perc=*
*while ((Perc <= 100))*
*do*
*echo $Perc*
*((Perc++))*
*sleep 0.05*
*done |*
*dialog --clear --title "Teste do --gauge no dialog" \*
*--gauge 'Se segura ...' 7 30 0*
Se você executar este fragmento de programa, verá que apesar dele não ter a
tal sequência XXX, a percentagem é atualizada. Porém se houvesse texto, ele
seria ignorado.
Agora um exemplo mais completo:
*$ cat gauge1.dlg*
#!/bin/bash
## Script para testar o diálogo --gauge
Perc=
Pont='|/â\' # Para fazer um hélice do lado direito
m=m # Somente para alterar o verbo falta/faltam
while ((Perc <= 100))
do
echo XXX # Marca inÃcio de msgs para o gauge
echo $Perc
echo Incremento a cada 20 centésimos de segundo
echo -n " Falta$m \Zb\Z1$[100-Perc]%\ZB\Zn "
echo para completar a tarefa ${Pont:((Perc%4)):1}
echo XXX # Marca fim de msgs para o gauge
let Perc++
## quando estiver acabando 'faltam' perde o 'm'
#+ e a hélice é desligada
((Perc>98)) && { m=; unset Pont; }
sleep 0.20
done | dialog --clear --colors --title \
"Teste Gauge no dialog" --gauge "" 7 46 0
[image: Imagem inline 1]
Neste exemplo, ainda montei um hélice só de gozação. A variável $Pont recebe
os quatro componentes do hélice na ordem que serão exibidos e a expressão
${Pont:((Perc%4)):1} extrai um caractere de $Pont, cuja ordem é o resto da
divisão de $Perc por 4, isto é, para resto=0 extrai e escreve |, para
resto=1 extrai e escreve /, para resto=2 extrai e escreve â e para resto=3
extrai e escreve \.
Veja ainda que o conteúdo das linhas que estão entre o par de XXX está
sendo exibido. O conteúdo de $Perc, por ser numérico, atualiza a barra de
progresso, ao passo que as outras saÃdas atualizam a exibição das
orientações passadas ao usuário.
Pode parece maluquice ou sujeira, mas no duro, as cadeias iniciadas
por \Z, servem
como parâmetros de formatação de cor e estilo dos caracteres, desde que a
opção genérica* --colors *seja usada, quando as cores obedecem a seguinte
tabela:
*Código Z*
*Valor*
0
black
1
red
2
green
3
yellow
4
blue
5
magenta
6
cyan
7
white
Para voltar à cor padrão, usa-se \Zn.
A formatação de estilo pode ser feita de acordo com a seguinte tabela:
*Atributo*
*Liga*
*Desliga*
Ãnfase
b
B
Reverso
r
R
Sublinhado
U
U
Os atributos são cumulativos, assim sendo, a cadeia \Zb\Z1 coloca o texto
em modo ênfase (*bold*) e em vermelho e a cadeia \ZB\Zn desfaz ambos.
Como --colors é uma opção genérica, pode ser usada nos textos de todos os
diálogos.
Para evitar-se aquele monte de echo que foi usado no exemplo anterior,
poderÃamos tê-los substituÃdo todos com o uso de *Here Documents*, da
seguinte forma:
*$ cat gauge2.dlg*
#!/bin/bash
## Script para testar o diálogo --gauge
Perc=
Pont='|/â\' # Ponteiros de um hélice do lado direito
m=m # Somente para alterar o verbo falta/faltam
while ((Perc <= 100))
do
cat <<- FIM # InÃcio do Here Document
XXX # Marca inÃcio de msgs para o gauge
$Perc
Incremento a cada 20 centésimos de segundo
Falta$m \Zb\Z1$[100-Perc]%\ZB\Zn para\
completar a tarefa ${Pont:((Perc%4)):1}
XXX # Marca fim de msgs para o gauge
FIM # Fim do Here Document
let Perc++
## Quando estiver acabando, 'faltam' perde
#+ o 'm' e o hélice é desligado
((Perc>98)) && { m=; unset Pont; }
sleep 0.20
done | dialog --clear --colors --title \
"Teste Gauge no dialog" --gauge "" 7 46 0
Neste código cabem algumas observações:
-
O hÃfen após os dois sinais de menor (<<-) foi usado para permitir a
indentação do código, mas para fazer isso, só podemos únicamente usar
<TAB>. Os espaços em branco serão condiderados texto, como pode ser
visto na linha começada por Falta$m;
-
A indentação mesmo assim não fica boa e por isso o código perde um pouco
a legibilidade.
Diálogo --mixedgauge
Onde:
<Percent> - Ã um opcional que indica a percentagem inicial da barra de
progresso acumulado (o padrão é zero).
<Tit> <Status> - São o nome a ser exibido e o percentual de atualização ou
o *status* deste campo (Veja tabela a seguir com os códigos de *status*).
<Status> pode receber dois tipos de valor inteiro:
-
-Valor: o valor absoluto (módulo) de -Valor será apresentado nno centro
da barra parcial seguido de um sÃmbolo de percentual (%) e a barra de
progresso correspondente será atualizada para este valor;
-
DÃgito: Um digito entre 0 e 9 será substituÃdo pelo valor correspondente
na tabela a seguir:
*DÃgito*
*informado*
*Será*
*exibido*
0
Succeeded
1
Failed
2
Passed
3
Completed
4
Checked
5
Done
6
Skipped
7
In progress
8
(blank)
9
N/A
A função deste diálogo é fazer diversas barras de progresso simultaneamente
e mais uma barra que marca o progresso global, isto é, o percentual gerado
entre o valor global e o somatório dos percentuais parciais.
Este diálogo não está preparado para aceitar dados da entrada primária (
*stdin*) como o --gauge.
à muito difÃcil de arranjar bons exemplos de uso deste diálogo, creio no
entanto que a partir do bash 4.0, que implementou o uso de *threads* usando
o comando coproc, que este diálogo se tornará muito útil para medir o
desempenho dos processos que agora podem ser disparados simultaneamente.
Veja este exemplo, ele é um pouco longo, mas sua lógica é bastante simples.
*$ cat mixedgauge1.dlg*
#!/bin/bash
## Demonstração do diálogo --mixedgauge
function Gauge
{
dialog --title "Demo do diálogo --mixedgauge" \
--mixedgauge "O texto neste diálogo virá aqui" \
0 0 $6 \
"Um processo que será bem concluÃdo:" $1 \
"Processo aos trancos e barrancos:" $2 \
"Um processo que será bem concluÃdo:" $3 \
"Este processo está todo bichado:" $4 \
"Processo p/ fechar com chave de ouro:" $5
sleep 0.1
}
# Um processo que será bem concluÃdo
for ((i=1; i<100; i++))
do
Gauge -$i -0 -0 -0 -0 $((i/5))
done
# Processo aos trancos e barrancos
for ((i=0; i<50; i+=10))
do
Gauge 3 -$i -0 -0 -0 $((i/5+20))
sleep 1.5
done
# Um processo que será bem concluÃdo
for ((i=1; i<100; i++))
do
Gauge 3 6 -$i -0 -0 $((i/5+40))
done
# Este processo está todo bichado
for ((i=1; i<30; i++))
do
Gauge 3 6 3 -$i -0 $((i/5+60))
done
# Processo p/ fechar com chave de ouro
for ((i=1; i<100; i+=2))
do
Gauge 3 6 3 1 -$i $((i/5+80))
done
Gauge 3 6 3 1 5 100 # Atualiza status=5 do último proc.
[image: Imagem inline 2]
Neste *script* como você pode ver, foram usados diversos comandos for para
simulações de diversas situações que vão desde um fim normal e esperado,
até um aborto de processo.
O que merece destaque são somente as linhas que chamam a função Gauge. Elas
passam os parâmetros para cada uma das barras de progresso parciais e o
último parâmetro é para a barra global.
Durante cada for o valor da variável $i é passado com sinal negativo para
que seja atualizada a barra correspondente. Para as barras anteriores é
passado o *status* do término daquele processo e para as barras que não
foram processadas é passado o valor -0, que é um erro matemático, porém é
assim que se indica um progresso de 0% para uma determinada tarefa.
Abcs,
Julio
*âDamos treinamento em sua empresa por *
*um preço, no mÃnimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*
ââ
Nosso time de instrutores *in company* é formado somente por
â
â
autores
â â
â
de
*Best Sellersâ â*âlaureados âsobre os temas. P. exemplo:
Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Post by Maicon Radeschi ***@gmail.com [shell-script]Bom dia pessoal,
Estou trabalhando em um script para administração e monitoramento de
alguns firewalls e proxys que tenho aqui no trabalho(umas 100 máquinas
+/-), para auxiliar o pessoal do noc daqui.
Tenho uma função para um ping simples que fiz, que exibe uma barra de
progresso enquanto o comando é executado, meio fake mas funciona e gostaria
de fazer algo parecido para outros comandos, como traceroute, iperf, etc,
porém não tenho tido êxito de usar a mesma função para outros comandos,
alguém teria uma idéia diferente?
Segue a função do ping abaixo,
function _ping(){
$ping_log
pings="10"
percent="0"
ping -c $pings $1 1>&2 > $ping_log&
( while true;
do
ps ax | grep -i "ping -c $pings $1" | grep -v grep >/dev/null
if [ "$?" -eq "0" ]; then
percent=$(( percent + $pings ))
if [ "$percent" -le "100" ];then
echo $percent
fi
sleep 1
else
echo "100"
sleep 1
break;
fi
done ) | dialog --clear --no-cancel --stdout --backtitle 'Teste' \
--title "Aguarde..." \
--gauge "Pingando $1" \
8 40 0
if [ "$(cat $ping_log)" == "" ]; then
_displayMessage "FALHA" "Impossivel pingar o endereco $1\n\n Verifique as
configurações de DNS da maquina ou se o link de internet e rede estao
ativos"
else
_displayText "Resultado do ping para $1" "$ping_log"
fi
}
Obrigado!
Maicon Radeschi
--
---
Maicon Radeschi
[As partes desta mensagem que não continham texto foram removidas]