我正在编写一个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
请帮忙。
答案 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[@]}"