2017-03-19 24 views
0

「このファイルが実行されたとき、それは次の操作を行いますというファイルに次のコマンドを追加します。このファイルを表示します)実行中にshに行数を表示する方法は?

4は、Xライン )このファイルには、xの言葉を持って表示してい

6)このファイルはxバイトで表示されます "

私はこのコマンドがwcのバリエーションであることは知っていますが、そのコマンドをスクリプトに追加する方法を知ることはできません。

+0

スクリプトの最初の行に追加するだけで、魔女は必要な値を数えて印刷します。スクリプト名をparamとして取得するラッパーを作成したら、それらの値を数え、その値を出力してからスクリプトを実行してください。 – darvark

+1

あなたが試したこと、あなたが得た結果、探していた結果を見せてくださいために?コードがあなたの質問に含まれていない場合、あなたのコードを修正する方法をお勧めすることは非常に難しいです。 – ghoti

答えて

0
lines=$(wc -l $0) 
echo This file has $lines lines 
words=$(wc -w $0) 
echo This file has $words words 
bytes=$(wc -b $0) 
echo This file has $bytes bytes 

はすべきことです。

+0

THANKYOUまさに私が探していたもの – codingchallenged

+0

プログラムにユーザーの入力を求めてもらうのに問題があります。私はreadコマンドを使わなければならないことを知っていますが、スクリプトを入力する方法をよく分かりません。 – codingchallenged

0

bash process substitutionを使用すると1ライナーです。

$ read lines words bytes filename < <(wc /path/to/file) 

出力も1ライナーで、必要に応じてbashアレイを活用できます。ここでは実際の例です:

$ read -a arr < <(wc /etc/passwd); 
$ declare -p arr 
declare -a arr=([0]="96" [1]="265" [2]="5925" [3]="/etc/passwd") 
$ unset arr[3] 
$ printf 'lines: %d\nwords: %d\nbytes: %d\n' "${arr[@]}" 
lines: 96 
words: 265 
bytes: 5925 
POSIXシェルで

同様の結果は、一時ファイルを使用して達成される可能性があります :

$ tmp=$(mktemp /tmp/foo.XXXX) 
$ wc /etc/passwd > $tmp 
$ read lines words bytes filename < $tmp 
$ rm $tmp 
$ printf 'lines: %d\nwords: %d\nbytes: %d\n' "$lines" "$words" "$bytes" 
lines: 96 
words: 265 
bytes: 5925 

それとも、一時ファイルなしでここ-docのようにデータを取り出すことができます。

$ read lines words bytes filename <<EOT 
> $(wc /etc/passwd) 
> EOT 

(スクリプトにこのだったら当然、あなたは対話型のプロンプトを取り除くと思います。)

出力はがechoを超えていることが推奨されています。これは、異なるオペレーティングシステムとシェルで一貫しているためです。 This excellent postはいくつかの考慮事項を説明します。

関連する問題