关于shell脚本时遇value too great for base (error token is "08")
今天在书写一个定时cp脚本时遇到了一个问题,value too great for base (error token is "08")
在网上查看到原来是以0开头的数字 系统会默认识别为八进制数,所以我的 $datem-1这样的获取上个月的月份是回报:value too great for base (error token is "08")这个错误的,解决办法就是
将$datem格式或者声明称十进制,`10#$datem`-1 这样就可以了。 也就是将要转换成十进制的变量或者数字 在前面加上`10#`即可:
给出我的代码:
[root@morp shell]# vi backwebdb.sh #!/bin/bash #admin fengtaotao Email:23956580@qq.com #Fri Jul 3 16:35:48 CST 2015 pathh=/web/www/morp/musicFile/ pathd=/opt2/musicFile/ datem=`date +%m` if [ "$datem" == 01 ] ;then datem="_12" datey=`date +%Y` datey=$(($datey-1)) else datem="$((10#$datem-1))" # datey=`date +%Y` echo $datem fi echo $datey #echo $datem #dird="$datey$datem" #readd=`date +%N`.txt #find $pathh -name $dird &>> $readd #for i in $(cat $readd);do # aac=$(echo $i | awk -F "/" '{print $6"/"$7"/"}') # aac=${pathd}${aac} # cp -r $i $aac &>>dbcp.log #done #rm -rf $readd
OK这样问题就解决了
然后将没有执行备份的重新执行,由于我这个脚本时用find获取信息的所以对系统资源的消耗比较大,当然大家如果需要备份的目录不变的话就可以直接读取一个路径文档
可以较少对系统的消耗!