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

问题描述

我正在尝试(通过多个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,而不是在{em>之前增加{{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