理論+実験・シェルプログラミングのインタラクションフリー


理論+実験・シェルプログラミングのインタラクションフリー
文書ディレクトリ
  • 理論+実験・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リダイレクト方式でコマンドリストをインタラクティブプログラムに提供する
    標準入力の代替品
    構文フォーマット
      <   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