问题描述
我正在尝试(通过多个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