linux オートメーション インタラクション スクリプト 説明
I. はじめに
expectスクリプトは、Tclスクリプト言語の拡張機能です。人が介在しない対話的な作業を自動化するために使用されます。実際の開発では、シェルスクリプトを実行する際に、linuxのパスワードやmysqlのパスワードなどを入力することがありますが、expectがそれを代行してくれます。
II. インストール
ExpectationはLinuxに付属していませんので、自分でインストールする必要があります。
sudo apt-get update
sudo apt-get install expect
III. 簡単なexpectスクリプト
3.1. スクリプトの書き方
まず、expectスクリプトを作成します。
sudo vim hello.exp
hello.expの下に以下のように記述します。
#! /usr/bin/expect
set timeout 5
spawn su
expect {
assword {send "123456\r"} # your linux password
}
interact
hello.expの実行
expect hello.exp
実行すると、ユーザーがrootになることがわかります。linuxを使ったことがある人ならわかると思いますが、rootユーザーになるにはパスワードを入力する必要があります。これがexpectの自動対話です。
3.2. スクリプトの説明
(1)
#! /usr/bin/expect
シェルスクリプトと同じように、実行するスクリプトを指定します。
#! /bin/bash
expectがどこにインストールされているのかわからない場合は
which expect
を参照してください。私のは /usr/bin/expect にインストールされています。
(2)
タイムアウト5を設定
set: を設定するセット変数です。
カスタム変数
を設定し、さらにexpectスクリプトを設定することができます。
内部変数
の値です。
のタイムアウトが発生します。
タイムアウト
は、expectスクリプトの
内部変数
を使用することはできず、私たちのカスタム名を使用するには、この
内部変数名
タイムアウトは秒単位で、デフォルトは10秒、-1を指定するとタイムアウトしない。
set timeout 5: expect文の中で、5秒後にタイムアウトが切れ、それ以上選択されないことを意味します。
(3)
スポーン・スー
新しいプロセスを開始して実行する
su
コマンド
(4)
expect { assword send {"123465r"}}.
expect: プロセスから情報を受け取り、マッチングに成功したらexpect後のアクションを実行する
send: プロセスに文字列を送信する
expect {
assword send {"123465\r"}
}
説明 出力に
assword
を送信し、もしそうなら、コマンド
123456\r
(そうでない場合は、タイムアウトを待ってexpect文を終了します。
(5)
対話する
spawnでコマンドを実行した後は、終了せず、残りの操作を手動で行います。例えば、sshにログインする場合、expectスクリプトが(パスワードを手入力することなく)代わりにログインしてくれ、その後、手動で操作する必要があるのです。
3.3. まとめ
この時点で、expectスクリプトの本質は既にお分かりだと思います。linuxが何を返すかを事前に知っていて、その情報を取り込んで対応する。
IV. 本体
4.1、コモンコマンドの説明
<テーブル コマンド 説明 タイムアウトを設定する n expect文のタイムアウトをn秒に設定します。-1は決してタイムアウトしません 名前の設定値 変数名をnameに、値をvalueに設定する 名前を設定する [インデックス $argv 0]. expectスクリプトに渡された最初の引数の値を変数名として設定します。第1引数のインデックスは0、第2引数は1、...となります。 スポーン 新しいプロセスを開始したり、コマンドを実行したり、プログラムを指定したりします。 期待する 処理で返された情報を受け取り、マッチングが成功した場合(大文字小文字を区別する)、expect後のアクションを実行する 送信 プロセスへ文字列を送信する send_user メッセージを表示するために使用します。シェルのechoに相当します。 exp_continue post-expectアクションを実行した後、expectを終了せず、マッチダウンを継続するようにする 期待する ユーザーとのインタラクションを許可せず、ただ終了させる (これはインタラクションよりも多く使われるでしょう) 対話 ユーザーとのインタラクションを許可する
4.2. 例 シェルスクリプトの実行
(1) シェルスクリプト1.shを作成します。
#! /bin/bash
echo "read print"
read -p "please input name in there " NAME
echo ${NAME}
read -p "input password in there " PASSWORD
echo ${PASSWORD}
このスクリプトは、アカウント番号、パスワードを入力し、それを印刷するためのものです。
(2) expectスクリプト、1.expを作成します。1.expに情報を入力してもらう
#! /usr/bin/expect
# To run the shell script, write the absolute path to the shell script
spawn bash /home/hadoop/test/1.sh
# Set the timeout for the expect statement. Default is 10s
set timeout 3
expect {
#expect is similar to a swtich statement in that it matches the statement inside the parentheses {}, and as soon as it finds a match, it will execute
#expect will exit after execution, but not after adding exp_continue, it will continue to execute.
#Here is the match string, no double quotes, case sensitive
name {
send "meizhaowei\r"
send_user "success\n"
# send back a message to the user, similar to echo, print the message to the console
exp_continue
}
assword {send "123456\r"}
}
expect eof # the opposite of interact, executing the program without going into manual interaction
(3) 実行
通常、1.shを実行すると、名前とパスワードを手動で入力するよう求められますが、ここでは、1.expを実行した後、1.expに1.shの情報を入力させることができます
expectの構文をもっと深く掘り下げたい場合は、以下のマニュアルを参照してください。
オリジナルの英語版:http://www.tcl.tk/man/expect5.31/expect.1.html
中国語翻訳: https://blog.csdn.net/cbuy888/article/details/80561461
この記事は、linuxの自動化対話スクリプトexpectについて紹介されています。もっと関連するlinuxの自動化対話スクリプトexpectの内容は、スクリプトハウスの過去の記事を検索してください。
関連
-
シェルでCPUを占有するスクリプトをlinuxで書く方法
-
シェルスクリプトでの/dev/nullの使用方法まとめ
-
[解決済み】Bash スクリプトと /bin/bash^M: bad interpreter: そのようなファイルまたはディレクトリがない [重複] [重複
-
Shell() は整数に対する数学演算を実装しています。
-
シェルアレイへの要素追加と注意点
-
新しく追加されたディスクを素早く作成、フォーマット、マウントするためのシェルスクリプト
-
シェルファジー・マッチングとレギュラー・ディテール
-
Linux Shellのパラメータ取得方法
-
シェルでのawk printの使い方を解説します
-
シェルで一定時間ごとにスクリプトを実行する例
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン