ホームページ  >  記事  >  運用・保守  >  シェルの自動対話を実装するための Expect コマンドを説明する例

シェルの自動対話を実装するための Expect コマンドを説明する例

小云云
小云云オリジナル
2017-12-22 09:19:262778ブラウズ

この記事では、シェルによる自動対話を実現するためのexpectコマンドについて、ループや判定などの簡単な制御フロー機能をシェル経由で実装できる例を交えて説明します。以下の記事では、シェルの自動対話を実現するための Expect コマンドの使用に関する関連情報を中心に、サンプルコードを通じて詳しく紹介しています。必要な方は一緒に参照してください。

背景

Linux スクリプトには、リモート ログイン ssh、リモート コピー scp、ファイル転送 sftp など、リモート操作のための多くのシナリオがあります。これらのコマンドにはセキュリティ パスワードの入力が必要です。コマンドを通常に使用するには、パスワードを手動で入力し、セキュリティ検証を受け入れる必要があります。自動化されたリモート操作を実現するために、expect の機能を借用できます。

expect は、人間の介入なしで通信するための自動化された対話型タスクを実装するために使用される無料のプログラミング ツール言語です。 Expect は時間の経過とともに常に進化しており、その機能はますます強力になり、システム管理者の強力なアシスタントとなっています。 Expect をシステム上で実行するには、まず Tcl プログラミング言語のサポートが必要です。

expectのインストール

expectはTclに基づいて作成されているため、expectをインストールする前にTclをインストールする必要があります。

(1) Tclのインストール

ホームページ: http://www.tcl.tk

ダウンロードアドレス: http://www.tcl.tk/software/tcltk/downloadnow84.tml

1.ソース コード パッケージをダウンロードします

wget http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl8.4.11-src.tar.gz

2. ソース コード パッケージを解凍します

tar xfvz tcl8.4.11-src.tar.gz

3. インストールと設定


1. インストールが完了したら、tcl ソース コードのルート ディレクトリに移動し、tclUnixPort をコピーします。サブディレクトリ unix の下の .h をサブディレクトリ generic にコピーします。

2. tcl ソース コードは、予期されるインストール プロセスにまだ必要であるため、まだ削除しないでください。

(2) インストールを期待します (Tcl ライブラリが必要です)


ホームページ: http://expect.nist.gov/


1. ソースコードパッケージをダウンロードします

cd tcl8.4.11/unix 
./configure --prefix=/usr/tcl --enable-shared 
make 
make install

2. ソースコードパッケージを解凍します

wget http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz/download

3. インストールと設定

tar xzvf expect5.45.tar.gz

expect


expect のコアは、spawn、expect、send、set です。

spawn は実行するコマンドを呼び出します


    expect コマンドプロンプト情報が表示されるのを待ちます。つまり、ユーザー入力のプロンプトをキャプチャします。
  • send は対話を必要とする値を送信し、ユーザーマニュアルを置き換えますinput
  • set は変数 value
  • interact を設定します。実行完了後、対話状態が維持され、制御がコンソールに渡されます。このとき、手動操作を実行できます。このような文がない場合は、リモート端末に留まらず、ログイン完了後に終了します。
  • expect eof を追加する必要があります。これは、if....endif
  • expect スクリプトと同様に、キャプチャ端末の出力情報が終了することを意味します。通常、expect eof は、次のようになります。自動化されたタスクを実行するのに十分です。


その他の設定


    タイムアウトを期待しないように設定しますタイムアウトを-1に設定します
  • タイムアウトを期待する300秒を設定します。300秒を超えても期待されるコンテンツが表示されない場合は、終了しますタイムアウトを300に設定します
  • 構文を期待する


expect は tcl 構文を使用します


    Tcl コマンドはスペースで区切られた単語で構成され、最初の単語はコマンド名で、残りはコマンドパラメータです
  • cmd arg arg arg


  • $ 記号。変数の値を表します。この例では、変数名は foo です。
  • $foo


    たとえば、あるコマンドの結果を引数として別のコマンドに渡す場合、角括弧は入れ子になったコマンドを実行します。コマンドの場合は、記号
  • [cmd arg]

  • を使用します。二重引用符は、フレーズをコマンドの引数としてマークします。「$」記号と角かっこは、引き続き二重引用符内で解釈されます。
  • 中括弧は、コマンドのパラメータとしてマークされたフレーズも示します。ただし、中括弧内の他の記号は解釈されません

  • バックスラッシュ記号は、特殊記号を引用するために使用されます。例: n は、を表します。バックスラッシュ記号も使用されます。「$」記号、引用符、角括弧、中括弧の特別な意味を閉じるために使用されます

  • login.expは、リモートログイン、ショートカットメソッド専用です。 :login.exp "exclude" "${remote_ip} " "${remote_user}" "${remote_passwd}" "${remote_command}"

    cd expect5.45 
    ./configure --prefix=/usr/expect --with-tcl=/usr/tcl/lib --with-tclinclude=../tcl8.4.11/generic 
    make 
    make install 
    ln -s /usr/tcl/bin/expect /usr/expect/bin/expect
    もう学びましたか?この記事を読んで、シェル自動化の相互作用についてより深く理解していただければ幸いです。
関連する推奨事項:


Linux シェルのプロダクション記録および再生関数スクリプト

Python はシェル sed 置換の単純な関数を実装します

日付に従ってファイルをダウンロードする Linux シェルの FTP メソッド

以上がシェルの自動対話を実装するための Expect コマンドを説明する例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。