2016-11-15 7 views
0

Um meine Daten in strukturierter Form halte ich oft tief Ordner-Bäume am Ende mit, wo es ein wenig lästig sein kann in so schrieb ich eine Funktion zurück und vorwärts gehen eine HTML zu erzeugen Baum des cwd:Vermeiden Anweisungen in if-Anweisungen Fehler erhöhen, wenn falsche bash

function toc_date { 

    # Get the date in _YYYY-MM-DD format 
    D=`date +_%F` 

    # Build the tree, -H flag to output as HTML, 
    # . to use current dir in <a href> link 

    tree -H . >> toc$D.html 

} 

Das Problem entstand, als ich eine Follow-up-Funktion schrieb alte Ordner-Baum-Dateien zu entfernen, und zwar in der ersten ausdr von [ "$(ls -b toc_* | wc -l)" -gt "0" ], die einem Fehler gibt, wenn keine Dateien auch gefunden werden, obwohl es Wert ist ist korrekt auf 0 gesetzt, was die if-Anweisung überspringen sollte (richtig?). Der Code funktioniert wie vorgesehen, aber Fehlermeldungen sind normalerweise kein Zeichen für guten Code. Hoffen wir also, dass jemand Verbesserungen vorschlagen kann?

function old_stuff { 

    # Number of lines i.e. files matching toc_* 
    if [ "$(ls -b toc_* | wc -l)" -gt "0" ] 
    then 
     # Show files/directories so we don't remove stuff unintended  
     ls toc_* 

     while true; do 
       read -p "Do you wish to remove old TOCs? [Y/n]" yn 
       case $yn in 
        [Nn]*) break;; 
        [Yy]*) rm toc_*; break;; 
        *) echo "Please answer yes or no.";; 
       esac 
     done 
    fi 
    # Go ahead and generate the html tree 
    toc_date 
} 

Antwort

0

ändern Sie es an:

if [ "$(ls -b toc_* 2>/dev/null | wc -l)" -gt "0" ] 

Eine weitere leicht lesbare und bessere Weise wird (abgezogen unnötige Anführungszeichen):

if [ $(ls | grep -c '^toc_') -gt 0 ] 
+0

Dank Fehler zu vermeiden! Ich mag besonders die zweite Option, da sie den Fehler ls "keine solche Datei oder dieses Verzeichnis" umgeht, anstatt sie umzuleiten. – edager

0

nur ein Rat, nehmen Sie diese heraus "$(ls -b toc_* | wc -l)" und Set es sich in einer variablen

fileCount=$(ls -b toc_* 2>/dev/null | wc -l) 

Die 2>/dev/null ist stderr das heißt jede Art von Fehlermeldung auf/dev/null

Und es ist auch zu senden ratsam Sie immer [[ ]] verwenden, wenn Sie eine if-Anweisung schreiben, wie unary operator is expected

Verwandte Themen