【问题标题】:Control Integer Range of a Defined Variable Within While Loop在 While 循环中控制已定义变量的整数范围
【发布时间】:2021-01-07 19:08:32
【问题描述】:

我正在尝试控制(通过多个IF 语句)Linux 中while 循环中已定义变量的整数范围。

我的 Bash 代码:

#!/bin/bash

pad=3
START=1
END=246
i=${START}

while [ ${i} -le ${END} ];
do

num=$(printf "%0*d\n" $pad ${i})

echo "${num}"

if [ ${num} -lt "36" ];
then
((i = i + 1))
fi

if [ ${num} -ge "36" ] && [ ${num} -le "192" ];
then
((i = i + 3))
fi

if [ ${num} -ge "192" ] && [ ${num} -le "246" ];
then
((i = i + 6))
fi

done

exit 0

预期输出:

001
...
...
...
036
039
042
...
...
...
192
198
204
...
...
...
240
246

终端输出:

001
...
...
...
036
039
042
...
...
...
192
198
201
204
...
...
...
243
246

在满足 IF 条件后,在 192 后和 246 前,${num} 变量仍然增加3,而不是增加6。 p>

【问题讨论】:

  • 如果num是192,不应该增加9吗?
  • 我没有得到你运行代码时显示的输出。
  • 你在寻找类似printf '%s\n' {1..36} {39..192..3} {198..246..6}的东西吗?

标签: linux bash if-statement while-loop integer


【解决方案1】:

正如其他人评论的那样,运行该代码不会产生该输出。

仔细考虑当i == 192 -- 你想使用elif 时循环中会发生什么

我建议这样做:

while (( i <= END )); do
    printf "%0*d\n" $pad ${i}

    if (( i < 36 )); then
        ((i += 1))
    elif (( 36 <= i && i < 192)); then
        ((i += 3))
    else
        ((i += 6))
    fi
done

或者这个

for (( i=START, incr=1; i <= END; i += incr )); do
    printf "%0*d\n" $pad ${i}
    (( i == 36 )) && incr=3
    (( i == 192)) && incr=6
done

【讨论】:

    猜你喜欢
    • 2013-02-25
    • 1970-01-01
    • 2016-01-24
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多