如何在Shell脚本中限制for循环中的迭代次数

樱桃

我正在使用Shell脚本从数据库中获取数据并根据用户提供的输入返回结果。

但是,我想限制用户传递特定数量的最大值(例如10),以逗号分隔。即使用户传递了10个以上的值,我的shell脚本也应限制该用户,并仅从用户提供的列表中执行10个。

我能够获取所有用户提供的值的结果,但无法确定如何将其限制为特定的数字。

我的Shell脚本

IDs=a1,b2,c3,d4,e5,f6,g7,h8,i9,j10,k11,l12,m13,n14
# Above are User provided sample alphanumeric values

for i in $(echo $IDs | sed "s/,/ /g")
do
  echo "Fetching results for $i by running sql against DB"
done

预期结果

除了shell脚本之外,我只通过忽略其余部分来获取前10个逗号分隔的值(例如,在脚本中,需要选择直到“ a1”到“ j10”之间的值,然后忽略其余部分)并针对DB执行相同的操作。

任何帮助将不胜感激。提前致谢!

查尔斯·达菲

如果将ID读入数组,则可以使用参数扩展来仅获取该数组的前10个元素,如下所示:

#!/usr/bin/env bash
#              ^^^^- NOT /bin/sh; arrays require a shell with ksh extensions.

IDs=a1,b2,c3,d4,e5,f6,g7,h8,i9,j10,k11,l12,m13,n14  # original input
IFS=, read -r -a id_arr <<<"$IDs"                   # transform into an array
max_count=10                                        # input w/ count to process

for i in "${id_arr[@]:0:max_count}"; do             # iterate only over that many
  echo "Fetching results for $i by running sql against DB"
done

在中"${arrayname[@]:0:max_count}"0是起始位置(我们从头开始),max_count是要迭代的项目数。有关参数扩展,请参见bash-hackers的Wiki页面

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章