Eu gostaria de uma solução de 2 partes. Uma parte é o script expect, a outra parte é o script Shell.
Para o script expect, deve ser um script genérico que aceite entrada e produza saída.
Este é o meu exemplo de script de espera que aceita nome de host e senha, e produzirá o nome do vcprofile para o servidor
[user@server ~]$ cat getvcprofile.expect
#!/usr/bin/expect
set timeout 2
set host [lindex $argv 0]
set password [lindex $argv 1]
spawn ssh "ADMIN\@$host"
expect_after eof { exit 0 }
expect "yes/no" { send "yes\r" }
expect "assword" { send "$password\r" }
expect "oa>" { send "show vcmode\r" }
expect "oa>" { send "exit\r" }
exit
No script de shell, chamarei o script expect e forneci-o com a variável, nesse caso, o nome do host para vcsystem. A senha é na verdade um padrão de acordo com o nome do host OA @ XXXX - onde o XXXX é o último número de 4 dígitos do servidor
[user@server ~]$ cat getvcprofile.sh
#/bin/bash
# get VC profile for a host
host=$1
#get the blade enclosure
enclosure='callsub -enc $host |grep Enclosure: | cut -d" " -f2'
if [ ! -z $enclosure ]; then
#get the last 4 digit of the enclosure
fourdigit=${enclosure: -4}
domain='./getvcprofile.expect ${enclosure}oa OA@${fourdigit} |grep Domain|awk '{print $NF}''
echo $domain
else
echo "None"
fi
Com essa solução de duas partes, posso fazer algo assim:
for X in 'cat serverlist.txt'; do echo -n $X": "; ./getvcprofile.sh $X; done
E ele imprimirá o vcprofile para cada um dos servidores no arquivo serverlist.txt