Probleme mit dem Bash-Skript, um einen numerischen Wert richtig zu teilen

327
Stepman72

Das folgende Skript soll mir einen laufenden Countdown geben, bis das Passwort für den Testbenutzer abgelaufen ist. Diesen Befehl füge ich dann in einen Befehl ein, der eine E-Mail an einen festzulegenden Schwellenwert sendet und eine Anweisung schreibt /var/log/messages. Das Problem ist, dass die $iVariable nicht durch die 86400-Zahl geteilt werden kann. Das soll die Sekunden zurück in Tage verwandeln. Vielen Dank im Voraus für Ihre Hilfe.

#!/bin/bash  for i in { $(( ( $(date +%s --date "`chage -l testuser |  grep "Password expires" |  cut -d " " -f3,4,5`") \ ) - $(date +%s) )) } ; do [ expr $i \ 86400 ] done  exit 0 
-1
Der `do`-Teil der Schleife kann unmöglich funktionieren, da` [expr $ i \ 86400] `als` test expr $ i \ 86400` interpretiert werden würde, was einen * "zu viele Argumente" * - Fehler zurückgeben würde. agc vor 6 Jahren 0

1 Antwort auf die Frage

-1
JakeGould

Die mathematische Logik Ihres Codes durch 86400 ist die folgende:

[ expr $i \ 86400 ] 

Das \ist ein Backslash und kein Divisionssymbol, das der Schrägstrich ( /) ist. Ändern Sie es einfach so und Sie sollten gut sein:

[ expr $i / 86400 ]