2017-07-29 142 views
0

我得到了一個bash腳本,它從不同的.txt文件讀取urls(ven數組定義txt文件),然後對它們進行卷曲,如果響應代碼不是200,則在error.txt中寫入錯誤bash循環出錯

不幸的是,它總是在最後,即使在任何鏈接沒有錯誤,爲什麼?

for i in "${ven[@]}"; do 
     while IFS='' read -r line || [[ -n "$line" ]]; do 
         IP=$(curl --write-out '%{http_code}' --silent --output /dev/null $line?upstream=$1) 
           if [ $IP != 200 ] 
           then 
           counter=$((counter + 1)) 
           echo $(date +"%d.%m.%y %T") : $line >> error.txt 
           fi 
     done < $i 
done 
+0

虛擬陣列中最後一個冒號? –

+0

ven =(「1.txt」「2.txt」「3.txt」「4.txt」) - 對我來說看起來不錯 - 我錯過了smth? – Isengo

+0

這是一個假的文本文件之一:/一行我在2.txt – Isengo

回答

1

你的腳本有一些報價的問題,但主要問題是不一致的使用測試表達式括號(雙對單)和你如何檢查的數量。

if [[ "$IP" -ne 200 ]] 

-ne表示「不等於」,既然你已經使用過雙括號保持一致。

其他的東西是在路上更預防性你引用變量:

for i in "${ven[@]}"; do 
    while IFS='' read -r line || [[ -n "$line" ]]; do 
     IP=$(curl --write-out '%{http_code}' --silent --output /dev/null "$line?upstream=$1") 
     if [[ "$IP" -ne 200 ]]; then 
      counter=$((counter + 1)) 
      echo "$(date +'%d.%m.%y %T')" : "$line" >> error.txt 
     fi 
    done < "$i" 
done 

注:如果一個網站重定向(301),那麼它會顯示一個錯誤 - 東西也許考慮。

+0

監督這似乎並不是問題,但謝謝你指出。我還沒有用bash做很多事情。我會得到一位編輯指出格式化的東西。 301重定向也應該拋出一個錯誤,因爲URL不應該被重定向 - 但是謝謝。 – Isengo

+0

進行更改後腳本正常工作;如果你在你的問題中缺少代碼,你應該添加它,因爲它在這裏不可重現。 (例如'counter = $((counter + 1))'是無用的)... –

+1

發現了錯誤,在其中一個txt文件中出現了一個emtpy行。謝謝。我後來使用計數器記錄數字(echo -e'Curl Requests''counter'Errors'>> error.txt) – Isengo