2013-03-16 24 views
0

我爲兩個文件的比較值創建了一個腳本,並在兩種情況下輸出一個消息(成功或失敗)。但後來我意識到,即使成功,腳本也會繼續,並將第二個文件中的主變量(jbid)與所有其他變量(bsid)進行比較,這是我不想要的。當「if」遇到成功時,我希望第二個for循環結束。退出if/for success

我正在比較tmpcsv2中的'jbsid'與bkid中的'bsid'。

for jbid in `cat tmpcsv`; do #1st Loop 

    for bsid in `cat bkid`; do #2nd Loop 

     ckid=`echo $bsid | cut -d "," -f1` 
     jbsiz=`echo $bsid | cut -d "," -f2` 

     if [ "$jbid" -eq "$ckid" ]; then 
      printf "There's a match at $ckid\n" 
     else 
      printf "No Match Found at $ckid\n" 
     fi 

    done 

    printf "Check for ID $jbid done\n" 
    sleep 2 
done 

我可能正在使用一種錯誤的方式做到這一點,並打開一個更短/清晰的形式!

+0

只需在'then'後添加'break 2' – 2013-03-16 19:13:16

回答

1

只需在真正的條件分支中添加「break」即可。

此外,我對jbid和ckid之間的比較感到困惑。什麼是jbsiz?

for jbid in `cat tmpcsv`; do #1st Loop 

    for bsid in `cat bkid`; do #2nd Loop 

     ckid=`echo $bsid | cut -d "," -f1` 
     jbsiz=`echo $bsid | cut -d "," -f2` 

     if [ "$jbid" -eq "$ckid" ]; then 
      printf "There's a match at $ckid\n" 
      break 
     else 
      printf "No Match Found at $ckid\n" 
     fi 

    done 

    printf "Check for ID $jbid done\n" 
    sleep 2 
done 
+0

是的..我早先忘了...我已經修改了我的腳本,現在它工作正常....但是,感謝您的快速回復! jbsiz - >工作大小! 我的新劇本 - 爲jbid在'貓tmpcsv2' 做 \t爲BSID在'貓1bkpsid' \t做 \t \t ckid ='回聲$ BSID | cut -d「,」-f1' \t \t jbsiz ='echo $ bsid |切-d 「」 -f2' \t \t如果[$ jbid == $ ckid] \t \t然後 \t \t \t的printf 「還有的$ jbid匹配和$ ckid \ n」 個 \t \t \t睡眠2 \t \t \t休息 \t \t其他 \t \t \t printf 「上」 \t \t \t #printf「沒有找到匹配在$ jbid $ ckid \ n」個 \t \t網絡 \t做 printf的 「檢查ID $ jbid做\ n」 個 睡眠2 做 – Marcos 2013-03-16 19:46:48

1
if [ "$jbid" -eq "$ckid" ]; then 
    printf "There's a match at $ckid\n" 
    break 

這應該使第二對匹配循環結束。

0
if [ "$jbid" -eq "$ckid" ]; then 
      printf "There's a match at $ckid\n" 
      break 
     else 
      printf "No Match Found at $ckid\n" 
     fi 

then - else之間加入中斷;像上面的代碼一樣。

+0

沒有,加上'休息2',以便從2'for'打破。 – 2013-03-16 19:19:43

+0

對不起,你們三個人都是正確的.....但我可以選擇只有一個(我試過但只允許一個正確的答案!) 非常感謝大量的回覆! – Marcos 2013-03-16 19:50:34