bash e função para detectar dados duplicados

0

Em este exemplo , menciono que tenho duas listas.

list1
x;00:26:82:50:00:00;192.168.1.195;COMPUTER1
x;00:26:82:50:11:11;192.168.1.195;COMPUTER2
x;00:26:82:50:22:22;192.168.1.196;COMPUTER3

list2
x;00:26:82:50:11:11;192.168.1.197;COMPUTER3

E quando eu executo o comando (graças a ccs242 ):

for field in 2 3 4; do cut -d\; -f${field} list* | sort | uniq -d; done

Eu recebo duplicatas

00:26:82:50:11:11
192.168.1.195
COMPUTER3

Agora, quero automatizar esse processo usando um script bash, portanto, se ele não encontrar duplicatas, execute um determinado comando, mas se o script detectar duplicatas, aborta e deixa as duplicatas em / var / log / syslog

Este é o meu script:

 pathlist=/etc/doc

 function duplicate(){
     acls='for field in 2 3 4; do cut -d\; -f${field} $pathlist/list* | sort | uniq -d; done'
     if [ ${acls} == '' ]; then
     echo OK
     #run a command foo
 else
     echo "Duplicate Data. Abort. Check /var/log/syslog"
     echo $acls >> /var/log/syslog
     exit
  fi
 }
 duplicate

O problema está aqui:

  [ ${acls} == '' ]

Como posso corrigir isso?

    
por bdc 14.04.2017 / 22:52

2 respostas

1

Se houver mais de uma duplicata, $acls conterá um espaço para cada nova linha e o comando estará sintaticamente incorreto. O que você precisa é: -

[ "${acls}" == "" ]

Isso força a comparação entre duas strings. Como na sua pergunta, você pode usar '' em vez de "" , mas eu prefiro usar o mesmo tipo de aspas nos dois lados de uma comparação.

    
por 14.04.2017 / 23:23
0

Tente assim:

if [ -z ${acls} ]
    
por 14.04.2017 / 22:56