while循环不迭代文件

时间:2013-11-25 04:25:22

标签: linux bash shell

我正在尝试将ID添加到文件中。该文件如下所示:

field1:field2:field3:field4

我想检查第二个字段是否已经存在(向用户输出消息),或者它是否存在(一旦我从用户那里获得更多信息,就将其添加到文件中)。我已经写了一个循环来完成这个,但每当我运行这部分脚本时它就会滞后而且永远不会执行。我认为问题是我的while循环没有正确捕获每一行。

 40 checkID()
 41 {
 42 
 43     local input
 44     local line
 45     while : ; do
 46         read -p "Enter id (or ENTER to quit):" input
 47         [ -z "$input" ] && return 1
 48         while read line; do
 49                 if ! grep -q "$(cut -d: -f2)" "$file"; then
 50                         echo "$input"
 51                 else    
 52                         error "id '$input' already exists in the file"
 53                 fi
 54         done
 55     done
 56 }

1 个答案:

答案 0 :(得分:0)

您根本不需要while read循环,并且您希望cut从文件而不是用户读取。

要在第二列中找到某个文件,可以使用

if cut -d: -f2 "$file" | grep -q "$input"
then
    echo "Found it"
fi

另请注意,这是一个子字符串匹配,因此如果输入为“foo”,它将匹配第二个字段为“food truck”的文件