Linuxツール期待を経由してスクリプトを達成するための自動相互作用

1ツールを期待してインストールします

いくつかのシナリオでは、スイート自動化されたインタラクティブTCLの基礎を確立することを期待する対話型の入力コマンドを必要とし、双方向のコミュニケーションを自動的に対話プロセスがあるスクリプトによって提供されている場合があります。

産卵は、指定されたプロセスを開始 - >指定されたキーワードを取得することを期待 - >送信が指定されたコマンドを送信するためのプロセスを指定したい - >実行が終了し、完了です。

TCLが期待基づいているため、システムがTCLにインストールされていることを確認する必要があります。

#インストールTCLかどうかを確認:
[ルート@ localhostの〜]#1 whereisはTCL 
TCL:/usr/lib64/tcl8.5 /usr/include/tcl.h /usr/share/tcl8.5 

#ない場合は、yumをインストールし使用しますTCLと期待:
[ルート@ localhostの〜]#yumをインストール-Y TCL 
[ルート@ localhostの〜]#yumをインストール-Y期待

#インストールのパスを期待:
[ルート@ localhostの〜]#コマンドは-v期待
は/ usr / binが/期待

2一般的に使用されるコマンドに期待

コマンド 説明
指定されたプログラムまたはコマンドに続く新しいインタラクティブなプロセスを、開始します
期待します マッチが成功した場合の動作プロセスから情報を受信した後、我々はの実装を期待します
送ります プロセスに文字列を送ります
exp_sendを送ります 情報指定された文字列を送信するための
exp_continue 何回も期待して、あなたは試合を使用する必要があります
send_user これは、シェルのエコーのプリントアウトに対応します
対話 ユーザーとの対話を許可します
出口 終了したスクリプトを期待
EOF 実行が終了する期待
セット 変数の定義
プット 出力変数
設定されたタイムアウト タイムアウトを設定

3行動原理の導入

3.1スクリプト例

ここでは一例として、サーバへのSSHリモートログインスクリプト、このスクリプト名はremote_login.shであることを前提としています。

#!は/ usr / binに/期待して

設定されたタイムアウト30 
スポーンのssh -lルート172.16.22.131 
"パスワード*"期待
送る"123456 \ R" 
対話

3.2解釈スクリプト機能

(1)#!は/ usr / binに/期待

上記のオペレーティングシステムに指示するスクリプトファイルの最初の行にある必要があり、このスクリプトは、スクリプトを実行するためにエンジンを解析するシステムを使用する必要があります。

特定のパスは、コマンドを通して見-vコマンドを期待することができます。

注意:

ここではLinuxのbashの期待、Windowsやその他のプログラムは、CMDのように、スクリプト実行エンジンです。

スクリプトが実行可能とする必要があります(chmodの+ X remote_login.sh、またはchmodの755 auto_login.sh)、その後、コマンド./remote_login.shを実行することができます。

あなたはSHのremote_login.shを入力した場合、意味は同じではありません。明確なコールSHエンジンは、このスクリプトを実行するには、この時間は、#は/ usr / binに/期待の最初の行は無効となります!

(2)設定されたタイムアウト30

接続タイムアウトは30秒です。

(3)スポーンSSH -lルート172.16.22.131

卵、コマンドを送信ツールがインストールされていない場合は、内部コマンドは、ツールを期待しているが、「出現見つからない」というエラーが発生するようにして、期待しています。

そのようなプログラムが存在しないため、スポーン産卵のように見えるためにどのコマンドを使用しないでください。

(4) "パスワード*" 期待

このコマンドは、ここで長いタイムアウトを待って、以前に設定されているが、それは、30秒です。すぐにリターンがある場合に出力の最後の文字列は、そうでない場合は返すようにいくつかの時間を待った後、「パスワード*」が含まれて決定するために使用されます。

(5) "123456 \ R" を送信

ここでは、対話型アクションの実装で、手動でパスワードを入力すると等価です。

ヒント:待機中の異常状態がさらに検証のためにダウン滞在することができるように思われた場合は、\ rの文字列の最後をコマンド、そう。

(6)対話

ユーザーがクロス状態の完了後に行うことを期待し続ける、この時間は、ユーザが手動で操作することができます。

そうでない場合は、この1、スクリプトが完了したばかりのTelnetターミナルを過ぎて終了します後、ユーザーが動作を継続することができないであろう実行するために期待しています。

スクリプトの使用の他の例4

4.1ダイレクト期待する複数のコマンドを実行します

コンテンツの最初の行が、それはこの場合のみ./script.shそのようなスクリプトによって実行することができることに留意されたいです。

#!は/ usr / binに/期待-f 

設定されたタイムアウト10 
その後、#rootに切り替え、およびlsコマンドのDF:
産卵SU -ルートは
期待は、 "パスワード*" 
"123456 \ R&LTは、"送信
#ワイルドカード"*]"期待
"を送信しますLS \ R「
期待」#*「#別の形のワイルドカード
の送信を」DF -Th \ rを「
送信」終了\ rを「#出口産卵オープンなプロセスは

、EOF#このインタラクティブなプログラムを終了することを期待期待します

4.2シェルを期待して呼び出すことで、複数のコマンドを実行します

コンテンツの最初の行は、SH script.shは、bash script.sh又は./script.shによって、この場合、そのようなスクリプトを実行することができることに注意してください。

#!/ binに/ bashの

IP = "172.16.22.131" 
ユーザ名= "ルート" 
パスワード= "123456" 
指定执行引擎
は/ usr / binに/期待<< EOF 
    の時間を設定する30 
    スポーンのssh $ユーザ名@ $ IP DF -Th 
    期待{ 
        "*はい/いいえ" { "はい\ rを"送ります。exp_continue} 
        "*パスワード:" {} "$パスワード\ rを"送信
    } 
    EOF期待
EOF

5つの卵が見つからないソリューション

2つの方法でLinuxシェルスクリプト:このエラーは、基本的に学者を発生します。

一つは、SHのremote_login.sh、またはSHの/data/remote_login.shとして、コマンドラインパラメータSHとしてスクリプトです。

実行可能なスクリプトは、./remote_login.sh、又は/data/remote_login.shなどの権限を、実行させるように、1つは、スクリプトです。

実行するためのshコマンドラインパラメータとして、その後、#!は/ usr / binに/期待スクリプトの最初の行は失敗します、それは、見つからない産卵が見つからないというエラーを送信するなど、上記のスクリプトのすべてがautomate_login.sh必要があります次のコマンドを実行します。

./automate_expect.sh

おすすめ

転載: www.linuxidc.com/Linux/2019-08/160258.htm
おすすめ