bash 和函数检测重复数据

bash 和函数检测重复数据

这个例子,我提到我有 2 个列表。

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

当我执行命令时(感谢ccs242):

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

我收到重复的

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

现在,我想使用 bash 脚本自动执行此过程,因此,如果未找到重复项,则运行某个命令,但如果脚本检测到重复项,则中止并将重复项保留在 /var/log/syslog 中

这是我的脚本:

 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

问题在于:

  [ ${acls} == '' ]

我该如何修复它?

答案1

如果有多个重复项,则$acls每个新行都会包含一个空格,并且该命令在语法上是不正确的。您需要的是:-

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

这会强制在两个字符串之间进行比较。正如您的问题中所述,您可以使用''而不是"",但我更喜欢在比较的两边使用相同类型的引号。

答案2

尝试以下方法:

if [ -z ${acls} ]

相关内容