bash - 如何调整此 bash 脚本以在 SSH 中成功运行 telnet 命令?
问题描述
我正在尝试编写一个 bash 脚本来执行以下工作流程:
- 通过端口 9100 上的 IP 地址 Telnet 进入联网设备
telnet x.x.x.x 9100
- 运行 SGD 命令
! U1 getvar \"internal_wired.ip.timeout.value\"
。 - 期望输出值为
"10"
。
这是我到目前为止编写的 bash 脚本:
#!/bin/bash
IP=(x.x.x.x)
for i in ${IP}
do
echo " "
echo "Welcome! This script will check the timeout value of this networked device."
echo "The expected output should be `"10`". Let's get started!!"
echo " "
sleep 4
echo "5....."
sleep 1
echo "4...."
sleep 1
echo "3..."
sleep 1
echo "2.."
sleep 1
echo "1."
sleep 1
echo " "
telnet ${i} 9100 << END_SSH
sleep 5
getvar \"internal_wired.ip.timeout.value\"
sleep 5
END_SSH
done
当我通过 运行此脚本时bash mycode.sh
,我在 Terminal.app 中得到以下输出:
$ bash mycode.sh
Welcome! This script will check the timeout value of this networked device.
The expected output should be "10". Let's get started!!
5.....
4....
3...
2..
1.
Trying x.x.x.x...
Connected to x.x.x.x.
Escape character is '^]'.
Connection closed by foreign host.
[user@server ~]$
x.x.x.x
是要添加的 IP 占位符。
理论上,在该Escape character is '^]'.
行之后,脚本应该已经运行了! U1 getvar "internal_wired.ip.timeout.value\"
命令。
此外,我们应该有一个预期的输出"10"
。
当我第一次编写这个脚本时,我最初并没有END_SSH
命令。一位同事向我介绍了这一点,并说将telnet
命令包装END_SSH
在 telnet 中时,终端在技术上是如何跳出 SSH 的。我试过利用END_SSH
,但没有成功。
如何让 telnet 命令成功运行并获得预期的输出值?
解决方案
您误解了“END_SSH”是什么。这不是一个“命令”——它是 bash 中所谓的“Here-document”。
本质上, the<<END_SSH
和 the之间的文本END_SSH
是一个“here-document”,它通过管道传输到telnet ${i} 9100
. 因此,这些sleep 5
命令从未真正执行过,并且输入甚至在连接建立之前就达到了 EOF。
我不知道你到底想要完成什么,但我想下面的工作会更好。哦,那个奇怪的IP=(x.x.x.x)
声明是怎么回事?那应该是一个数组吗?
#!/bin/bash
declare -a IP=(1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4)
for i in "${IP[@]}"; do
echo " "
echo "Welcome! This script will check the timeout value of this networked device."
echo "The expected output should be \"10\". Let's get started!!"
sleep 4
for j in {5..1}; do
echo $j
sleep 1
done
{ sleep 5; echo -n $'! U1 getvar "internal_wired.ip_timeout.value"\n'; sleep 5; } | telnet ${i} 9100
done
推荐阅读
- java - Java 的 JDBC 连接进度 OpenEdge 11.1
- c# - 将函数从 c# 添加到 c++
- regression - Linearmodels下的PooledOLS抛出零除错误
- python - 取消设置 PATH 变量,并使用 shebang 执行 python 程序
- angular-material - 如何使用 Mat Table 按空格分隔的多个关键字进行搜索
- javascript - 访问内部对象并形成 Jsx
- r - 如何插入和填充火花数据框
- jenkins - 获取最近使用的 Jenkins slave 列表
- python - 在冒泡排序中计算气泡,如何在更短的时间内得到这个计数
- docker - HA 代理后面的 Nexus3 docker 注册表