Expectシェルを使用したUnixシェルスクリプト

Expectシェルを使用したUnixシェルスクリプト

私は、AIXの各サーバー上のアダプターのマイクロコード・レベルを収集するためにExpectシェルを使用するスクリプトを作成しています。

#!/bin/ksh
for hostname in ABCD123 ABCD234 ABCD445
do
expect << 'EOS'
set hos {$hostname}
spawn ssh padmin@$hostname
expect "Password:"
send "ABC1234\n"
expect "$"
send "oem_setup_env\n"
expect "#"
send "lsmcode -A | sed -e 's/^/$hos: /'\n"
expect "#"
send "exit\n"
expect "$"
send "exit\n"
EOS
done

しかし、残念ながらスクリプトは機能しません。助けてください

出力は次のようにする必要があります

ABCD123 : sys0!system:CL320_040 (t) CL320_040 (p) CL320_040 (t)
ABCD123 : ent0!14101103.CN0110
ABCD123 : ent1!14101103.CN0110
ABCD123 : ent2!14101103.CN0110
ABCD123 : ent3!14101103.CN0110
ABCD123 : ent4!14108802.DV0210

ベストアンサー1

引用されたheredocを使用しているため、シェルはシェル変数を拡張しません$hostname。これを行う:環境を介して必要な変数を渡します。

export hostname
for hostname in ABCD123 ABCD234 ABCD445
do
    expect << 'EOS'
        set hos $env(hostname) ;# access the environment variable
        spawn ssh padmin@$hos
        expect "Password:"
        send "ABC1234\r"
        expect "$"
        send "oem_setup_env\r"
        expect "#"
        send "lsmcode -A | sed -e 's/^/$hos: /'\r"
        expect "#"
        send "exit\r"
        expect "$"
        send "exit\r"
        expect eof             ;# wait for the connection to close
EOS
done

\r通常、コマンドを送信するには「Enterキーを押します」を使用します。

おすすめ記事