交换机端口基于ip地址bash脚本

时间:2014-04-15 20:30:25

标签: bash

如何在bash脚本中基于ip地址切换端口?

我试过这个:

#!/bin/bash
servers=(***.**.**.24 ***.**.**.66 ***.**.**.59 ***.**.**.67 ***.**.**.58 ***.**.**.70 ***.**.**.68)

case "$servers" in
    ***.**.**.24)
    port=28260
    ;;
    ***.**.**.58)
    port=27260
    ;;
    ***.**.**.59)
    port=27260
    ;;
    ***.**.**.66)
    port=28270
    ;;
    ***.**.**.67)
    port=27290
    ;;
    ***.**.**.68)
    port=28260
    ;;
    ***.**.**.70)
    port=28260
    ;;
esac

但它只返回第一个端口。

感谢任何帮助。 :)

1 个答案:

答案 0 :(得分:1)

问题是servers是一个包含多个元素的数组,而$servers只是扩展到第一个元素。

如果要遍历数组并为每个条目打印一些内容,可以使用:

#!/bin/bash     
servers=(***.**.**.24 ***.**.**.66 ***.**.**.59 ***.**.**.67 ***.**.**.58 ***.**.**.70 ***.**.**.68)

for host in "${servers[@]}"
do
  case "$host" in
      ***.**.**.24)
      port=28260
      ;;
      ***.**.**.58)
      port=27260
      ;;
      ***.**.**.59)
      port=27260
      ;;
      ***.**.**.66)
      port=28270
      ;;
      ***.**.**.67)
      port=27290
      ;;
      ***.**.**.68)
      port=28260
      ;;
      ***.**.**.70)
      port=28260
      ;;
  esac

  echo "$host:$port"
done