分页: 1 / 2

新手求教bash脚本错误:基数值过大

发表于 : 2010-12-15 18:21
匪兵甲乙
写了这样一个简单脚本:
#!/bin/bash
#------------------------------------------
x=078
let y=$x+1
echo "$y" ;结果会报错:let: y=078: 基数值过大 (error token is "078");
因为专业的原因需要用“078”之类的三位数字,请教高手,这是什么原因呢?

Re: 新手求教bash脚本错误:基数值过大

发表于 : 2010-12-15 19:05
匪兵甲乙
我的程序设计需要这样:开始数为078,循环后+1,变成079;我用C#做了下,比如078+1后输出结果为79;有点搞不懂···

Re: 新手求教bash脚本错误:基数值过大

发表于 : 2010-12-15 19:12
huangyun
很简单啊,bash认为0开头的数字是8进制的,然而8进制只能使用0-7这几个数字,那个078里面有一个8,超过范围了。

Re: 新手求教bash脚本错误:基数值过大

发表于 : 2010-12-15 19:19
huangyun
如果要去除最开始的0,可以用sed, 代码如下:

代码: 全选

#!/bin/bash

x=078
x=$(echo "$x" | sed "s/^00*//g")
let y=$x+1
echo "$y" 
当然了,这样也太难看了,你可以试试这个:

代码: 全选

#!/bin/bash

x=078
let y=10#$x+1
echo "$y" 

Re: 新手求教bash脚本错误:基数值过大

发表于 : 2010-12-15 20:34
匪兵甲乙
谢谢三楼的具体回复,确实是bash中8进制的问题;而csh就没有这个问题;你讲的第二种代码很实用非常感谢!

Re: 新手求教bash脚本错误:基数值过大

发表于 : 2010-12-15 21:27
bomel

代码: 全选

#!/bin/bash
x=078
y=`expr $x + 1`
echo $y

Re: 新手求教bash脚本错误:基数值过大

发表于 : 2010-12-16 8:35
匪兵甲乙
谢谢6楼!这样也可以!我想有没有控制格式输出的命令?因为我用到的数字须是三位的,比如001 之类

Re: 新手求教bash脚本错误:基数值过大

发表于 : 2010-12-16 9:17
fanhe

代码: 全选

printf "%03d\n" 1

Re: 新手求教bash脚本错误:基数值过大

发表于 : 2010-12-17 14:07
linxiaoyu
不懂楼主的意思,你好要用080么?你要用080的话,
x=078,你这么定义肯定不行。把问题发全给我们大家看看,
目前来看8楼的方法最好

Re: 新手求教bash脚本错误:基数值过大

发表于 : 2010-12-17 19:18
匪兵甲乙
回复9楼:程序比较繁但是类似于这样
min=001
max=004
for((i=min;i<=max;i++))
do
mkdir $i
done

而创建的这个文件夹名格式必须为三位数,比如001,,002等;现在我是这样解决的:
min=001
max=004
let min=10#$min
let max=10#$max
for((i=min;i<=max;i++))
do
if (($i<10))
then
i=00idoy
elif (($i>=10)) && (($i<100))
then
i=0$i
fi
mkdir $i
let i=10#$i
done
比较笨的方法···

Re: 新手求教bash脚本错误:基数值过大

发表于 : 2010-12-17 20:08
huangyun
那个太复杂了,可以用 seq,比如

代码: 全选

for i in $(seq -w 1 100)
do
   mkdir $i
done
seq还可以用 -f 去控制格式

Re: 新手求教bash脚本错误:基数值过大

发表于 : 2010-12-18 10:00
linxiaoyu
11楼的方法没试过,我不知道seq命令。。汗一个,
另外结合八楼说的给出脚本
#!/bin/bash
rm temp >& /dev/null
nawk 'BEGIN{min=1;max=55;for (i=min;i<=max;i++){printf ("%03d\n",i)>"temp"}}'
mkdir `cat temp`
rm temp >& /dev/null

这里min,max均为10进制数,自己设定
bash下测试通过

Re: 新手求教bash脚本错误:基数值过大

发表于 : 2010-12-18 14:45
匪兵甲乙
谢谢6 8 11 12楼的大力帮助!12楼的没怎么看懂···,我最后用的11楼的seq语句,感觉比较方便呵呵

Re: 新手求教bash脚本错误:基数值过大

发表于 : 2010-12-18 14:57
trigger
匪兵甲乙 写了:谢谢6 8 11 12楼的大力帮助!12楼的没怎么看懂···,我最后用的11楼的seq语句,感觉比较方便呵呵
还有更方便的

代码: 全选

for i in {001..004};do echo $i ;done
001
002
003
004

Re: 新手求教bash脚本错误:基数值过大

发表于 : 2010-12-18 21:39
匪兵甲乙
回复14楼:呵呵 谢谢! 果真更简洁, linux bash编程的确博大精深啊