bash脚本中的数组

时间:2013-12-03 08:02:29

标签: arrays bash

我有一个下面的脚本:

for (( i=0; i <= ( ${#arr1[@]} - 1); i++ )); do
  if [[ ${arr1[i]} > 100 ]]; then 
    echo "=> x"
    iptables -A INPUT -s 192.168.162.1 -j DROP
    exit
  else
    echo "=> y"
  fi
done

在我的数组中,没有元素&gt; 100,所有输出必须是“=&gt; y”。 当arr1[i]=1时,没关系。输出:“=&gt; y” 但是当arr1[i]=5或任何内容不是1时,它有问题,输出“=&gt; x”

我认为我的问题在if [[ ${arr1[i]} > 100 ]],但我不知道如何编辑它。 :(

帮我纠正一下。请 。非常感谢

4 个答案:

答案 0 :(得分:4)

你想要:

if (( ${arr1[$i]} > 100 )); then

或对于不支持(())的POSIX shell,您可以使用:

if [[ ${arr1[$i]} -gt 100 ]]; then

Here is a good list of other comparison operators

答案 1 :(得分:2)

你做了什么有两个问题:

  1. 您需要说if [[ ${arr1[$i]} > 100 ]]; then(请注意,它应该是$i而不是i)。

  2. if [[ ${arr1[$i]} > 100 ]]; 不正确。这会执行 lexicopgraphic 比较,并不完全符合预期。要么说:

    if [[ ${arr1[$i]} -gt 100 ]]; then

    if (( ${arr1[$i]} > 100 )); then

答案 2 :(得分:1)

你应该使用-gt,大于

答案 3 :(得分:0)

由于除了下标数组之外你不使用i,所以直接迭代数组的 values 会更简单:

for value in "${arr1[@]}"; do
    if (( value > 100 )); then
        echo "=> x"
        iptables -A INPUT -s 192.168.162.1 -j DROP
        exit
    else
        echo "=> y"
    fi
done

这包括正确比较两个整数值的另一个选项,((...))命令,它提供了一个上下文,其中>可用于数字比较而不是字符串比较。