mein Skriptname ist 1. Wenn ich „1 2012 12 12“ eingebe, wird das aktuelle Kalenderdatum angezeigt und wenn ich ein ungültiges Datum wie „1 2323232“ eingebe, bekomme ich einen Fehler. Wie kann ich das also in eine if-Schleife einfügen, die im Fehlerfall „Datum ist ungültig“ zurückgibt?
year=$(echo "$year" | bc)
month=$(echo "$month" | bc)
day=$(echo "$day" | bc)
cal $day $month $year
if [ $? -eq 0];
then
echo "Date is valid"
else
echo "Date in not valid"
fi
Antwort1
Das funktioniert nicht:
cal $day $month $year
cal
erwartet nur Monats- und Jahresargumente. Versuchen Sie:
cal $month $year
Wenn Sie eine Meldung drucken möchten, wenn Monat und Jahr ungültig sind, ist keine Schleife erforderlich. Der folgende Code zeigt einen Kalender an, wenn Monat und Jahr gültig sind, oder eine Fehlermeldung, wenn dies nicht der Fall ist:
cal $day $month $year 2>/dev/null || echo "Date is not valid."
Die folgende Anweisung ||
wird nur ausgeführt, wenn die vorhergehende Anweisung mit einem Rückgabecode ungleich Null endet (was bedeutet, dass ein Fehler aufgetreten ist).
Beiseite
Diese Zeilen scheinen nicht viel zu bewirken:
year=$(echo "$year" | bc)
month=$(echo "$month" | bc)
day=$(echo "$day" | bc)
Wenn die Variablen year
, month
, und day
, gültig sind, bewirken diese Zeilen nichts. Wenn es sich nicht um gültige Zahlen handelt, bc
wird ein nicht abgefangener Fehler ausgegeben.