在Bash中获取数组的长度

时间:2016-01-18 05:49:17

标签: arrays bash while-loop

我目前正在编写一个脚本,我想在其中使用数组长度作为条件参数。我可以像这样得到数组的长度:

myarr=$(squeue | grep cjones903 | awk '{print $3}' )
echo ${#myarr}

但是这不会起作用,因为我需要迭代地评估长度,以便在长度低于阈值时继续。

我希望能够做到这一点:

while [ length is > x] do;
sleep 60;
else:

1 个答案:

答案 0 :(得分:2)

好的,因为我们似乎已经在评论中削减了它,通过检查squeue调用返回的行数来检查运行的作业数量,这里有一个小脚本我正在修改在讨论期间。从中可以获得任何进一步的想法。进一步研究的一件事是锁定文件(或 lock dir ),以确保一次只运行一个脚本实例(StackOverflow上已有许多示例)。祝你好运:

#!/bin/bash

## consider setting lock file so only 1 instance runs
#  (many examples on SO)

## simple declarations
declare -i threshold=10             ## your limit, njobs above, sleep
declare -i njobs="$threshold"       ## threshold number of jobs limit
declare -i nseconds=60              ## seconds to sleep

while :; do     ## outer loop - runs perpetually

    njobs=$(squeue | grep cjones903 | wc -l)        ## get no. of jobs
    while ((njobs > threshold)); do                 ## test
        sleep "$nseconds"                           ## sleep if above
        njobs=$(squeue | grep cjones903 | wc -l)    ## get no. of jobs
    fi

    ## code to submit new batch of jobs here
    #  sleep a couple to let jobs distribute

done

exit 0