在这个例子,我提到我有 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} ]