Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何运行bash循环?_Bash_Loops - Fatal编程技术网

如何运行bash循环?

如何运行bash循环?,bash,loops,Bash,Loops,我的要求是通过插入一些参数来自动缩放docker swarm,即当下面的脚本得到“1”时,它将使swarm服务向外缩放1,如果得到“1”,它将进一步缩放swarm服务 当我的脚本得到“2”时,它将在swarm服务中扩展1。但是,当我运行脚本时,它会不断扩展,直到第2个swarm services。进一步的尝试给了我错误,即“条件故障”。有人能建议我每次运行这个脚本时如何扩展docker服务吗 我的剧本: #!/bin/bash source parameters.sh for ((serv=

我的要求是通过插入一些参数来自动缩放docker swarm,即当下面的脚本得到“1”时,它将使swarm服务向外缩放1,如果得到“1”,它将进一步缩放swarm服务

当我的脚本得到“2”时,它将在swarm服务中扩展1。但是,当我运行脚本时,它会不断扩展,直到第2个swarm services。进一步的尝试给了我错误,即“条件故障”。有人能建议我每次运行这个脚本时如何扩展docker服务吗

我的剧本:

#!/bin/bash

source parameters.sh

for ((serv=0; serv<=${#service[@]}; serv++));    # Service discovery
do
    declare current=$(docker service inspect --format='{{.Spec.Mode.Replicated.Replicas}}' ${service[$serv]} 2>/dev/null;)   # Sniffing service current state.
    declare j=$(($current+1))
    echo ${service[$serv]}
    echo $current                                   
    
    result=$(bash ${scripts[$serv]})        #Generating random numbers
    echo $result
    echo ${max[$serv]}

    if [[ $result == 0 ]]                  # Service Stable.
    then
        echo "Current state"
        #Nothing will executed.
    elif    [[ $result == 1 ]] && [[ $current < ${max[$serv]} ]];    # Docker Scale-out block
    then
        for ((j=$current; j<=${max[$serv]}; j++));
        do
            j=$(($current+1))
            echo $(docker service scale ${service[$serv]}=$j)
            break
        done
    elif [[ $result == 2 ]] && [[ $current > ${min[$serv]} ]]        # Docker Scale-in block
    then
        for ((j=$current; j>=${min[$serv]}; j--));
        do
            j=$(($current-1))
            echo $(docker service scale ${service[$serv]}=$j)
            break
        done
    else
        echo "Condition fault"
    fi
done

欢迎来到SO。请拿着这本书读一读。您还应该提供一个。对于任何bash脚本,您都可以将代码放入其中以仔细检查语法。它将检测错误并提出修复方案。它还将指出过时的做法。
#!/bin/bash

scripts=( "conA.sh" "conB.sh" "conC.sh" )
min=( "1" "1" "1" )
max=( "10" "14" "15" )
service=( "stack_nginx1" "stack_nginx2" "stack_master-nginx" )