如何在shell脚本变量

时间:2015-08-10 12:28:26

标签: bash shell busybox ash

当我在变量busybox shell脚本中存储大值并打印时,它会打印-ve值 我知道shell没有变量类型,但是如何避免这种折回到-ve值?
我在shell中使用了以下命令命令,它打印了-ve value。

# let b=3841982464
# echo $b
-452984832

任何建议/指针?

编辑:
agilob建议的答案适用于我原来的问题,但我的实际问题是,我是最后一次去磁盘结束 - 17kb所以我使用命令如下

# b=$(($(blockdev --getsize64 /dev/mmcblk0) - $((17*1024))))
# echo $b
-453002240

所以仍然打印值-ve :(,使用expr也会给出如下奇怪的结果

# b=`expr $(blockdev --getsize64 /dev/mmcblk0) - 17408`
# echo $b
2147466239

回答实际问题
所以原来的问题由agilob回答,所以我接受了这个答案。我可以解决的实际问题如下,

# b=$(blockdev --getsize64 /dev/mmcblk0)
# echo $b
3841982464
# echo "$b 17408 - p" | dc
3841965056

AWK方式

我尝试以用户1934428建议的方式执行此操作,可以按照以下方式完成,

# echo "$(blockdev --getsize64 /dev/mmcblk0) 17408" | awk '{ printf "%.0f", $1 - $2}'
3841965056#

2 个答案:

答案 0 :(得分:2)

为什么不呢:

b=3841982464
echo $b
   => 3841982464

答案 1 :(得分:0)

你基本上想用"任意长整数"进行算术运算。这不是内置于bash(使用8字节整数)。

我会将数字存储在普通的环境变量中,并使用其他编程语言(例如Ruby)来处理它们。