Expectインタラクションフリー

1788 ワード

一、expectの概要:(1)expectはtclに基づいて構築されたツールであり、expectは自動化制御とテストを行うためのツールであり、主にshellスクリプトでインタラクティブではない問題を解決する.大規模なlinux運用次元に役立ちます(2)linux運用次元と開発では、リモートログインサーバで操作することがよく必要です.ログインプロセスはインタラクティブなプロセスであり、yes/no passwordなどの情報を入力する必要がある場合があります.この入力をシミュレートするにはexpectスクリプトを使用します.(3)取付
yum install expect -y
二、基本コマンド:(1)send:プロセスに文字列を送信し、ユーザーの入力をシミュレートする(このコマンドは自動的に折り返し改行できない.一般的にr(折り返し)を加える)(2)expect:前回の出力結果に指定した文字列が含まれているかどうかを判断し、もしあればすぐに折り返し、そうでなければタイムアウト時間を待ってから戻る.spawnによって開始されたプロセスの出力のみをキャプチャできます.(3)sapwn:プロセスを開始し、後続のインタラクティブ情報を追跡します.(4)interact:実行が完了したらインタラクティブな状態を保ち,制御権をコンソールに渡す.(5)timeout:タイムアウト時間を指定し、期限が切れたら後続命令を実行し続ける.
単位:秒timeout-1がタイムアウトしないデフォルトで10秒
(6)exp_continue:expectが命令(7)send_を下に実行し続けることを許可するuser:echo(8)$argvパラメータ配列に相当:expectスクリプトはbashから渡されるパラメータを受け入れることができ、[lindex$argv n]を使用して(9)expectスクリプトを得るにはinteractまたはexpect eofで終了する必要があります.自動化タスクを実行するには通常expect eofで十分です.
expect eofは、spawnによって起動されたコマンドが終了するとeofタグが生成され、expect eofはこのタグを待っている.
三、expect実行方式:(1)直接実行:例:sshリモートログイン、ユーザー名とパスワードのインタラクティブ入力を免除.
1 #!/usr/bin/expect   //expect         
  2 set timeout 20    //    
  3 log_file test.log  
  4 log_user 1
  5 
  6 set hostname [lindex $argv 0]  //0       
  7 set password [lindex $argv 1]  //1        
  8 spawn ssh root@$hostname  //    ,   
  9 
 10 expect {  //    
 11         "(yes/no)"
 12         {send "yes\r";exp_continue}
 13         "*password"
 14         {send "$password\r"}
 15 }       
 16 
 17 interact //         

埋め込み使用
1 #!/bin/bash
  2 ip=$1
  3 password=$2
  4 
  5 /usr/bin/expect<

**ケース1:ユーザーzhangを作成します.パスワードは123123です.
** 1 #!/bin/bash
  2 yonghu=$1
  3 mima=$2
  4 useradd $yonghu //    
  5 /usr/bin/expect <