Schreiben Sie eine Befehlszeile, die „Hallo“ ausgibt, wenn die Anzahl der Dateien im aktuellen Verzeichnis größer ist als die in der ersten Zeile der Dateiprüfung angegebene Zahl.
Das funktioniert gut, aber ich möchte eine einzige Befehlszeile. Irgendwelche Ideen?
firstline=$(head -1 check)
allfiles=$(ls | wc -l)
echo $allfiles $firstline
if (($allfiles > $firstline)); then
echo "hello"
else
echo "oh no"
fi
Antwort1
Sie können diesen Einzeiler verwenden:
files=( * ); [[ ${#files[@]} -gt $(head -1 check) ]] && echo 'hello' || echo 'oh no'
files
Das Array enthält die Dateien des aktuellen Verzeichnisses und ${#files[@]}
zeigt daher die Elemente im Array, d. h. die Anzahl der Dateien im aktuellen Verzeichnis.
Die Datei check
, deren erste Zeile eine Zahl ist, wird von extrahiert head -1 check
.
Hier ist die erweiterte Form:
Wenn die Anzahl der Dateien größer ist als die Zahl in der ersten Zeile von check
( [[ ${#files[@]} -gt $(head -1 check) ]]
), hello
wird schließlich gedruckt.
Hier ist die erweiterte Form:
#!/bin/bash
files=( * )
if [[ ${#files[@]} -gt $(head -1 check) ]]; then
echo 'hello'
else
echo 'oh no'
fi