猫のファイル|しばらく読み取りラインの問題

ループをリダイレクト

おそらく、あなたは他のスクリプトでは、次のようなアプローチを見ている必要があります。
読み取りラインながら、
行う
       ...
完了<ファイル
ただ、この構造を見始めて、ファイルがサイクルと一緒に働くことですか<理解することは困難です。そこループ内のコマンドの多くはある、とリダイレクトするので、コマンドが機能するために私達の前の接点があります。そこ原則、原則マスターであり、この問題は非常に簡単です:
入力リダイレクトを循環すると、標準入力コマンドからデータを読み出すために必要なすべてのサイクルに適用可能です。
循環リダイレクトされた出力は、ループ標準出力にデータを書き込むために必要なすべてのコマンドに適用されます。
サイクル、内部リダイレクト外部リダイレクトカバー内に明示的に入力または出力のリダイレクトを使用する場合。
上記構造が、リードコマンドは、標準入力からデータを読み取る必要があります。私たちは、このコマンドは、シェルスクリプトの中で最も頻繁に使用されるコマンドの一つである、読み取りの使用を詳しく見て、それをコマンド取ります。
読む
読み出しコマンドの構文を初めて目:
ARG1 ARG2 ARG3 ARG4を読みます...
リードコマンドに割り当てられ、それはこれらの値を順次ARG1、ARG2、ARG3、ARG4 ...、場合空間における入力フィールドセパレータとして可変位置に割り当てられ、標準入力から値を取得する必要があります。
標準リードからの入力データので、最大読み取り特性は、対話スクリプトで生成することができるです。、まず、私たちは頻繁に割り当てる必要があるため、なぜ非常に一般的な理由を読んで、そしてそれが対話することができため、2番目、3は変数の代入に複数回読み込むことができます。
$ホストのIP名を読み取ります
Linuxの10.0.0.1 licong
$エコー$ホストの$ IPの$名
Linuxの10.0.0.1 licong
$
あなたは、Linuxの、10.0.0.1を見ることができ、licongは変数ホスト、IPおよび名前に割り当てられていました。見て:
$ホストのIPを読みます
Linuxの10.0.0.1 licong
$エコー$ホスト
Linuxの
$エコー$のIP
10.0.0.1 licong
$
我々は、フィールドが変数の数よりも大きい入力すると、最後の変数の値は、複数のフィールドになりますが、残りのすべての内容は、入力フィールドが変数の数よりも小さい場合、余分な変数はnullになります、あなたは自分自身を試すことができます。今、私たちは見ていきます
読み取りラインながら、
行う
       ...
完了<ファイル
入力のリダイレクトを介して読み取る、最初のファイルのすべての内容は、一般的に円形の本体可変コマンド処理ラインを含む、可変行線に割り当てられ、次に、ファイルの2行目のループ処理3行目。ファイルの最後の行まで。ループにそれを実行するかどうかを終了状態を次のコマンドに応じて判断しながら覚えていますか?ファイルから読み込んだ最後の行を読んだ後、次回は何のコンテンツが読めるありませんが、この;はい、そこには、ファイル内のファイルから読み込まれたときに終了ステータスは、コマンドを読んで、終了ステータスが0である、サイクルが目覚めを続けていますゼロ以外の終了ステータスを読んで、そのときのループは終了します。
別の非常に一般的な使用:
コマンド| 読み取りラインながら、
行う
    ...
完了
あなたがパイプラインの使用を覚えていれば、このような構造は、それを理解することは難しいことではありません。コマンド入力としてコマンドリード・サイクルの出力は、複数のライン出力を処理するため、この構造の長さは、当然のことながら、非常に良いawkは、このようなことを行います。
。APP_FILE = / AABB(これは複数行のファイルです)
CATます$ app_file |読むラインながら
行う
    SSH -q $ラインLS /ホーム/ ADMINが
DONE
失敗:一度だけ実行され、ループの外に
ここでの問題は、すべてのコンテンツがキャッシュに書き込まれ、一緒に読み出され、アウトSSHリダイレクトをさせていることです
注意:

各実行1. sshコマンドは、標準入力の全ての内容を読み取ります。

猫のファイル| SSH 1.1.1.1猫は、すべてのファイルの内容を読み込みます

次のように使用されるwhileループ、2.。

    猫のファイル|しばらく読み取りライン

本明細書で使用されるコマンドがリード当たりの入力ラインからデータを読み取りながら、コマンドながら入力の内容をファイルにリダイレクトします。

あなたはwhileループでsshコマンドを呼び出す場合、ここでの問題は、コマンド、sshコマンドが読み込まれる間、sshは、データをリダイレクトするために猫のファイルで行くには、入力電流内のすべてのデータを読み取ります左から次のサイクルは、コンテンツを読んで読んだときと同様に、サイクルの早期終了につながる、空です。

2つの方法でこの問題を解決するために、

-nパラメータ-n 1. sshを使用して

2. SSHのXXXX </ DEV /ヌルシェルコマンド入力のリダイレクト

主なパラメータ:

-lログインユーザが指定しました

-pポート番号を設定します。

バックグラウンドで実行され、推奨パラメータを追加します-f -n

-nは、標準的な入力の読み取りを防ぐは、/ dev / nullに、標準入力をリダイレクト

リモートコマンドを実行しないでください-N、唯一のポートフォワーディング

-qクワイエットモードでは、すべてのエラーメッセージと会話を無視します

-T無効擬似端末の構成
参考記事
http://blog.163.com/clevertanglei900@126/blog/static/11135225920118742327322/
 

まず、リダイレクション方式;パイプライン法:猫の$ FILENAME | LINEを読みながら、

機能While_read_LINE(){

猫の$ FILENAME | 読み取りLINEながら、

行う

エコー$行

完了

}

         注:私はちょうどパイプライン方式と呼ばれているすべてのこのように言えば、我々はそれが比較の外に見ることができるはずです。パイプコマンドの右に、左にパイプラインは、それが入力されると、コマンドの入力と出力がパイプラインを満たしていますとき。

第二に、例

1、pri.sh

#!/bin/bash

cat ~/xieco/dirls | while read dd
do
  echo "chown -R test:test ${dd}"
  chown -R deuser:deuser ${dd}
done
 

 

2、DIRR

/usr/local/htdocs/dcserver/utilserver/
/usr/local/configs/

###の質問尋ねた
デジタル計算A.TXT文書の数は、各列に表示され、文書全体を計算したいいくつかの数字の合計で登場しました。例えばA.TXTは、以下:
12AAの*のlkjskdj
alskdflkskdjflkjj
あなたはそれを実行する私たちのスクリプトの名前ncount.shを、:
A.TXTのbash ncount.sh
出力は次のようになります。
2
0
SUM:2

####参考答え
`` `

#!/bin/bash
sum =0
while  read  line
do
line_n=` echo  $line| sed  's/[^0-9]//g' | wc  -L`
echo  $line_n
sum =$[$ sum +$line_n]
done  < $1
echo  "sum:$sum"

  

我々は、フィールドが変数の数よりも大きい入力すると、最後の変数の値は、複数のフィールドになりますが、残りのすべての内容は、入力フィールドが変数の数よりも小さい場合、余分な変数はnullになります、あなたは自分自身を試すことができます。今、私たちは見ていきます
読み取りラインながら、
行う
       ...
完了<ファイル
入力のリダイレクトを介して読み取る、最初のファイルのすべての内容は、一般的に円形の本体可変コマンド処理ラインを含む、可変行線に割り当てられ、次に、ファイルの2行目のループ処理3行目。ファイルの最後の行まで。ループにそれを実行するかどうかを終了状態を次のコマンドに応じて判断しながら覚えていますか?ファイルから読み込んだ最後の行を読んだ後、次回は何のコンテンツが読めるありませんが、この;はい、そこには、ファイル内のファイルから読み込まれたときに終了ステータスは、コマンドを読んで、終了ステータスが0である、サイクルが目覚めを続けていますゼロ以外の終了ステータスを読んで、そのときのループは終了します。
別の非常に一般的な使用:
コマンド| 読み取りラインながら、
行う
    ...
完了
あなたがパイプラインの使用を覚えていれば、このような構造は、それを理解することは難しいことではありません。コマンド入力としてコマンドリード・サイクルの出力は、複数のライン出力を処理するため、この構造の長さは、当然のことながら、非常に良いawkは、このようなことを行います。
おそらく、あなたは他のスクリプトでは、次のようなアプローチを見ている必要があります。
読み取りラインながら、
行う
       ...
完了<ファイル
ただ、この構造を見始めて、ファイルがサイクルと一緒に働くことですか<理解することは困難です。そこループ内のコマンドの多くはある、とリダイレクトするので、コマンドが機能するために私達の前の接点があります。そこ原則、原則マスターであり、この問題は非常に簡単です:
入力リダイレクトを循環すると、標準入力コマンドからデータを読み出すために必要なすべてのサイクルに適用可能です。
循環リダイレクトされた出力は、ループ標準出力にデータを書き込むために必要なすべてのコマンドに適用されます。
サイクル、内部リダイレクト外部リダイレクトカバー内に明示的に入力または出力のリダイレクトを使用する場合。
上記構造が、リードコマンドは、標準入力からデータを読み取る必要があります。私たちは、このコマンドは、シェルスクリプトの中で最も頻繁に使用されるコマンドの一つである、読み取りの使用を詳しく見て、それをコマンド取ります。
読む
読み出しコマンドの構文を初めて目:
ARG1 ARG2 ARG3 ARG4を読みます...
リードコマンドに割り当てられ、それはこれらの値を順次ARG1、ARG2、ARG3、ARG4 ...、場合空間における入力フィールドセパレータとして可変位置に割り当てられ、標準入力から値を取得する必要があります。
標準リードからの入力データので、最大読み取り特性は、対話スクリプトで生成することができるです。、まず、私たちは頻繁に割り当てる必要があるため、なぜ非常に一般的な理由を読んで、そしてそれが対話することができため、2番目、3は変数の代入に複数回読み込むことができます。
$ホストのIP名を読み取ります
Linuxの10.0.0.1 licong
$エコー$ホストの$ IPの$名
Linuxの10.0.0.1 licong
$
あなたは、Linuxの、10.0.0.1を見ることができ、licongは変数ホスト、IPおよび名前に割り当てられていました。見て:
$ホストのIPを読みます
Linuxの10.0.0.1 licong
$エコー$ホスト
Linuxの
$エコー$のIP
10.0.0.1 licong
$
我々は、フィールドが変数の数よりも大きい入力すると、最後の変数の値は、複数のフィールドになりますが、残りのすべての内容は、入力フィールドが変数の数よりも小さい場合、余分な変数はnullになります、あなたは自分自身を試すことができます。今、私たちは見ていきます
読み取りラインながら、
行う
       ...
完了<ファイル
入力のリダイレクトを介して読み取る、最初のファイルのすべての内容は、一般的に円形の本体可変コマンド処理ラインを含む、可変行線に割り当てられ、次に、ファイルの2行目のループ処理3行目。ファイルの最後の行まで。ループにそれを実行するかどうかを終了状態を次のコマンドに応じて判断しながら覚えていますか?ファイルから読み込んだ最後の行を読んだ後、次回は何のコンテンツが読めるありませんが、この;はい、そこには、ファイル内のファイルから読み込まれたときに終了ステータスは、コマンドを読んで、終了ステータスが0である、サイクルが目覚めを続けていますゼロ以外の終了ステータスを読んで、そのときのループは終了します。
別の非常に一般的な使用:
コマンド| 読み取りラインながら、
行う
    ...
完了
あなたがパイプラインの使用を覚えていれば、このような構造は、それを理解することは難しいことではありません。コマンド入力としてコマンドリード・サイクルの出力は、複数のライン出力を処理するため、この構造の長さは、当然のことながら、非常に良いawkは、このようなことを行います。
。APP_FILE = / AABB(これは複数行のファイルです)
CATます$ app_file |読むラインながら
行う
    SSH -q $ラインLS /ホーム/ ADMINが
DONE
失敗:一度だけ実行され、ループの外に
ここでの問題は、すべてのコンテンツがキャッシュに書き込まれ、一緒に読み出され、アウトSSHリダイレクトをさせていることです
注意:

各実行1. sshコマンドは、標準入力の全ての内容を読み取ります。

猫のファイル| SSH 1.1.1.1猫は、すべてのファイルの内容を読み込みます

次のように使用されるwhileループ、2.。

    猫のファイル|しばらく読み取りライン

本明細書で使用されるコマンドがリード当たりの入力ラインからデータを読み取りながら、コマンドながら入力の内容をファイルにリダイレクトします。

あなたはwhileループでsshコマンドを呼び出す場合、ここでの問題は、コマンド、sshコマンドが読み込まれる間、sshは、データをリダイレクトするために猫のファイルで行くには、入力電流内のすべてのデータを読み取ります左から次のサイクルは、コンテンツを読んで読んだときと同様に、サイクルの早期終了につながる、空です。

2つの方法でこの問題を解決するために、

-nパラメータ-n 1. sshを使用して

2. SSHのXXXX </ DEV /ヌルシェルコマンド入力のリダイレクト

主なパラメータ:

-lログインユーザが指定しました

-pポート番号を設定します。

バックグラウンドで実行され、推奨パラメータを追加します-f -n

-nは、標準的な入力の読み取りを防ぐは、/ dev / nullに、標準入力をリダイレクト

リモートコマンドを実行しないでください-N、唯一のポートフォワーディング

-qクワイエットモードでは、すべてのエラーメッセージと会話を無視します

-T無効擬似端末の構成
参考記事
http://blog.163.com/clevertanglei900@126/blog/static/11135225920118742327322/
 

まず、リダイレクション方式;パイプライン法:猫の$ FILENAME | LINEを読みながら、

機能While_read_LINE(){

猫の$ FILENAME | 読み取りLINEながら、

行う

エコー$行

完了

}

         注:私はちょうどパイプライン方式と呼ばれているすべてのこのように言えば、我々はそれが比較の外に見ることができるはずです。パイプコマンドの右に、左にパイプラインは、それが入力されると、コマンドの入力と出力がパイプラインを満たしていますとき。

第二に、例

1、pri.sh

#!/bin/bash

cat ~/xieco/dirls | while read dd
do
  echo "chown -R test:test ${dd}"
  chown -R deuser:deuser ${dd}
done
 

 

2、DIRR

/usr/local/htdocs/dcserver/utilserver/
/usr/local/configs/

###の質問尋ねた
デジタル計算A.TXT文書の数は、各列に表示され、文書全体を計算したいいくつかの数字の合計で登場しました。例えばA.TXTは、以下:
12AAの*のlkjskdj
alskdflkskdjflkjj
あなたはそれを実行する私たちのスクリプトの名前ncount.shを、:
A.TXTのbash ncount.sh
出力は次のようになります。
2
0
SUM:2

####参考答え
`` `

#!/bin/bash
sum =0
while  read  line
do
line_n=` echo  $line| sed  's/[^0-9]//g' | wc  -L`
echo  $line_n
sum =$[$ sum +$line_n]
done  < $1
echo  "sum:$sum"

  

我々は、フィールドが変数の数よりも大きい入力すると、最後の変数の値は、複数のフィールドになりますが、残りのすべての内容は、入力フィールドが変数の数よりも小さい場合、余分な変数はnullになります、あなたは自分自身を試すことができます。今、私たちは見ていきます
読み取りラインながら、
行う
       ...
完了<ファイル
入力のリダイレクトを介して読み取る、最初のファイルのすべての内容は、一般的に円形の本体可変コマンド処理ラインを含む、可変行線に割り当てられ、次に、ファイルの2行目のループ処理3行目。ファイルの最後の行まで。ループにそれを実行するかどうかを終了状態を次のコマンドに応じて判断しながら覚えていますか?ファイルから読み込んだ最後の行を読んだ後、次回は何のコンテンツが読めるありませんが、この;はい、そこには、ファイル内のファイルから読み込まれたときに終了ステータスは、コマンドを読んで、終了ステータスが0である、サイクルが目覚めを続けていますゼロ以外の終了ステータスを読んで、そのときのループは終了します。
別の非常に一般的な使用:
コマンド| 読み取りラインながら、
行う
    ...
完了
あなたがパイプラインの使用を覚えていれば、このような構造は、それを理解することは難しいことではありません。コマンド入力としてコマンドリード・サイクルの出力は、複数のライン出力を処理するため、この構造の長さは、当然のことながら、非常に良いawkは、このようなことを行います。

おすすめ

転載: www.cnblogs.com/klb561/p/11241651.html