Bash-Frage zu „if and then“

Bash-Frage zu „if and then“

Ich schreibe dies in mein Skript. Es hat andere Teile, aber ich komme nur bei diesem Teil nicht weiter.

if [[$# == $year $month $day  ]] ; then
    cal $day $month $year
fi

Wenn ich dies ausführe, erhalte ich diese Meldung:

[[3: command not found

Also, wo liegt das Problem? Handelt es sich um eine Syntax oder einen tatsächlichen Befehl?

Hier ist der Rest meines Skripts, falls das hilft:

year=$(echo "$year" | bc)
month=$(echo "$month" | bc)
day=$(echo "$day" | bc)

if [[$# == $year $month $day  ]] ; then    
    cal $day $month $year
fi

Antwort1

Sie müssen nach den eckigen Klammern ein Leerzeichen einfügen [[.

if [[ $# == $year $month $day ]] ; then    
    cal $day $month $year
fi

So wie Sie es geschrieben haben, funktioniert das auch nicht. Sie haben „compare $#$year $month $dayals Zeichenfolge oder etwas ganz anderes. Vielleicht:

if [[ "$#" == "$year$month$day" ]] ; then    
    cal $day $month $year
fi

Antwort2

Dies bringt eine ganze Reihe Probleme mit sich.

  1. Sie benötigen ein Leerzeichen nach [[:

    [[ $# == $year $month $day ]]
    
  2. $#ist nicht das, was Sie denken. Es ist die Anzahl der Argumente, die an ein Skript oder eine Funktion übergeben werden. Es sieht so aus, als ob Sie denken, es sei tatsächlich die Liste der Argumente.

  3. ==vergleicht Zeichenfolgen, Sie geben ihm eine Art Liste. Um die Liste der an Ihr Skript übergebenen Argumente mit zu vergleichen $day $month $year, würden Sie etwa Folgendes tun:

    [[ "$@" == "$day $month $year" ]]
    
  4. calfunktioniert so nicht. Meins calfunktioniert nicht so, aberscheinbareinige neuere Versionen tun das. Ich habe keine Ahnung, was Sie eigentlich versuchen, aber es wird nicht funktionieren. Suchen Sie vielleicht nach date -d "$day/$month/$year"? Zum Beispiel

    $ date -d "08/10/2014"
    Sun Aug 10 00:00:00 CEST 2014
    

    Oder wenn Sie den Kalender eines bestimmten Monats anzeigen möchten:

    $ cal 10 2014
        October 2014      
    Su Mo Tu We Th Fr Sa  
              1  2  3  4  
     5  6  7  8  9 10 11  
    12 13 14 15 16 17 18  
    19 20 21 22 23 24 25  
    26 27 28 29 30 31     
    

verwandte Informationen