我正在编写一个bash脚本,通过telnet登录网络设备,使用expect来检索设备状态信息。一切都工作正常,我从设备得到了预期的结果,然而,当试图在一个句子中回应结果时,它会有点混乱。
这是我的bash脚本,其输出显示为:
#!/bin/bash
hostName=$1
INT=$(expect -c '
set timeout 1
set userName admin
set password password
spawn telnet '$hostName'
expect "..."
expect "Connected to"
expect "'^]'."
expect "Username:"
send "$userName"
send "\r"
expect "Password:"
send "$password"
send "\r"
expect "admin@telnet"
expect ">"
send "vsp power"
send "\n"
expect "admin@telnet"
expect ">"
send "exit"
' | grep - | awk '{print $3}')
echo "$INT" # basic output showing indeed the correct value return from $INT
echo "vspP $INT | vspP=$INT""V" # the preferred output to allow logging
第一个echo显示基本结果是正确的。第二个回波的输出加扰,如下面的输出结果所示:
# ./vsppower.sh 192.168.0.12
23.67
VvspP=23.67
首选实际输出为:
vspP 23.67 | vspP=23.67V
请提供协助我如何更正此回声输出。
答案 0 :(得分:0)
我认为你的字符串中有一个Carriage Return或其他奇怪的字符。要尝试找到它,请执行以下操作:
set | grep -i INT | cat -vet
set
将显示所有环境变量,grep
将找到您想要的特定变量。然后cat -vet
会在其中显示任何奇怪的字符,例如<{1}}用于回程。
$ INT结束时有一个回车符。尝试在^M
脚本结束后和使用INT
expect
它使用INT=$(tr -d '\r\n' <<< $INT) # Strip linefeeds and returns
和tr
来删除换行和回车。