如果名称不存在,则将名称添加到列表中

时间:2014-10-07 19:44:42

标签: bash

我有一个简单的脚本来检查列表中是否存在名称,如果没有,则添加它,但是我遇到问题,因为循环永远不会停止!

我有一个名字如下的列表:

  

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

我想要做的就是,当我运行脚本时,我想检查名称是否在列表中,如果是,则不会发生任何事情,如果不是,我想要将名称添加到列表并发送电子邮件!

如果我按原样运行脚本,它就永远不会结束,并在列表中添加相同的名称!

3 个答案:

答案 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