2017-03-19 5 views
0

„die folgenden Befehle in die Datei anhängen, dass, wenn diese Datei es die folgenden tun ausgeführt wird:Wie wird die Anzahl der Zeilen während des Betriebs angezeigt?

4) anzeigen Diese Datei anzeigen hat x Zeilen

5)

Diese Datei hat Wörter x

6) Anzeige dieser Datei hat x Bytes "

Ich weiß, der Befehl ist die Variationen von wc, aber ich kann nicht herausfinden, wie dieser Befehl dem Skript hinzuzufügen, nur wie es ausgeführt wird.

+0

einfach am Anfang des Skripts Zeilen hinzufügen, die notwendige Werte zählen und sie ausdrucken. oder Wrapper vorbereiten, der den Skriptnamen als Parameter erhält, dann zählt er diese Werte, druckt diese Werte und führt dann das Skript aus – darvark

+1

Warum zeigst du uns nicht, was du versucht hast, das Ergebnis und das Ergebnis, das du gesucht hast zum? Es ist sehr schwer zu empfehlen, wie Sie Ihren Code reparieren können, wenn Ihr Code nicht in Ihrer Frage enthalten ist. – ghoti

Antwort

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 

sollte den Trick tun.

+0

THANKYOU genau das, was ich gesucht habe – codingchallenged

+0

Ich habe auch Probleme mit dem Programm nach Benutzereingaben fragen, ich weiß, ich muss den Lesebefehl verwenden, aber ich bin mir nicht sicher, wie man das Skript um Eingabe bitten. – codingchallenged

0

Es ist ein Einzeiler, mit bash process substitution.

Die Ausgabe ist auch ein One-Liner, und Sie können bash Arrays nutzen, wenn Sie möchten. Hier ist ein echtes Beispiel:

$ 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 

ähnliche Ergebnisse in POSIX-Shell könnten unter Verwendung eine temporäre Datei erreicht werden:

$ 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 

Oder Sie können die Daten als hier-doc ohne die temporäre Datei holen:

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

(Offensichtlich würden Sie die interaktiven Eingabeaufforderungen Streifen, wenn Sie das Skript sind.)

Beachten Sie, dass printf für die Ausgabe über echo empfohlen wird, da es für verschiedene Betriebssysteme und Shells konsistent ist. This excellent post erläutert einige Überlegungen.

Verwandte Themen