shell脚本中数组的长度

时间:2014-11-28 07:27:27

标签: bash shell awk jboss command

我正在编写一个shell脚本。我需要捕获数组长度。 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

请帮忙。

2 个答案:

答案 0 :(得分: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[@]}"

答案 1 :(得分:0)

您的脚本问题在于您从未增加索引&#34; N&#34;。以下脚本可能会解决您的问题。

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[@]}"