2013-11-25 240 views
0

我試圖將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 } 
+3

** 48 **行表示它需要**輸入stdin。你嘗試輸入什麼? @Whoppa – akawhy

回答

0

你不想while read循環也沒有,你想cut從文件而不是用戶閱讀。

要找到在第二列的東西一個文件,你可以使用

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

另外請注意,這是一個字符串匹配,因此,如果輸入「富」,它將匹配一個文件,其中第二場是「食品卡車」

+0

我想檢查每一行的第二個字段。我將ID存儲在每行的第二個字段中。其他字段存儲與該ID相對應的信息。這就是爲什麼我使用while循環。 – Whoppa