控制 While 循环中已定义变量的整数范围

Control Integer Range of a Defined Variable Within While Loop

我正在尝试控制(通过多个 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条件后,post-192和pre-246,${num}变量仍然增加3而不是增加 6.

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

仔细想想当 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