微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。