ajuda com script; se o status é isso que se não fazer outra coisa

0

Eu preciso escrever um script que verifique o status de alguma coisa. Se o status "Copiar", em seguida, sair (ou tente novamente em 60 minutos, se quisermos ficar chique.) Se tudo não houver nada retornado (com base no meu segundo comando, ou seja, tudo está em sincronia), faça outra coisa.

Se estiver copiando; sair ou tentar novamente em 60 Se NULL; faça mais coisas.

root@box:~$ ./prog status
  PyDsk /home       In Sync
  PyDsk /trax       Copying 85% complete
  PyDsk /trax2      In Sync
  PyDsk /trax3      Copying 97% complete
  PyDsk /traxnl     Copying 50% complete
  PyDsk /traxnl2    Copying 69% complete
  PyDsk /traxnl3    Copying 56% complete
  PyDsk /traxnl4    In Sync
  PyDsk /traxnv     In Sync
  PyDsk /traxnv2    In Sync
  PyDsk /ulog       In Sync



root@box:~$ ./prog status | grep complete | awk '{print $3;}'
Copying
Copying
Copying
Copying
Copying

editar; Estou aberto a qualquer outra maneira de conseguir isso. Eu não sou casado com como eu comecei as coisas ... é apenas a única maneira que eu poderia pensar. Se tem algo mais elegante, eu levo isso:)

edit2; redigido. Eu estou indo escuro.

    
por LVLAaron 02.02.2012 / 13:55

3 respostas

2

Eu sou novo na programação bash. Portanto, é muito provável que alguém possa apresentar uma solução mais elegante, mas aqui está a minha;

#!/bin/bash
count='./prog status | grep complete | awk '{print $3}' | wc -l'
zero="0"
if [ "$count" -eq "$zero" ]
then echo "all done."
else echo "wait a little more and try again."
fi

A variável de contagem é o número de operações de cópia. Se count for igual a zero, o que significa que não há operação de cópia em andamento, o script imprime tudo feito, caso contrário, imprime espere um pouco mais e tente novamente. Você pode alterar as linhas que contêm eco com seus próprios comandos. Espero que ajude.

    
por 02.02.2012 / 14:31
3

Você poderia fazer algo mais simples assim:

[[ -n $(./prog status | awk '/complete/ {print $3}') ]] && echo "foo"

Esta linha só ecoará "foo" se a saída do seu comando estiver vazia.

    
por 02.02.2012 / 16:19
1

Complete parece aparecer apenas no status Copiando. Portanto, não importa qual dos dois está sendo verificado.

while ( ./prog status|grep -qw complete 2>/dev/null )
  do
    echo Waiting one hour for copy to complete.
    sleep 3600
    # or exit if you like to
done
# Synced, do whatever is to be done
    
por 02.02.2012 / 21:48