1

我的脚本的目标是获取 /cache 分区位置(哪个有效),然后获取该位置的块大小并将其除以 1024。然后我想输出大小,我尝试了很多可能的方法,但我不能让它正常工作。

#!/bin/bash -v

if [ -e mounts ]; then
rm -f mounts
fi;

./adb -d shell "mount" > mounts

export CACHEPARTITION=`cat mounts | grep /cache`; 
var=$(echo $CACHEPARTITION | awk -F"/" '{print $1,$2,$3,$4}')   
set -- $var

echo "Cache mount point: "$1/$2/$3;

export CACHEPART=$1/$2/$3

例如,这会导出:/dev/block/mmcblk0p16 到文件“mounts”

if [ -e cachepartition ]; then
rm -f cachepartition
fi;

./adb -d shell "blockdev --getsize64 '${CACHEPART}'" > cachepartition

例如: 104857600 需要除以下面的 1024

export CACHESIZE=`cat cachepartition`; 
DIVIDE=1024

export OUTPUT=`expr ${CACHESIZE} / ${DIVIDE}`

echo ${OUTPUT}

我可以通过管道而不是 catting 值吗?并让它真正做除法。我在 bash 脚本方面有点菜鸟,这是我想到的最简单的方法,但对我来说仍然很难,看起来哈哈

对此的一些帮助非常感谢!

4

2 回答 2

0

当然,您可以使用 ` 或 $() 获取命令输出:

part_size_bytes=$(./adb -d shell "blockdev --getsize64 '${CACHEPART}'")
# divide it by 1024
part_size_kb=$(($part_size_bytes / 1024))
echo "cache size is $part_size_kb kb."
于 2013-04-30T10:37:37.647 回答
0

你可以这样做:

CACHESIZE=$(./adb -d shell "blockdev --getsize64 '${CACHEPART}'")
DIVIDE=1024

对于简单的整数除法:

OUTPUT=$((CACHESIZE/DIVIDE))

对于浮点除法:

OUTPUT=$(bc -l <<< "$CACHESIZE"/"$DIVIDE")

你也有一个无用的 Cat。代替:

cat mounts | grep /cache

写:

grep /cache mounts

Echo 也有一个无用的用法。代替:

echo $CACHEPARTITION | awk -F"/" '{print $1,$2,$3,$4}'

awk -F"/" '{print $1,$2,$3,$4}' <<< "$CACHEPARTITION"
于 2013-04-30T10:37:55.433 回答