Bash expect脚本中的循环操作
我有一个大约5k个用户的列表,我需要通过服务器程序的后端命令API来运行这些用户,以便检索帐户信息。现在我通过两个脚本来完成这项工作。第一个是bash脚本,它接受文件中的每一行并将数据提供给下一个脚本,即expect脚本。expect脚本然后将文件中的数据作为参数,并对命令API执行telnet以获取所需的数据。这很好,但出于效率的考虑,并且不必在我的服务器上打开5k telnet连接,有没有办法在expect脚本中的单个telnet操作中循环所有文件数据 Bash脚本:Bash expect脚本中的循环操作,bash,expect,Bash,Expect,我有一个大约5k个用户的列表,我需要通过服务器程序的后端命令API来运行这些用户,以便检索帐户信息。现在我通过两个脚本来完成这项工作。第一个是bash脚本,它接受文件中的每一行并将数据提供给下一个脚本,即expect脚本。expect脚本然后将文件中的数据作为参数,并对命令API执行telnet以获取所需的数据。这很好,但出于效率的考虑,并且不必在我的服务器上打开5k telnet连接,有没有办法在expect脚本中的单个telnet操作中循环所有文件数据 Bash脚本: #!/bin/bas
#!/bin/bash
exp="/path_to_expect_script"
file="/path_to_data_file"
while read -r user; do
$exp "$user" </dev/tty
echo
done < $file
我想要这样的东西:
send "MYCOMMAND $user\r"
expect "200 OK"
send "MYCOMMAND $user\r"
expect "200 OK"
send "MYCOMMAND $user\r"
expect "200 OK"
etc..
如何使用expect执行此操作?您可以从expect脚本执行此操作。如评论中所述,如果您有权为所有用户执行MYCOMMAND
spawn telnet 127.0.0.1 825
expect "200 PWD Server ready"
send "ROOT username\r"
expect "300 please send the PASS"
send "ROOT password\r"
expect "200 login OK, proceed"
set fp [open $file r]
while { [gets $fp user] >= 0 } { #; Assuming file just contains user names
send "MYCOMMAND $user\r"
expect "200 OK"
}
close $fp
send "quit\r"
interact
否则,您可以通过修改while循环尝试以新用户身份登录,如下所示
while { [gets $fp user] >= 0 } {
send "su $user\r"
expect "300 please send the PASS"
send "PASS password\r"
send "MYCOMMAND $user\r"
expect "200 OK"
}
当您以用户A身份登录时,您是否有权运行MYCOMMAND user_B?是的,假设您所说的“user_A”是授权tellnet会话的用户。MYCOMMAND user_B只是从while循环中的文件中引入的一个变量。这几乎可以正常工作。我必须改变的一件事是将“expect”200ok改为“expect”200data follow。下面是发生的事情。它执行动作,但每执行一个命令,它就会在输出上加倍。MYCOMMAND用户200数据跟随MYCOMMAND用户数据我想从第一个命令这里200数据跟随我想从第二个命令这里
while { [gets $fp user] >= 0 } {
send "su $user\r"
expect "300 please send the PASS"
send "PASS password\r"
send "MYCOMMAND $user\r"
expect "200 OK"
}