Drucken Sie „Hallo“, wenn die Anzahl der Dateien in einem Verzeichnis größer ist als die Zahl in der ersten Zeile einer Datei

Drucken Sie „Hallo“, wenn die Anzahl der Dateien in einem Verzeichnis größer ist als die Zahl in der ersten Zeile einer Datei

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'

filesDas 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) ]]), hellowird 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

verwandte Informationen