2014-11-13 2 views
1

WAS 서버의 상태를 점검하여 서버가 STARTED 또는 FAILED인지 확인하는 스크립트를 작성했습니다. 서버에는 2 개의 JVM이 있습니다. 따라서 JVM 중 하나가 가동 중인지 확인하려면 uniq 명령을 사용하고 있습니다.쉘 스크립트의 변수에 uniq 명령의 출력을 할당하는 방법

는 JVM1가 실패있어 및 JVM2가 시작 말할 수 있습니다, 그래서 아래의 명령

sh /home/wasprofile/`hostname`/bin/serverStatus.sh -all > /tmp/ServerState 

grep "Application Server" /tmp/ServerState|awk '{print $7}'|uniq 

은 출력이 표시됩니다 : 그래서 지금은 두 개의 서로 다른 변수이 출력을 할당하는 방법을

FAILED 
STARTED 

을 런타임에 ?? 나는 이런 식으로 뭔가 의미 : 이것에 어떤 도움이 정말 감사합니다

a=FAILED 
b=STARTED 

합니다.

+1

여기에 '유니크'를 원하십니까? 당신은 항상 생산 라인을 원하지 않습니까? 'uniq'를 사용하면 같은 상태 일 때 한 줄의 출력 만 얻을 수 있습니다. 또한'grep'은'awk'가 그 일치를 할 수 있기 때문에 필요 없습니다. –

+0

@EtanReisner 그 다음에 if-else 조건에 해당 한 행 출력을 사용하기 때문에 JVM이 둘 다 또는 둘다 작동하지 않을 때 uniq 명령을 사용하면 문제가 없습니다. JVM 중 하나가 작동 중이고 다른 하나가 작동하지 않을 때만 문제가 발생합니다 ... grep 대신 awk 제안에 대해 감사 드리며 그에 따라 스크립트를 수정했습니다. –

답변

0

당신은 프로세스 대체와 read를 사용할 수 있습니다

read a b < <(awk '/Application Server/ && !seen[$7]++{printf "%s ", $7}' /tmp/ServerState) 

PS : 당신은 모두 AWK 사용 grepuniq를 방지 할 수 있습니다.

+0

@ anubhava .. 쉘에서이 명령을 실행하면 예상되는 출력을 얻을 수 있습니다. tmp> 에코 $ FAILED tmp> 에코 $ b 시작됨. 그러나 스크립트에서이 명령을 사용할 때 행 3 : 예기치 않은 토큰'< '행 근처에서 구문 오류 3 : 읽기 ab <(awk'/ Application Server/&&!) [$ 7] ++ {printf "% s", $ 7} '/ tmp/ServerState) '...이 스크립트는 다음과 같습니다. #!/bin/bash 읽기 ab <<(awk'/ Application Server/&&! seen [$ 7] ++ {printf "% s", $ 7} tmp/ServerState) echo "a 값은 $ a" echo "b 값은 $ b입니다."스크립트에 명령을 쓰는 동안 실수가 있습니까? –

+0

예 .. bash 쉘입니다 ... cwser @ asspp2 :/tmp> echo $ 0 -bash cwser @ aspp2 :/tmp> awk '/ Application Server/&&! seen [$ 7] ++ {printf "% s ", $ 7} '/ tmp/ServerState FAILED STARTED cwser @ asspp2 :/tmp> –

+0

출력이 보이지 않습니다 .... cwser @ asspp2 :/tmp> 읽기 ab <<(에코"FAILED STARTED ") cwser @ tmp> awk '/ tmp> –

관련 문제