インタラクティブプログラミングダイアログ付き---期待

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 "调用完成了哦"

参照リンク:

  1. https://www.cnblogs.com/regit/p/7985740.html
  2. https://www.cnblogs.com/lzrabbit/p/4298794.html
  3. https://www.cnblogs.com/taosim/articles/3785817.html

おすすめ

転載: blog.csdn.net/jjt_zaj/article/details/113055179