技術共有

シェルは自動対話を期待します (例)

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

シェルは自動化された対話を期待します

Linux の日常的な運用とメンテナンスでは、多くの場合、サーバーにリモートでログインする必要があります。ログイン プロセスでは対話的なプロセスが必要になり、Yes/No などの情報を入力する必要があるため、対話を実現するために Expect が使用されます。 。

キーの構文

❶[#!/usr/bin/expect]

この行は、スクリプト内のコードを実行するためにどのシェルを使用するかをオペレーティング システムに指示します。ここでの処理は、実際には Linux の bash や Windows の cmd と同じであることが予想されます。 注: この行はスクリプトの最初の行である必要があります。

❷セット

Expect のデフォルトのタイムアウトは 10 秒です。タイムアウトが制限されていない場合は、セッション タイムアウトを -1 に設定する必要があります。

例: set timeout 300 //セッションタイムアウトが 300 秒であることを示します

例: set timeout -1/設定/タイムアウトなし、共通設定

注: タイムアウトを設定する必要があるのはなぜですか? デフォルトの時間は 10 秒であるため、対話型の実行中に切断される可能性があり、タスクの実行が完了する前に終了します。リモート FTP からファイルを同期する当社のスケジュールされたタスクは常に終了しました。その後、タイムアウトを -1 に設定しましたが、問題ありませんでした。

❸スポーン

通常、spawn の後には Linux 実行コマンドが続きます。これは、セッションを開き、プロセスを開始し、その後の対話情報を追跡することを意味します。

❹期待する

spawn によって実行されたコマンドの実行結果のみが Expect によってキャプチャされます。これには、主に標準入力プロンプト情報、e​​of、およびタイムアウトが含まれます。コマンド プロンプトが表示されるまで待ちます。これは、ユーザー入力をキャプチャするためのプロンプトです。

➎送信

インタラクションが必要な値を送信すると、ユーザーの手動入力が置き換えられます。このコマンドは自動的に入力したり改行したりすることはできず、通常は r (キャリッジ リターン) または n を追加する必要があります。

Expect "password"{ send "abc123r"} //同じ行の送信部分には {} が必要です

❻ターミネーターはeof/interactを期待します

EOFを期待する

これは spawn に対応して追加する必要があり、if....endif と同様にキャプチャ ターミナルの出力情報が終了することを意味します。

交流する

実行完了後は対話状態を維持し、制御をコンソールに移します。この時点で手動操作を実行できます。このような文がない場合は、リモート端末に留まらず、ログイン完了後に終了します。

PS: 自動タスクを実行するには、expect スクリプトは、interact または Expect eof で終わる必要があります。

シェルスクリプトにexpectコマンドを挿入します。形式は次のとおりです。

例 1: 22.sh フォルダー作成スクリプト

#!/bin/sh

期待する

ssh 10.1.1.196 を起動する

パスワードを入力してください {send xxxn}

送信 cd /home/cg/hmf_app/testr

mkdir newworkr を送信

終了を送信

EOFを期待する

終了

例 2: フォルダーの作成シェル スクリプト

期待する

ssh 10.1.1.196 を起動する

パスワードを入力してください {send xxxn}

送信 cd /home/cg/hmf_app/testr

mkdir newworkr を送信

終了を送信

EOFを期待する

終了

例 3: ファイルのコピー

期待する

タイムアウトを -1 に設定

scp [email protected]:/data/package/casb/$casbzip ./ を生成します。

パスワードを入力してください {send xxxn}

EOFを期待する

終了

述べる:

終了

...

終了

シェルスクリプトを表します

参照する:シェルは自動化されたインタラクションを期待します_シェル スクリプト インタラクティブな自動入力コンテンツ - CSDN ブログ