Bash多个端口映射取决于脚本参数
我有一个脚本,接受作为一个参数; 那么我的脚本必须根据这个参数创build一个端口映射的docker容器; 例如,如果我跑。 /myscript.sh 10
,myscript.sh必须创build一个具有10端口映射的/myscript.sh 10
容器。
这是我的myscript.sh
#!/bin/bash NCACHES=$1 PORT_BASE=80 docker run -idt --name CONTAINER then..?
如果参数值是,例如,5,我会这个myscript创build一个端口映射80,81,82,83,84的容器。 我怎么能在bash脚本中pipe理这个条件?
参数值= 5,预计会有:docker run -idt –name MYNAME -p 80:80 -p 81:81 -p 82:82 -p 83:83 -p 84:84
编辑:我试过我的脚本:
#!/bin/bash echo $1 docker run -idt --name CONTAINER `for x in {80..$(( 80 + ${1} ))}; do printf "-p ${x}:${x} "; done` pier92/balancer:latest
但是这是输出:
./mapping.sh 5 5 ./mapping.sh: riga 9: printf: -p: opzione non valida printf: uso: printf [-v var] formato [argomenti] 75899b1ec4edab51530ad8c33e955a31a45fb946ecc6eb2fa3f1ba5b5537064a pierpaolo@pignasecca:~/Scrivania/setup-arch/webapp$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 75899b1ec4ed pier92/balancer:latest "nginx -g 'daemon ..." 7 seconds ago Up 4 seconds 80/tcp, 443/tcp CONTAINER
只有端口80映射。
我宁愿使用一个数组,并通过操纵里面的内容,
portArr=() for ((i=0;i<NCACHES;i++)); do portArr+=( -p "$((PORT_BASE+i)):$((PORT_BASE+i))") done
一旦数组被填充,您可以通过打印来validation其内容
declare -p portArr
其中显示了每个索引的值,
declare -a portArr='([0]="-p" [1]="80:80" [2]="-p" [3]="81:81" [4]="-p" [5]="82:82" [6]="-p" [7]="83:83" [8]="-p" [9]="84:84")'
现在把它传递给docker
命令
docker run -idt --name MYNAME "${portArr[@]}"
你可以迭代一个序列,从而:
for i in $(seq 1 $1); do echo $i; done
它将在1和你input的数字参数之间循环。 你可以在上面添加一个代表你的命令行的string。
请注意,您可以使用${1..5}
(例如)在固定值之间扩展bash中的范围,但在范围内使用variables时,这不起作用。
那么这样的事情呢?
docker run -idt --name CONTAINER `for x in {80..$(( 80 + ${1} ))}; do printf "$x "; done`
输出会是这样的:
docker run -idt --name CONTAINER 80 81 82 83 84 85 86 87 88 89 90
阐释:
这只是一个内联打印数字序列。
为了在bash中进行总和,使用这个语法$(( x + y ))
。
编辑:
只需在printf中添加需要显示的所有内容即可:
docker run -idt --name CONTAINER `for x in $(seq 80 $(( 80 + ${1} )) ); do printf " -p ${x}:${x}"; done`
其输出例如:
docker run -idt --name CONTAINER -p 80:80 -p 81:81 -p 82:82 -p 83:83 -p 84:84 -p 85:85 -p 86:86 -p 87:87 -p 88:88 -p 89:89 -p 90:90
正如Brian Agnew所指出的,你必须用variables$(seq xy),谢谢!