私の連絡先情報
郵便メール:
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 によってキャプチャされます。これには、主に標準入力プロンプト情報、eof、およびタイムアウトが含まれます。コマンド プロンプトが表示されるまで待ちます。これは、ユーザー入力をキャプチャするためのプロンプトです。
➎送信
インタラクションが必要な値を送信すると、ユーザーの手動入力が置き換えられます。このコマンドは自動的に入力したり改行したりすることはできず、通常は 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 ブログ