何时/如何使用" =="或" -eq"操作员在测试?

时间:2014-07-22 03:50:47

标签: linux bash shell syntax

在下面的代码中,我想比较命令行参数和参数,但我不确定将参数与参数进行比较的当前语法是什么..." =="或" -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
}

3 个答案:

答案 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 )) 而不是[[ ]],因为前者会跳过与字词拆分和路径名扩展等条件表达式无关的不必要的扩展。