我有問題要打開while循環並從while循環的開始處開始。我想循環檢查連續檢查時間是否等於59秒,如果不去while循環檢查日誌文件。內部while循環只能在日誌文件中找到特定的內容時執行某些操作。Break while while循環並轉到if/else
編輯:新腳本。問題是,while循環不運行,不回去,在其他環
腳本再次調用該函數的功能:
#!/bin/bash
counterSearch=0
counterIssue=0
counterPassed=0
counterFailed=0
counterSearchPassed=0
counterSearchFailed=0
counterIssuePassed=0
counterIssueFailed=0
counterTotal=0
counterHourly=0
counterAddHourly=0
declare -a hourlyScan=('6' '0' '5' '0' '7' '2' '0' '13' '0' '18' '0' '0' '7' '0' '6' '0' '0' '1' '3' '0' '0' '0' '3' '0')
function readLogFile {
tail -n0 $logJira | \
while read line ; do
if echo "$line" | grep -e "/rest/api/2/search.*PASSED" 1>/dev/null 2>&1 ; then
echo "$date - Search and passed API action" >> $logIng
counterSearch=$((counterSearch+1))
counterPassed=$((counterPassed+1))
counterHourly=$((counterHourly+1))
counterTotal=$((counterTotal+1))
echo "$date - Total Passed API Authentication: $counterPassed" >> $logIng
echo "$date - Total search API actions: $counterSearch" >> $logIng
continue 2
elif echo "$line" | grep -e "/rest/api/2/search.*FAILED" 1>/dev/null 2>&1 ; then
echo "$date - Search and failed API action" >> $logIng
counterSearch=$((counterSearch+1))
counterFailed=$((counterFailed+1))
counterHourly=$((counterHourly+1))
counterTotal=$((counterTotal+1))
echo "$date - Total Failed API Authentication: $counterFailed" >> $logIng
echo "$date - Total search API actions: $counterSearch" >> $logIng
continue 2
elif echo "$line" | grep -e "/rest/api/2/issue.*PASSED" 1>/dev/null 2>&1 ; then
echo "$date - Issue and Passed API action" >> $logIng
counterIssue=$((counterIssue+1))
counterPassed=$((counterPassed+1))
counterHourly=$((counterHourly+1))
counterTotal=$((counterTotal+1))
echo "$date - Total Passed API Authentication: $counterPassed" >> $logIng
echo "$date - Total issue API actions: $counterIssue" >> $logIng
continue 2
elif echo "$line" | grep -e "/rest/api/2/issue.*FAILED" 1>/dev/null 2>&1 ; then
echo "$date -Issue and Failed API action" >> $logIng
counterIssue=$((counterIssue+1))
counterFailed=$((counterFailed+1))
counterHourly=$((counterHourly+1))
counterTotal=$((counterTotal+1))
echo "$date - Total Failed API Authentication: $counterFailed" >> $logIng
echo "$date - Total issue API actions: $counterIssue" >> $logIng
continue 2
fi
done
}
function runner {
while true; do
currentMinute=$(date +%S)
currentHour=$(date +%k)
currentDay=$(date +%u)
currentWeek=$(date +%W)
if [[ $currentMinute -eq 59 ]]; then
if [[ ${#hourlyScan[@]} -eq 24 ]]; then
unset hourlyScan[23]
hourlyScan=($counterHourly "${hourlyScan[@]}")
counterHourly=0
for i in "${!hourlyScan[@]}"; do
$cliScript --server $cliServer --user $cliUser --password $cliPass --action modifyPage --space "VEN" --title "API Usage Monitoring" \
--findReplaceRegex "<tr><td>$i</td><td>(\d*)</td></tr>:<tr><td>$i</td><td>${hourlyScan[$i]}</td></tr>"
done
fi
else
readLogFile
fi
done
}
runner
你能想出一個簡短的例子,演示相同的問題?目前尚不清楚這與您之前的問題有何不同。 – chepner
不會把第二個while循環作爲「if -eq 59」工作的其他情況嗎?你有什麼嘗試? – lynxlynxlynx
如果我將它放在else語句中,那麼它不適用於tail語句。我在外部while循環中嘗試了兩個while循環,但也沒有工作.. –