【发布时间】:2015-08-09 17:35:17
【问题描述】:
我有一个 bash 脚本,并在其中创建并执行一个 python 脚本,该脚本使用 lxml etree 解析一个巨大的 xml 文件以提取以下数据:
数据可能有多个服务器或只有一个或没有,每个服务器将有4个数据名称、ip、端口和优先级值:
name1
1.1.1.1
port#
priority
name2
1.1.1.2
port#
priority
name3
1.1.1.3
port#
priority
我需要读取这个文件,并与文件中指定的 ip 和端口建立 ssh 连接。如果连接到第一个 IP 成功,我会“断开”,否则我会尝试第二个连接,依此类推...
我目前在脚本中定义了一个循环,其中有 2 个特定 IP 被硬设置为变量,如下所示:
echo -e "\n${YELLOW}Checking HOST SSH Connectivity.$NOCOLOR"
for HOST in $HOST1 $HOST2; do
ERRno=0
echo -e "${YELLOW}Attempting to connect to $HOST From $IP${NOCOLOR}"
if cat < /dev/tcp/$HOST/22 </dev/null; then
echo -e "\n${CYAN}Connection To $HOST Over Port 22 From ${YELLOW}$IP ${CYAN}Seem's Good. Starting SSH Session. ${YELLOW}To End SSH Session Hit CTRL-C.$NOCOLOR"
if ! /usr/bin/ssh -c aes256-ctr -F "$SSHCONF" -p 22 "$HOST" "$CMD" ; then
echo -e "${RED}Please Check Connectivity, SSH Session Ended.$NOCOLOR"
fi
else
echo -e "${RED}Unable to connect to $HOST, Customer should make sure Port 22 Outbound is Allowed Through Firewall from $IP to $HOST.$NOCOLOR"
ERRno=3
fi
# If we had a good session (on the 1st server), break out, we are done
[[ $ERRno -eq 0 ]] && break
if [[ $HOST != $HOST1 ]]; then
echo -e "${RED}No More Servers To Try. Unable To Establish Any SSH Session.$NOCOLOR"
exit $ERRno
else
echo -e "${YELLOW}Trying Next Server...${NOCOLOR}"
fi
done
但是,阅读长度可能不同的文件是我感到困惑的地方。
我怎样才能做到这一点? 我应该构建和排列和索引吗? 我应该做一个while读取循环吗?
无论哪种方式,请提供示例。
【问题讨论】:
-
如果你已经在使用 Python,为什么不在 Python 中做这部分呢?
-
脚本的其余部分是用 bash 编写的,而且它很大,我不想重写它......它只是更简单......
-
好的,为什么不让 Python 程序创建一个 bash 脚本来获取源而不是数据文件。脚本可以展开循环,找到合适的主机后退出...
-
这是个好主意,谢谢我可以试试。