加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Bash seq在for循环中产生两个独立的数字序列

发布时间:2020-12-15 22:43:32 所属栏目:安全 来源:网络整理
导读:我想创建一个简单的bash循环,它迭代一系列具有特定间隔的数字,然后是不同的数字序列,例如 for i in $(seq 0 5 15)do echo $idone 但是在通过i = 0,5,10,15进行交互之后,我希望它能够反复说出30,35,40,45. 有没有办法用seq做到这一点?还是另类? 解决方法 方
我想创建一个简单的bash循环,它迭代一系列具有特定间隔的数字,然后是不同的数字序列,例如

for i in $(seq 0 5 15)
do
    echo $i
done

但是在通过i = 0,5,10,15进行交互之后,我希望它能够反复说出30,35,40,45.

有没有办法用seq做到这一点?还是另类?

解决方法

方法1

只需在另一个seq调用中扩充$(…)中的命令:

for i in $(seq 0 5 15; seq 30 5 45); do
    echo $i
done

然后

$bash test.sh
0
5
10
15
30
35
40
45

#方法2

在你的后续评论中,你写了

The actual content of the for loop is more than just echo$i (about 200 lines) I don’t want to repeat it and make my script huge!

作为上述方法的替代方法,您可以为这200行定义shell函数,然后在一系列for循环中调用该函数:

f() {
   # 200 lines
   echo $i
}

for i in $(seq 0 5 15) do
    f
done

for i in $(seq 30 5 45) do
    f
done

方法3(符合POSIX标准)

为了实现shell的最大可移植性,您应该使脚本符合POSIX标准.在这种情况下,您需要避免使用seq,因为尽管许多发行版提供了该实用程序,但它并未由POSIX定义.

由于你不能使用seq来生成迭代的整数序列,并且因为POSIX没有定义数字,C风格的for循环,所以你必须求助于while循环.为避免重复与该循环相关的代码,您可以定义另一个函数(在下面称为custom_for_loop):

custom_for_loop() {
  # $1: initial value
  # $2: increment
  # $3: upper bound
  # $4: name of a function that takes one parameter
  i=$1
  while [ $i -le $3 ]; do
      $4 $i
      i=$((i+$2))
  done
}

f() {
    printf "%sn" "$1"
}

custom_for_loop  0 5 15 f
custom_for_loop 30 5 45 f

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读