2016-08-17 10 views
0

私のbashスクリプトにいくつか問題があります。私は内側のwhileループをbashスクリプトで持っています。しかし、私はいくつかの問題を最初のループまたは2番目のループに継続している。whileループbashを続ける

たとえば、最初の内側のループが真でない場合は、2番目の内側のループに進みます。しかし、毎回ループの1つだけが機能しています。したがって、両方のループは、適切なイベントが発生したときに常に動作する必要があります。

これはスクリプトです:

#!/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つの機能を持つことを意味します。もう一方の関数で2つの内側ループを呼び出しますか?ありがとうございました。 –

+0

はい、それはより良い選択肢となり、より良いコントロールが得られます。これが役立つ場合は、回答を受け入れてください。 –

+0

最初のwhileループでif/elseを追加して、ループ関数のwhileを呼び出すのですか?私はそれを試して、それがうまくいくならばオフコースを受け入れるでしょう! –

関連する問題