在下面的代码中,我想比较命令行参数和参数,但我不确定将参数与参数进行比较的当前语法是什么..." =="或" -eq"。
#!/bin/bash
argLength=$#
#echo "arg = $1"
if [ argLength==0 ]; then
#Running for the very first
#Get the connected device ids and save it in an array
N=0
CONNECTED_DEVICES=$(adb devices | grep -o '\b[A-Za-z0-9]\{8,\}\b'|sed -n '2,$p')
NO_OF_DEVICES=$(echo "$CONNECTED_DEVICES" | wc -l)
for CONNECTED_DEVICE in $CONNECTED_DEVICES ; do
DEVICE_IDS[$N]="$CONNECTED_DEVICE"
echo "DEVICE_IDS[$N]= $CONNECTED_DEVICE"
let "N= $N + 1"
done
for SEND_DEVICE_ID in ${DEVICE_IDS[@]} ; do
callCloneBuildInstall $SEND_DEVICE_ID
done
elif [ "$1" -eq -b ]; then
if [ $5 -eq pass ]; then
DEVICE_ID=$3
./MonkeyTests.sh -d $DEVICE_ID
else
sleep 1h
callCloneBuildInstall $SEND_DEVICE_ID
fi
elif [ "$1" -eq -m ]; then
echo "Check for CloneBuildInstall"
if [ "$5" -eq pass ]; then
DEVICE_ID=$3
callCloneBuildInstall $SEND_DEVICE_ID
else
echo "call CloneBuildInstall"
# Zip log file and save it with deviceId
callCloneBuildInstall $SEND_DEVICE_ID
fi
fi
function callCloneBuildInstall {
./CloneBuildInstall.sh -d $SEND_DEVICE_ID
}
答案 0 :(得分:7)
来自help test
:
[...]
STRING1 = STRING2 True if the strings are equal.
[...]
arg1 OP arg2 Arithmetic tests. OP is one of -eq, -ne, -lt, -le, -gt, or -ge.
但无论如何,条件的每个部分都是[
的单独参数。
if [ "$arg" -eq 0 ]; then
if [ "$arg" = 0 ]; then
答案 1 :(得分:2)
为什么不使用
之类的东西如果[" $#" -ne 0]; ## args的数量不应为零 echo" USAGE:"
fi
答案 2 :(得分:1)
何时/如何在测试中使用“==”或“-eq”运算符?
简单地说,在进行词法比较时使用==
a.k.a字符串比较,但在进行数值比较时使用-eq
。
其他形式的-eq
(相等)为-ne
(不相等),-gt
(大于),-ge
(大于或等于),{{1 (小于)和-lt
(小于或等于)。
有些人可能还建议更喜欢-le
。
示例:
(( ))
当您在Bash中时,始终使用[[ $string == "something else" ]]
[[ $string != "something else" ]] # (negated)
[[ $num -eq 1 ]]
[[ $num -ge 2 ]]
(( $num == 1 ))
(( $num >= 1 ))
而不是[[ ]]
,因为前者会跳过与字词拆分和路径名扩展等条件表达式无关的不必要的扩展。