在busybox sh中,不能递增填充8的数字

这是我用来保存照相机文件的代码,并从0001开始命名。 相机正在运行Busybox,并且里面有一个壳。
代码是基于查尔斯·达菲在此之前的回答。

#!/bin/sh # Snapshot script cd /mnt/0/foto sleep 1 set -- *.jpg # put the sorted list of picture namefiles on argv ( the number of files on the list can be requested by echo $# ) while [ $# -gt 1 ]; do # as long as there's more than one... shift # ...some rows are shifted until only one remains done if [ "$1" = "*.jpg" ]; then # If cycle to determine if argv is empty because there is no jpg file present in the dir. #argv is set so that following cmds can start the sequence from 0 on. set -- snapfull0000.jpg else echo "Piu' di un file jpg trovato." fi num=${1#*snapfull} # $1 is the first row of $#. The alphabetical part of the filename is removed. num=${num%.*} # removes the suffix after the name. num=$(printf "%04d" "$(($num + 1))") # the variable is updated to the next digit and the number is padded (zeroes are added) # echoes for debug echo "variabile num="$num # shows the number recognized in the latest filename echo "\$#="$# # displays num of argv variables echo "\$1="$1 # displays the first arg variable wget http://127.0.0.1/snapfull.php -O "snapfull${num}.jpg" # the snapshot is requested to the camera, with the sequential naming of the jpeg file. 

这是我在脚本操作期间在cmd行上得到的内容。 我手动运行脚本九次,但是在保存文件snapfull0008.jpg之后 ,就像你在最后一行看到的那样,文件只被命名为snapfull0000.jpg

 # ./snap4.sh variable num=0001 $#=1 $1=snapfull0000.jpg Connecting to 127.0.0.1 (127.0.0.1:80) 127.0.0.1 127.0.0.1 - [05/Dec/2014:20:22:22 +0000] "GET /snapfull.php HTTP/1.1" 302 0 "-" "Wget" snapfull0001.jpg 100% |*******************************| 246k --:--:-- ETA # ./snap4.sh More than a jpg file found. variable num=0002 $#=1 $1=snapfull0001.jpg Connecting to 127.0.0.1 (127.0.0.1:80) 127.0.0.1 127.0.0.1 - [05/Dec/2014:20:22:32 +0000] "GET /snapfull.php HTTP/1.1" 302 0 "-" "Wget" snapfull0002.jpg 100% |*******************************| 249k --:--:-- ETA # ./snap4.sh More than a jpg file found. variable num=0003 $#=1 $1=snapfull0002.jpg Connecting to 127.0.0.1 (127.0.0.1:80) 127.0.0.1 127.0.0.1 - [05/Dec/2014:20:22:38 +0000] "GET /snapfull.php HTTP/1.1" 302 0 "-" "Wget" snapfull0003.jpg 100% |*******************************| 248k --:--:-- ETA # ./snap4.sh More than a jpg file found. variable num=0004 $#=1 $1=snapfull0003.jpg Connecting to 127.0.0.1 (127.0.0.1:80) 127.0.0.1 127.0.0.1 - [05/Dec/2014:20:22:43 +0000] "GET /snapfull.php HTTP/1.1" 302 0 "-" "Wget" snapfull0004.jpg 100% |*******************************| 330k --:--:-- ETA # ./snap4.sh More than a jpg file found. variable num=0005 $#=1 $1=snapfull0004.jpg Connecting to 127.0.0.1 (127.0.0.1:80) 127.0.0.1 127.0.0.1 - [05/Dec/2014:20:22:51 +0000] "GET /snapfull.php HTTP/1.1" 302 0 "-" "Wget" snapfull0005.jpg 100% |*******************************| 308k --:--:-- ETA # ./snap4.sh More than a jpg file found. variable num=0006 $#=1 $1=snapfull0005.jpg Connecting to 127.0.0.1 (127.0.0.1:80) 127.0.0.1 127.0.0.1 - [05/Dec/2014:20:22:55 +0000] "GET /snapfull.php HTTP/1.1" 302 0 "-" "Wget" snapfull0006.jpg 100% |*******************************| 315k --:--:-- ETA # ./snap4.sh More than a jpg file found. variable num=0007 $#=1 $1=snapfull0006.jpg Connecting to 127.0.0.1 (127.0.0.1:80) 127.0.0.1 127.0.0.1 - [05/Dec/2014:20:22:59 +0000] "GET /snapfull.php HTTP/1.1" 302 0 "-" "Wget" snapfull0007.jpg 100% |*******************************| 316k --:--:-- ETA # ./snap4.sh More than a jpg file found. variable num=0008 $#=1 $1=snapfull0007.jpg Connecting to 127.0.0.1 (127.0.0.1:80) 127.0.0.1 127.0.0.1 - [05/Dec/2014:20:23:04 +0000] "GET /snapfull.php HTTP/1.1" 302 0 "-" "Wget" snapfull0008.jpg 100% |*******************************| 317k --:--:-- ETA # ./snap4.sh More than a jpg file found. variable num=0000 $#=1 $1=snapfull0008.jpg Connecting to 127.0.0.1 (127.0.0.1:80) 127.0.0.1 127.0.0.1 - [05/Dec/2014:20:23:10 +0000] "GET /snapfull.php HTTP/1.1" 302 0 "-" "Wget" snapfull0000.jpg 100% |*******************************| 318k --:--:-- ETA 

8号文件后序列停止的原因是什么?

Solutions Collecting From Web of "在busybox sh中,不能递增填充8的数字"

问题是前导0导致一个数字被读为八进制。

在bash中,使用$((10#$num))将强制使用十进制。 从而:

 num=$(printf "%04d" "$((10#$num + 1))") 

要使用busybox ash,你需要去掉0 。 一种方法来做到这一点,即使在busybox灰工作:

 while [ "${num:0:1}" = 0 ]; do num=${num:1} done num=$(printf '%04d' "$((num + 1))") 

看下面的成绩单显示使用(从busybox v1.22.1灰测试):

 $ num=0008 $ while [ "${num:0:1}" = 0 ]; do > num=${num:1} > done $ num=$(printf '%04d' "$((num + 1))") $ echo "$num" 0009 

如果您的shell甚至不支持POSIX所需的基本参数扩展集,您最终可能会使用:

 num=$(echo "$num" | sed -e 's/^0*//') num=$(printf '%04d' "$(($num + 1))") 

…虽然这意味着你的busybox是用灰壳以外的东西建造的,但我强烈建议重新考虑这个问题。