期望脚本 + 如何在期望脚本中执行案例

期望脚本 + 如何在期望脚本中执行案例

以下预期脚本目标是从 linux/solaris 机器打印主机名,并根据主机名结果预期脚本将运行 linux.ksh 或 solaris.ksh 脚本

expect_sun_script=`cat << EOF
set timeout -1
spawn   telnet 0 $IP_ADDRESS


expect login:           {send $LOGIN\r}
expect Password:        {send "PASS\r"}

expect -re {#|>}        {send "/bin/hostname\r"}

因此 - 获取主机名后,我需要为主机名 - machine1 运行 linux.ksh

或者如果我得到主机名 - machine2 那么我需要运行脚本 - solaris.ksh

但是expect如何根据主机名来运行脚本呢?

根据我的以下示例:

预计实际上会等待机器 1 - 但是可能是机器 2,因此它卡住了....

我的目标是根据相关主机名运行 linux.ksh 或 solaris.ksh

请指教 ?

expect "machine1"            { send "/var/tmp/linux.ksh\r "  } 
expect "machine2"            { send "/var/tmp/solaris.ksh\r" }

.
.
.
.
.
.

答案1

我认为你可以做类似的事情

expect "machine1" {send "/var/tmp/linux.ksh\r" } \
"machine2"  { send /var/tmp/solaris.ksh\r" } \
.
.
.

话虽如此,使用起来可能更容易尤纳姆它将分别返回Linux和,SunOS并且随着主机的来去,脚本的管理应该变得更加容易。

expect -re {#|>}        {send "PATH=/bin:/usr/bin:$PATH uname\r"}

expect "Linux" { send /var/tmp/linux.ksh\r" } \ 
expect SunOS { send /var/tmp/solaris.ksh\r" }

请注意,该uname命令适用/bin于 Linux 和/usr/binSolaris,因此我们在命令前设置 PATH 以确保在任一系统上都能正确找到它。

相关内容