【问题标题】:Length of an array in a shell scriptshell脚本中数组的长度
【发布时间】:2014-11-28 07:27:27
【问题描述】:

我正在编写一个 shell 脚本。我需要捕获数组长度。数组是一个命令的输出。我正在尝试: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

请帮忙。

【问题讨论】:

    标签: bash shell awk jboss command


    【解决方案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[@]}"
    

    【讨论】:

    • 是的,您的代码正在帮助我检索数组长度。但是我需要使用 for 循环,因为在获取数组长度后,我必须在 for 循环中运行一些其他命令。请在我原来的问题中参考我编辑的代码块。
    • 好的,请检查我的 EDIT 部分以循环查看各种结果。
    【解决方案2】:

    您的脚本的问题是您从未增加索引“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[@]}"
    

    【讨论】:

      猜你喜欢
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      相关资源
      最近更新 更多