2014-11-28 2 views
0

쉘 스크립트를 작성 중입니다. 배열 길이를 캡처해야합니다. Array는 하나의 명령의 출력입니다. 나는 다음과 같이 시도하고있다 : N = 0쉘 스크립트의 배열 길이

for pid in $(ps -ef | grep java| egrep "tomcat|jboss|JBoss" | awk '{print $2}') ; 
do 
array[$N]="$pid" 

echo "${#array[@]}" 
arraylen=${#array[@]} 
if [ $arraylen=1 ] 
then 
(sleep $sleepTime;jstack ${array[$0]} > jStack_${array[$0]}_prod.txt &) 

elif [$arraylen =2] 
then 
(sleep $sleepTime;jstack ${array[$0]} > jStack_${array[$0]_prod.txt &) 
(sleep 10;jstack ${array[$1]} > jStack_${array[$1]}_prod.txt &) 

elif [$arraylen =3] 
then 
(sleep $sleepTime;jstack ${array[$0]} > jStack_${array[$0]}_prod.txt &) 
(sleep 10;jstack ${array[$1]} > jStack_${array[$1]}_prod.txt &) 
(sleep 10;jstack ${array[$2]} > jStack_${array[$2]}_prod.txt &) 

done 

도와주세요.

답변

1

사용 BASH에서이 스크립트를

array=($(ps -ef | awk '/java/ && /tomcat|jboss|JBoss/{print $2}')) 
echo "${#array[@]}" 

편집 : 당신이 루프를 실행하려면 당신은 할 수 있습니다 :

array=() 
while read -r p; do 
    echo "processing: $p" 
    array+=("$p") 
done < <(ps -ef | awk '/java/ && /tomcat|jboss|JBoss/{print $2}') 
echo "${#array[@]}" 
+0

예, 코드가 배열 길이를 검색하는 데 도움이됩니다. 하지만 배열의 길이를 가져온 후 for 루프 안에 다른 명령을 실행해야하므로 for 루프를 사용해야합니다. 내 원래 질문에서 편집 된 코드 블록을 참조하십시오. – user3627319

+0

확인 ** 다양한 결과를 반복하기 위해 ** 편집 ** 섹션을 확인하십시오. – anubhava

0

스크립트의 문제점은 당신이 즉 절대로 색인 "N"을 증가시키지 않습니다. 다음 스크립트는 문제를 해결할 수 있습니다.

N=0 
for pid in $(ps -ef | grep java| egrep "tomcat|jboss|JBoss" | awk '{print $2}') ; 
do 
    array[$N]="$pid" 
    N=$((N + 1)) 

done 
echo "${#array[@]}"