分页: 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
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编程的确博大精深啊