以下预期脚本目标是从 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/bin
Solaris,因此我们在命令前设置 PATH 以确保在任一系统上都能正确找到它。