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