インタラクションを必要としないシェルプログラミング

目次

1. インタラクションフリー

1.1. 定義:

1.2. Linux における自由な対話の適用:

2. 相互作用を伴わない分類

2.1、インタラクションのないヒアドキュメント

2.1.1. 概要:

2.1.2、フォーマット:

2.1.3. 注意事項

2.1.4、変数置換のサポート

2.1.5、複数行のコメント

2.2、インタラクションフリーを期待する

2.2.1 一般的なエスケープ文字とその使用法:

2.2.2. 基本コマンド

2.2.3. 一般的な構文:

2.2.4. 記述形式:

2.2.5. 結論

2.2.5.1、期待値

2.2.5.2、対話: つまり、現在のエンドユーザーのままになります。

2.2.5.3、セット 

2.2.5.4、exp_Continue

2.2.5.5、send_user

2.2.5.6、パラメータの受信


1. インタラクションフリー

1.1. 定義:

ワンクリックで実行でき、手動介入や人間による制御は不要で、操作を完了でき、操作とメンテナンスの自動化を継続できます。

1.2. Linux における自由な対話の適用:

Linux オペレーティング システムでは、対話を伴う操作 (オペレータのニーズに合わせてシステムの指示に従って対応する操作) が多く、シェル スクリプトの運用と保守を自動化するには、対話を実現する必要があります。 -無料で運用保守の自動化を実現

一般的に使用される対話型プログラム: read、ftp、passwd、su、sudo、fdisk など。cat は非対話型の方法で出力をファイルにリダイレクトすることもできます

2. 相互作用を伴わない分類

2.1、インタラクションのないヒアドキュメント

2.1.1. 概要:

I/O リダイレクトを使用して対話型プログラムやコマンド (ftp、cat、read コマンドなど) にコマンド リストを提供することは、標準入力の代わりとなり、スクリプト開発者が入力情報を構築するために一時ファイルを使用する必要がなく、直接入力情報を作成できるようになります。適切な場所に「ファイル」を生成し、それを「コマンド」の標準入力として使用します。ヒアドキュメントは、非対話型プログラムやコマンドでも使用できます。

2.1.2、フォーマット:

コマンド << マーク (EOF)
...    
マーク間のコンテンツ # は受信コンテンツです
...
マーク (マークはまったく同じである必要があります)

2.1.3. 注意事項

  1. マークは任意の法的文字 (通常は EOF) を使用できます。
  2. エンドマークは上文字で書く必要があり、その前に文字を置くことはできません
  3. 終了タグの後には文字(スペースを含む)を含めないでください。
  4. 開始タグの前後のスペースは省略されます

 マークされたもので終わる

2.1.4、変数置換のサポート

ファイルを書き込むときは、まず変数が実際の値に置き換えられ、次に cat コマンドと組み合わせて書き込みが完了します。

2.1.5、複数行のコメント

Bash のデフォルトのコメントは「#」で、単一行のコメントのみをサポートしていますが、ヒア ドキュメントの導入により複数行のコメントの問題が解決されました。「:」は何も行わない空のコマンドを表します。中央のマークされた領域の内容は実行されず、bash によって無視されるため、バッチ コメントの効果が得られます。

 

2.2、インタラクションフリーを期待する

tcl 言語に基づくツール、自動化されたテストと制御。主な目的は、スクリプトを使用して対話型の問題を解決することです。

2.2.1 一般的なエスケープ文字とその使用法:

\n: 改行文字を示します。

\t: タブ文字を示します

\r: 改行を示します

\b: バックスペース文字を表します

2.2.2. 基本コマンド

スクリプトインタープリタ

このファイルは最初にexpectスクリプトに導入され、どのシェルが使用されるかを示します。: #!/usr/bin/expect

実装方法。

1. chmod 777 xxx.sh を実行する権限が必要です。

2. Bash sh は使用できません。「./」のみを使用して実行できます。

2.2.3. 一般的な構文:

1. spawn: 通常、その後に Linux 実行コマンドが続きます。これは、セッションを開き、プロセスを開始し、その後の対話情報を追跡することを意味します。

例:spawn passwd root

2.expect: 最後の出力結果に指定された文字列が含まれているかどうかを判断し、含まれている場合はすぐに戻り、そうでない場合はタイムアウトを待って戻ります。spawn によって開始されたプロセスの出力のみをキャプチャします。コマンドの実行後に出力を受け取るために使用されます。 、目的の文字列と一致します

3. send: ユーザー入力をシミュレートするために文字列をプロセスに送信します。このコマンドは自動的にリターンしたり改行したりすることはできません。通常は \r (Enter) または \n を追加します。

2.2.4. 記述形式:

1. Expect "password" {send "abc123\r"}: 同じ行の送信部分には {} が必要です

2.「パスワード」を期待します

      「abc123\r」を送信します

改行送信部分には {} は必要ありません

3.expect は複数の分岐をサポートします。いずれかのケースが一致する限り、対応する send ステートメントを実行し、expect ステートメントを終了します。

期待する

{

"パスワード 1" {送信 "abc123\r"} "

パスワード 2" {送信 "123456\r"} "

パスワード 3" {送信 "123123\r"}

}

2.2.5. 結論

2.2.5.1、期待値

インタラクションが終了し、実行が終了するのを待って、元のユーザーに戻ることを示します (スポーンに対応)。

たとえば、root ユーザーに切り替えると、expect スクリプトはデフォルトで 10 秒待機します。コマンドの実行後、デフォルトで 10 秒待機し、その後自動的に元のユーザーに戻ります。

つまり、切り替える前のエンドユーザーです

2.2.5.2、対話: つまり、現在のエンドユーザーのままになります。

実行完了後、対話状態を維持し、コンソールに制御権を与えると、ターゲット端末に留まり、元の端末には戻りません。この時、手動で操作することができます。たとえば、対話の後に exit を追加しても、root ユーザーは終了しません。また、対話がない場合は、リモート端末に留まるのではなく、ログイン完了後に終了します。Interact を使用するとターミナルに留まり、元のターミナルには戻りません。たとえば、root ユーザーに切り替えると、常に root ユーザー状態になります。たとえば、別のサーバーに ssh 接続すると、常に root ユーザー状態になります。はターゲット サーバーのターミナルにあり、元のサーバーには戻りません。

注: Expect Eof と Interact はどちらか一方のみを選択できます。

2.2.5.3、セット 

デフォルトのタイムアウト時間は 10 秒で、セッション タイムアウト時間は set コマンドで設定できます。タイムアウト時間が制限されていない場合は、-1 に設定する必要があります。

対話なしでパスワードを変更する

2.2.5.4、exp_Continue

exp_ continue は、expect 判定項目に付加され、その項目が一致した後、expect 判定文内の他の項目と引き続き一致することができます。

exp_ continue を使用する場合、パスワードを入力した後にプロセスを終了する passwd などのコマンドを追跡する場合は、expect に加えて Expect eof を追加しないでください。{}

2.2.5.5、send_user

send_user は echo コマンドを意味し、echo と同等です。印刷機能

2.2.5.6、パラメータの受信

Expect スクリプトは、[lindex $argv n] を使用して取得された bash コマンド ラインから渡される引数を受け入れることができます。このうち、n は 0 から始まり、それぞれ 1 番目、2 番目、3 番目…のパラメータを表します。

シェル内の位置変数の位置 $1 および $2 と同様

文法形式

ホスト名を設定 [lindex $argv 0]

パスワードを設定 [lindex $argv 1]

注: Expect スクリプトは、bash、source、. (これら 3 つの方法はシェル インタプリタを呼び出すため) を通じて実行することはできず、絶対パスまたは相対パスを通じてのみ実行できます。

おすすめ

転載: blog.csdn.net/Breeze_nebula/article/details/132004364