Frage

Dies ist mein erstes Bash-Skript so vergib mir, wenn diese Frage trivial ist. Ich brauche die Anzahl der Dateien in einem bestimmten Verzeichnis $ HOME / .junk zu zählen. Ich dachte, das wäre einfach und übernahm die folgenden funktionieren würde:

numfiles= find $HOME/.junk -type f | wc -l
echo "There are $numfiles files in the .junk directory."

Typing find $HOME/.junk -type f | wc -l auf der Kommandozeile arbeitet genau, wie ich es erwartet hatte, einfach die Anzahl der Dateien zurück. Warum funktioniert das nicht, wenn es in meinem Skript eingegeben wird? Bin ich eine besondere Schreibweise fehlt, wenn es darum geht, Optionen, um die Dienstprogramme vorbei?

Vielen Dank für Ihre Zeit und Hilfe.

War es hilfreich?

Lösung

Sie müssen es nur mit Backticks umgeben:

numfiles=`find $HOME/.junk -type f | wc -l`

Der Begriff hierfür ist Befehl Substitution .

Andere Tipps

Wenn Sie bash verwenden, können Sie auch $ () für Kommandosubstitution verwenden, etwa so:

numfiles=$(find $HOME/.junk -type f | wc -l)

finde ich diese etwas besser lesbar als einfache Anführungszeichen sein, sowie mit der Fähigkeit, zu nisten mehr Befehle ineinander.

mit bash 4 (wenn Sie möchten rekursiv)

#!/bin/bash
shopt -s globstar
for file in **
do
 ((i++))
done
echo "total files: $i"

wenn nicht

#!/bin/bash
shopt -s dotglob
shopt -s nullglob
for file in *
do 
  ((i++))
done 
echo "total files: $i"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top