我有一个简单的脚本来检查列表中是否存在名称,如果没有,则添加它,但是我遇到问题,因为循环永远不会停止!
我有一个名字如下的列表:
name1
NAME2
NAME3
列表的名称是names.txt
b=$1
FILE=names.txt
while read F ; do
if [ "$b" != "$F" ]
then
echo "$b" >> names.txt
/home/tests/emailSend.sh
fi
done < $FILE
我想要做的就是,当我运行脚本时,我想检查名称是否在列表中,如果是,则不会发生任何事情,如果不是,我想要将名称添加到列表并发送电子邮件!
如果我按原样运行脚本,它就永远不会结束,并在列表中添加相同的名称!
答案 0 :(得分:4)
您不需要遍历该文件,只需使用grep -vx
,如下所示:
grep -xFqv "$1" names.txt && echo "$1" >> names.txt
答案 1 :(得分:0)
如果列表中的任何名称与输入不匹配,则您当前循环遍历列表并添加名称。如果所有名称不匹配,您似乎想要匹配。
b=$1
FILE=names.txt
MATCHED=false
while read F ; do
if [ "$b" = "$F" ]
then
MATCHED=true
break
fi
done < $FILE
# Now check MATCHED
if ! $MATCHED
then
echo "$b" >> names.txt
/home/tests/emailSend.sh
fi
答案 2 :(得分:0)
检查出来:
sort -u <(echo $1) names.txt > temp; mv temp names.txt