gpt4 book ai didi

bash - 从 Bash 调用的 Expect 脚本的退出状态代码

转载 作者:行者123 更新时间:2023-11-29 09:49:38 27 4
gpt4 key购买 nike

我制作了一个 Bash 脚本,它使用 expect 脚本来自动执行 ssh 登录。该脚本连接到多个服务器并运行一些命令。bash 脚本会提示输入一次登录凭据。

我想合并一个功能,如果第一个服务器登录失败,脚本将终止,以避免脚本检查下一个服务器导致用户帐户被锁定。连续3次登录失败,且脚本尝试连接的服务器数量超过3台,导致账号被锁定。

这是调用 expect 脚本的 bash 脚本中的片段。

countu=0
for servername in $(cat $linux_host_list)
do
./script.expect $LUSERNAME $LPASS $servername Linux >> linux_log_file.txt & < /dev/null
let countl=countl+1
done

这里是 expect 脚本 (script.expect) 片段

#!/usr/bin/expect -f
set timeout 30
set username [lindex $argv 0]
set SPASS [lindex $argv 1]
set servername [lindex $argv 2]
set case [lindex $argv 3]
set prompt "(%|#|\\$|%\]) $"
switch $case {
Linux {
log_user 0
spawn ssh -o StrictHostKeyChecking=no $username@$servername
expect {
"assword:" {
send "$SPASS\r"
expect -re "$prompt"
}
expect -re "$prompt"
}
send "sudo su -\r"
expect {
"assword:" { send "$SPASS\r" }
}
expect -re "$prompt"
log_user 1
send "opcagt -status ; opctemplate -l ; cat watch.cf 2> /dev/null\r"
expect -re "$prompt"
log_user 0
send "exit\r"
expect -re "$prompt"
log_user 1
}

我尝试获取 bash 命令输出 ($?),假设如果因 expect 脚本中的密码错误登录失败,bash 命令将返回一个非零值,但没有成功。任何建议将不胜感激。

最佳答案

对于 expect 脚本中的错误检查,在 http://systeminetwork.com/article/handle-errors-expect-scripts 有一个不错的例子

你应该做的是这样的:

proc do_exit {msg} {
puts stderr $msg
exit 1
}

switch -exact -- $case {
Linux {
spawn ssh ...
expect {
-re {assword: $} {
send -- "$SPASS\r"
exp_continue
# remain in this expect block and look for the next matching pattern
}
"some message about incorrect password" {
do_exit "incorrect password"
}
timeout {do_exit "timed out waiting for prompt"}
default {do_exit "something else happened"}
-re $prompt
}
# ... rest of your script
}
}

我假设您不需要了解“opcagt ...”系列命令的退出状态(您只想查看 watch.cf 文件的内容。如果您关心的话,您会需要让shell告诉你:

send -- "opcagt -status 2>&1 || echo "non-zero return from opcagt: $?"
expect {
"non-zero return" { handle error and exit? }
-re $prompt
}
# ... continue

关于bash - 从 Bash 调用的 Expect 脚本的退出状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1302113/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com