2016-08-17 6 views
0

У меня возникли проблемы с моим скриптом bash. У меня есть внутренняя петля в сценарии bash. Но у меня проблемы с продолжением первого цикла или во втором цикле.Продолжить while loops bash

Я хочу, например: когда первый внутренний цикл не является истинным, продолжайте второй внутренний цикл. Но все же каждый раз работает только одна из циклов. Таким образом, обе петли должны работать все время, когда происходит правильное событие.

Это сценарий:

#!/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=('1' '0' '5' '0' '7' '2' '0' '13' '0' '18' '0' '0' '7' '0' '6' '0' '0' '1' '3' '0' '0' '0' '3' '0')  

logDir=/var/atlassian/application-data/jira/log 
logIng=$logDir/atlassian-ing-security.log 
logJira=$logDir/atlassian-jira-security.log  


function abc {  

while true; do 
currentMinute=$(date +%S) 
currentHour=$(date +%k) 
currentDay=$(date +%u) 
currentWeek=$(date +%W)  

    if [[ $currentMinute == 00 ]]; 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 "" --title "" \ 
      --findReplaceRegex "<tr><td>$i</td><td>(\d*)</td></tr>:<tr><td>$i</td><td>${hourlyScan[$i]}</td></tr>" 
     done 
    else 
     continue 2 
    fi  

    fi 


    tail -n0 -F $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  

    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  

    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  

    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 
    else 
     continue 2 
    fi 
    done  

done  

}  

abc  

ответ

0

Я предлагаю использовать внутреннюю петлю на другую функцию и называть его всякий раз, когда это необходимо.

+0

Таким образом, вы имеете в виду наличие 3 функций. И вызвать две внутренние петли в другой функции? Спасибо. –

+0

Да, это будет лучший вариант, и у вас будет лучший контроль. Примите ответ, если это поможет. –

+0

Итак, в первом цикле while добавьте if/else, которые вызывают другие функции цикла while? Я попробую, и согласимся, если это сработает! –