理論+実験・シェルプログラミングのインタラクションフリー
理論+実験・シェルプログラミングのインタラクションフリー
文書ディレクトリ理論+実験・Shellプログラミングのインタラクションフリー Here Document概要 I/Oリダイレクト方式によりコマンドリストをインタラクティブプログラム に提供する.標準入力の代替品 構文フォーマット Here Document使用上の注意事項 タグは、任意の正当な文字 を使用することができる.の最後のマークは必ず上に書いてください.前には 文字はありません.の末尾のタグの後ろにもスペースを含む文字はありません. 先頭マークの前後のスペースは が省略されます. Here Documentインタラクションフリー readコマンドで入力を受け付ける を印刷する. passwdによりユーザにパスワード を設定する. Here Document変数設定 変数置換 変数設定 Here Document形式制御 変数置換機能 を閉じる.各行前のTAB文字を除去=>'-'は行頭のTAB作用を抑制する を示す. Here Document複数行注記 Here Document方式によりBashに複数行注釈 をサポートする.構文フォーマット 例 Expect概要 Expect Expectインストール マウントディスク ローカルYUMソース を作成インストールコマンド を実行する.基本コマンド expect send spawn 終了符 set===>ログ、情報表示 exp_continue==>スキップせずに にマッチングを続行 send_user 受信パラメータ Expect構文 単一分岐構文==>一致するコンテンツと送信されたコンテンツには、二重引用符 を付ける必要があります.マルチブランチパターン構文 Expect実行方式 直接実行 埋め込み実行 Here Documentの概要
I/Oリダイレクト方式でコマンドリストをインタラクティブプログラムに提供する
標準入力の代替品
構文フォーマット
Here Document使用上の注意事項
タグは任意の合法的な文字を使用できます
最後のマークは必ず上に書いてください.前には何の文字もありません.
末尾のタグの後ろにも文字(スペースを含む)は使用できません.
先頭マークの前後のスペースは省略されます
Here Documentインタラクションフリー
readコマンドで入力を受け入れて印刷する
passwdでユーザーにパスワードを設定する
Here Document変数設定
変数置換
変数の設定
Here Document形式制御
変数置換機能を閉じる
各行前のTAB文字を除去==>'-'は行頭のTAB作用を抑制することを示す
Here Document複数行コメント
Here Document方式でBashに複数行コメントをサポートさせる
構文フォーマット
例
Expectの概要
Expect
tcl上に構築されたツール==>yum-y install expect
自動制御とテスト用
shellスクリプトでのインタラクティブな問題の解決
Expectインストール
マウントディスク
地元YUMソースを作る
インストールコマンドの実行
基本コマンド
expect
最後の出力結果に指定した文字列が含まれているかどうかを判断し、ある場合はすぐに返します.そうでない場合はタイムアウト時間を待ってから返します.
spawnによって開始されたプロセスの出力のみをキャプチャできます
姉捜命令実行後の出書に用いられ、所望の文字列と一致する
send
ユーザーの入力をシミュレートする文字列をプロセスに送信
このコマンドは自動で改行することはできません.通常はr(リターン)を追加します.
spawn
プロセスを開始し、後続のインタラクティブ情報を追跡
エンドキャラクタ
expect eof==>>自動通話タスクの実行には通常expect eofが使用されます
実行終了待ち
interact
実行が完了したらインタラクティブな状態を維持し、制御権をコンソールに渡す
set===>ログ、情報表示
タイムアウトイベントを設定し、国有企業は後続命令を継続する
単位は秒
timeout-1はタイムアウトしないことを示します
デフォルトではtimeoutは10秒です
exp_continue==>>スキップせずにマッチングを続行
指定をexpectで続行
send_user
エコーコマンド、echoに相当
受信パラメータ
Expectスクリプトはbashから渡されるパラメータを受け入れることができます
[lindex$argv n]を使用して取得できます.
nは0から、それぞれ1番目、2番目、3番目...パラメータを表す
set変数名(filename)[lindex$argv 0]
Expect構文
単一分岐構文===>一致するコンテンツと送信されたコンテンツには二重引用符を付ける必要があります
マルチブランチパターン構文
Expect実行方式
直接実行
埋め込み実行
文書ディレクトリ
I/Oリダイレクト方式でコマンドリストをインタラクティブプログラムに提供する
標準入力の代替品
構文フォーマット
< EOF
...
...
EOF
Here Document使用上の注意事項
タグは任意の合法的な文字を使用できます
最後のマークは必ず上に書いてください.前には何の文字もありません.
末尾のタグの後ろにも文字(スペースを含む)は使用できません.
先頭マークの前後のスペースは省略されます
Here Documentインタラクションフリー
readコマンドで入力を受け入れて印刷する
[root@localhost ~]# vim test.sh
#!/bin/bash
read i <
passwdでユーザーにパスワードを設定する
[root@localhost ~]# vim test.sh
#!/bin/bash
useradd zhangsan
passwd zhangsan <passwd
123123
EOF
[root@localhost ~]# bash test.sh
Here Document変数設定
変数置換
[root@localhost ~]# vim test.sh
#!/bin/bash
doc_file="test.txt"
cat>$doc_file<
[root@localhost ~]# vim test.sh
#!/bin/bash
doc_file="test.txt"
i="first"
cat>$doc_file<
変数の設定
[root@localhost ~]# vim test.sh
#!/bin/bash
doc_file="test.txt"
testfile=$(<
Here Document形式制御
変数置換機能を閉じる
[root@localhost ~]# vim test.sh
#!/bin/bash
cat<
This is test.
$text
EOF
[root@localhost ~]# bash test.sh
This is test.
$text
各行前のTAB文字を除去==>'-'は行頭のTAB作用を抑制することを示す
[root@localhost ~]# vim test.sh
#!/bin/bash
cat<'-' TAB
This is test.
$text
EOF
[root@localhost ~]# bash test.sh
This is test.
$text
Here Document複数行コメント
Here Document方式でBashに複数行コメントをサポートさせる
構文フォーマット
:<
例
[root@localhost ~]# vim test.sh
#!/bin/bash
:<
Expectの概要
Expect
tcl上に構築されたツール==>yum-y install expect
自動制御とテスト用
shellスクリプトでのインタラクティブな問題の解決
Expectインストール
マウントディスク
地元YUMソースを作る
インストールコマンドの実行
[root@localhost ~]# yum -y install expect
[root@localhost ~]# rpm -qa|grep expect
expect-5.45-14.el7_1.x86_64
[root@localhost ~]# rpm -qa|grep tcl
tcl-8.5.13-8.el7.x86_64
基本コマンド
expect
最後の出力結果に指定した文字列が含まれているかどうかを判断し、ある場合はすぐに返します.そうでない場合はタイムアウト時間を待ってから返します.
spawnによって開始されたプロセスの出力のみをキャプチャできます
姉捜命令実行後の出書に用いられ、所望の文字列と一致する
send
ユーザーの入力をシミュレートする文字列をプロセスに送信
このコマンドは自動で改行することはできません.通常はr(リターン)を追加します.
spawn [email protected] ===> --- if
expect "connecting (yes/no)?" ===> ---
send yes\r ===> ---
spawn
プロセスを開始し、後続のインタラクティブ情報を追跡
エンドキャラクタ
expect eof==>>自動通話タスクの実行には通常expect eofが使用されます
実行終了待ち
interact
実行が完了したらインタラクティブな状態を維持し、制御権をコンソールに渡す
set===>ログ、情報表示
タイムアウトイベントを設定し、国有企業は後続命令を継続する
単位は秒
timeout-1はタイムアウトしないことを示します
デフォルトではtimeoutは10秒です
exp_continue==>>スキップせずにマッチングを続行
指定をexpectで続行
send_user
エコーコマンド、echoに相当
受信パラメータ
Expectスクリプトはbashから渡されるパラメータを受け入れることができます
[lindex$argv n]を使用して取得できます.
nは0から、それぞれ1番目、2番目、3番目...パラメータを表す
set変数名(filename)[lindex$argv 0]
Expect構文
単一分岐構文===>一致するコンテンツと送信されたコンテンツには二重引用符を付ける必要があります
expect "password:" {send " \r";}
マルチブランチパターン構文
expect "aaa" {send "AAA\r"}
expect "bbb" {send "BBB\r"}
expect "ccc" {send "CCC\r"} ===>send , \r
expect {
"aaa" {send "AAA\r"}
"bbb" {send "BBB\r"}
"ccc" {send "CCC\r"} ===> aaa bbb ccc , send expecct
}
expect {
"aaa" {send "AAA\r";exp_continue}
"bbb" {send "BBB\r";exp_continue}
"ccc" {send "CCC\r"} ===>exp_continue , aaa, send bbb
}
Expect実行方式
直接実行
[root@localhost ~]# more test.sh
#!/usr/bin/expect ===>Expect
set timeout 60 ===> 60
log file test.log ===>
log_user 1 ===> 0
set hostname [lindex $argv 0] ===>
set password [lindex $argv 1]
spawn ssh root@$hostname ===>
expect { ===>
"(yes/no)"
{send "yes\r"; exp_continue}
"*password"
{send "$password\r"}
}
interact ===>
[root@localhost ~]# chmod a+x test.sh
[root@localhost ~]#./test.sh
埋め込み実行
#!/bin/bash
hostname=$1
password=$2
/usr/bin/expect<Expect
spawn ssh root@${hostname}
expect {
"(yes/no)"
{send "yes\r";exp_continue}
"*password:"
{send "$password\r";}
}
expect "*]#"
send "exit\r"
expect eof
EOF ===>Expect ,EOF