我有一个名为locations.txt的txt文件
location-1a
location-2c
location-3d
location-4
location-5a
...我希望迭代我的for循环中的locations.txt文件,每个位置应该用于5个节点,然后应该使用下一个位置。例如,我希望运行以下命令,
server create --location location-1a node-1
server create --location location-1a node-2
server create --location location-1a node-3
server create --location location-1a node-4
server create --location location-1a node-5
server create --location location-2c node-6
.....到目前为止,我只有一个名为script.sh的脚本,它从cli获取一个参数。我不能像我想的那样改变地点。
mapfile -t locationArr < ~/Documents/files/locations.txt
serverCounter=1
locationCounter=1
counter=1
counter=1
for (( i = 1; i <= $1; i++ ))
do
server create --location $locationArr[$locationCounter] node-$i
counter=$((counter+1))
if [ $counter == 5 ]
then
counter=1
locationCounter=$((locationCounter+1))
done我想要像这样的
if counter == 5:
counter=0
nextline 例如,如果我运行script.sh 11,我希望得到以下结果,
server create --location location-1a node-1
server create --location location-1a node-2
server create --location location-1a node-3
server create --location location-1a node-4
server create --location location-1a node-5
server create --location location-2c node-6
server create --location location-2c node-7
server create --location location-2c node-8
server create --location location-2c node-9
server create --location location-2c node-10
server create --location location-3d node-11如何在for循环中迭代location.txt文件?我是否应该将文本文件转换为某种列表变量?
发布于 2020-09-03 19:55:21
这是我的尝试:
counter=1
while IFS= read -r line
do
for (( i=1; i <= 5 && $counter <= $1; i++ ))
do
server create --location $line node-$counter
counter=$((counter+1))
done
done < ~/Documents/files/locations.txt产出为11:
server create --location location-1a node-1
server create --location location-1a node-2
server create --location location-1a node-3
server create --location location-1a node-4
server create --location location-1a node-5
server create --location location-2c node-6
server create --location location-2c node-7
server create --location location-2c node-8
server create --location location-2c node-9
server create --location location-2c node-10
server create --location location-3d node-11发布于 2020-09-03 20:05:30
总纲:
用于从locations.txt
。
上述措施的一项实施:
max=${1}
curr=1
while read -r location
do
for i in {1..5}
do
echo "server create --location ${location} node-${curr}"
curr=$((curr+1))
[ ${curr} -gt ${max} ] && break 2
done
done < locations.txt用max=${1}=11进行测试运行
server create --location location-1a node-1
server create --location location-1a node-2
server create --location location-1a node-3
server create --location location-1a node-4
server create --location location-1a node-5
server create --location location-2c node-6
server create --location location-2c node-7
server create --location location-2c node-8
server create --location location-2c node-9
server create --location location-2c node-10
server create --location location-3d node-11OP可以为大于0的整数添加额外的max检查。
发布于 2020-09-03 20:35:48
使用单循环完成,没有Bashism POSIX语法:
#!/usr/bin/env sh
i=0
while [ $i -lt "$1" ] && {
[ $((i % 5)) -ne 0 ] || IFS= read -r line || [ "$line" ]
}; do
server create --location "$line" "node-$((i = i + 1))"
done <locations.txthttps://stackoverflow.com/questions/63730591
复制相似问题