这是我编写的shell脚本。
file_sequence=998
while [ $file_sequence -ne 000 ]
do
file_sequence=`printf {"%03d\n",$((file_sequence + 1))}`;
if [ $file_sequence -gt 999 ]
then
file_sequence=`printf {"%03d\n",1}`;
fi
done
这里的问题是我得到以下输出
999
001
002
003
upto ..... 009 and then
010
009
010
009
有人可以告诉我这里发生了什么。提前致谢
答案 0 :(得分:3)
以0
开头的整数被视为八进制。八进制中的010
是十进制的8
。 8 + 1是9.我认为更清晰的解决方案是使用跟踪索引的变量和担心格式化的单独变量:
#!/bin/sh
i=998
while test "$i" -ne 0
do
test $((++i)) -gt 999 && i=1
file_sequence=$(printf "%03d" $i)
echo $file_sequence
done
答案 1 :(得分:1)
我认为您正在将file_sequence与要记录的其他行结合使用。 您当前的脚本将永远运行。 目前,您始终在字符串和整数之间转换file_sequence,从而导致问题。为计数创建一个日志函数:
#!/bin/ksh
function my_log
{
(( file_sequence_nr = file_sequence_nr + 1 ))
if [ ${file_sequence_nr} -gt 999 ]
then
file_sequence_nr=1
fi
printf "%03d %s\n" ${file_sequence_nr} "$*"
done
export file_sequence_nr=998
# Loop input file, here a test until 20
while [ $file_sequence_nr -ne 20 ]
do
my_log "Logline random $RANDOM"
sleep 1 # Always have a sleep 1 in a while loop until you are sure it works.
done
答案 2 :(得分:0)
我不知道问题是什么,但我确实知道。
试试这个:
file_sequence=998
while [ $file_sequence -ne 000 ]
do
file_sequence=$(printf {"%03d\n",$(bc <<< "$file_sequence + 1")});
if [ $file_sequence -gt 999 ]
then
file_sequence=$(printf {"%03d\n",1});
fi
echo "$file_sequence"
done
执行:
bash script.sh | head -15
999
001
002
003
004
005
006
007
008
009
010
011
012
013
014
答案 3 :(得分:0)
将其添加到脚本顶部以强制脚本使用ksh
:
#!/bin/ksh