expectはデフォルトのシステムインストールパッケージではありません。追加のインストールが必要です。
#检查时候安装
rpm -qa | grep expect
#安装
yum install expect
#搜索位置
which expect
メインコマンド
対話へのインタラクティブのExpectの実現は、主にパッケージexpectに含まれている4つのコマンドに依存しています。
spawn
実行するコマンドexpect
コマンドプロンプト、つまりユーザー入力をキャプチャするためのプロンプトが表示されるのを待ちます。含めるだけsend
画面に文字列を入力します。プロンプトの後に手動で入力したコンテンツと同等ですinteract
/expect eof
どのinteract
クロス状態の実行が、コンソールに制御を終了する維持手段と、この時間は、手動で操作することができます。そのような文がない場合は、リモート端末にとどまるのではなく、ログイン後に終了します。expect eof
スポーンに対応するということは、キャプチャ端末の出力が終了することを意味します
expectコマンドの使用方法
- スクリプトは、最初にexpectライブラリの使用を示しています。
#!/usr/bin/expect
- ここのドキュメントを使用してbashスクリプトにネストされています:
/usr/bin/expect << eof text eof
-c
コマンドを使用してbashスクリプトにネストします。expect -c "内容"
関連するコンテンツをエスケープする必要がある場合がありますが、これはさらに面倒です。- expectの内容をスクリプトに分けて、bashスクリプトを呼び出します。
expect file grgv
他のいくつかのコマンドの説明
set
タイムアウトを設定でき、変数を設定することもできますtimeout
タイムアウト待機時間が予想されます。デフォルトは10秒です。-1はタイムアウトしないことを意味しますexp_continue
次のマッチングを実行し続けます。少しループの意味です\r
これはキャリッジリターンとして理解でき、各送信後に追加する必要があります。交換できるかどうかはまだわかりません$argc
位置パラメータの数を数える[lindex $argv 0]
スクリプトの最初のパラメーター。bashの$ 1などに似ています。puts
エコーと同様に文字列を出力しますexpect{...}
複数のレコードを入力してください
例1:単純で通常の使用
#!/usr/bin/expect -f
spawn ssh [email protected]
expect {
"yes/no" {send "yes\r"; exp_continue}
"password:" {send "root_passwd\r"; exp_continue}
"]" {send "echo \$USER\r"}
}
expect "]"
send "ls\r"
#interact
expect eof
例2:パラメーターの使用が含まれています
#!/usr/bin/expect
#set login_ip "10.130.41.130"
#set login_user "root"
#set login_pass "root_passwd"
# 这里展现了两种参数格式
#set login_ip [lrange $argv 0 0]
set login_ip [lindex $argv 0]
set login_user [lrange $argv 1 1]
set login_pass [lrange $argv 2 2]
spawn ssh $login_user@$login_ip
expect {
"yes/no" {send "yes\r"; exp_continue}
"password:" {send "$login_pass\r"; exp_continue}
"]" {send "echo \$USER\r"}
}
expect "]"
send "ls\r"
expect eof
例3:-cパラメーターを指定して呼び出す
#!/usr/bin/bash
expect -c "
spawn ssh [email protected] 'ls'
expect {
\"yes/no\" {send \"yes\\r\"; exp_continue}
\"password:\" {send \"root_passwd\\r\"}
}
#interact
expect eof
"
例4:ファイル形式で呼び出す
#!/bin/bash
echo "要调用expect了啊,等着啊"
# 这里的文件路径使用的相对路径,expect脚本和当前脚本在同一个目录下
expect test_expect.sh
echo "调用完成了哦"
参照リンク:
- https://www.cnblogs.com/regit/p/7985740.html
- https://www.cnblogs.com/lzrabbit/p/4298794.html
- https://www.cnblogs.com/taosim/articles/3785817.html