用于Android自动化的Bash - 无法比较read \ awk产生的变量

时间:2014-12-10 23:26:19

标签: android bash shell awk adb

我使用ADB获取Android设备屏幕的密度,然后想要将其映射到mdpi,hdpi,xhdpi等。我能够将密度保存到使用read和awk的变量,但是我无法对它进行任何比较。作为一个Bash newb,我不确定变量类型的结果,并试图找出,例如,如果它不到300我可以,到目前为止没有正面结果。

function device(){
   adb -s <device ID> shell getprop ro.sf.lcd_density | while read line  
   do 
      PPI=`echo $line | awk '{print $1}'`
      echo "$PPI"  
   done
}

device
PPI=$(device)
echo $PPI

#this is where the problem starts, I can not find any way to do a comparison of $PPI. 
if (("$PPI" = "560"));
then
    echo "rock star"
fi

2 个答案:

答案 0 :(得分:1)

您可以使用case语句来获取密度。这对我有用:

ppi=$(adb wait-for-device shell getprop ro.sf.lcd_density | tr -d '\r')
density="N/A"
case $ppi in
    120)
        density="ldpi" ;;
    160)
        density="mdpi" ;;
    240)
        density="hdpi" ;;
    480)
        density="xhdpi" ;;
    320)
        density="xxhdpi" ;;
    640)
        density="xxxhdpi" ;;
esac

echo $density

使用-le(小于或等于)更新代码:

get_ppi() {
    adb wait-for-device shell getprop ro.sf.lcd_density | tr -d '\r'
}

get_density() {
    _ppi=$1
    if [ $_ppi -le 120 ]; then
        echo "ldpi"
    elif [ $_ppi -le 160 ]; then
        echo "mdpi"
    elif [ $_ppi -le 240 ]; then
        echo "hdpi"
    elif [ $_ppi -le 480 ]; then
        echo "xhdpi"
    elif [ $_ppi -le 320 ]; then
        echo "xxhdpi"
    elif [ $_ppi -le 640 ]; then
        echo "xxxhdpi"
    else
        echo "N/A"
    fi
}

ppi=$(get_ppi)
density=$(get_density $ppi)

echo $ppi
echo $density

我的设备输出:

480
xhdpi

答案 1 :(得分:1)

您的代码不起作用的原因是即使在OSX和Linux中,adb也使用\r\n作为行分隔符。因此,$PPI值不是560,而是560\r。在进行任何比较之前,您需要删除额外的\r

ADBShell () { adb ${2+-s} $2 shell "$1" | tr -d '\r'
}

DPI () { ADBShell "getprop ro.sf.lcd_density" $1
}

Density () {
    local DPI=$(DPI $1)
    case 1 in
        $(($DPI <= 120))) echo "ldpi" ;;
        $(($DPI <= 160))) echo "mdpi" ;;
        $(($DPI <= 240))) echo "hdpi" ;;
        $(($DPI <= 320))) echo "xhdpi" ;;
        $(($DPI <= 480))) echo "xxhdpi" ;;
        $(($DPI <= 640))) echo "xxxhdpi" ;;
    esac
}


echo "$(Density $DEVICE_ID) ($(DPI $DEVICE_ID)dpi)"