
Ich habe ein Skript, das in der SH-Shell läuft, dieses Skript läuft einwandfrei. Aber ich habe ein Skript hinzugefügt, das in der KSH-Shell geschrieben ist (im Kopf des Skripts steht #!/bin/ksh), aber jedes Mal bekomme ich den Fehler
./monitor_FMn2.sh[19]: 104: not found
Welche jedes Mal die zweite Zeile ändern, die den Fehler traf Die 19. Zeile ist die Zeile, in der ich das KSH-Skript aufrufe
if `wc -l < $LOGFILE` > 55;
then
logcycle $LOGFILE
fi
Protokollzyklusist das KSH-Skript.
Antwort1
`wc -l < $LOGFILE` > 55
Führt den Befehl aus, dessen Name die Ausgabe von „ wc
subject to split+glob“ ist (in Ihrem Fall 104) und leitet seine Ausgabe in eine Datei namens 55
im aktuellen Verzeichnis um. Da auf Ihrem System kein Befehl namens 104 vorhanden ist, erhalten Sie diesen Fehler.
Vermutlich wollten Sie schreiben:
if [ "$(($(wc -l < "$LOGFILE") +0))" -gt 55 ]; then...
Das heißt, führen Sie den Befehl [
aka test
(anstelle von 104
) aus, um zu testen, ob die Ausgabe von , wc -l
interpretiert als arithmetischer Ausdruck (und [
beschwert sich daher nicht über führende Leerzeichen, falls vorhanden), größer als 55 ist.
Oder mit KSH-Syntax:
if (($(wc -l < "$LOGFILE") +0 > 55)); then...
( +0
um den Fall abzudecken, dass der wc -l < "$LOGFILE"
Befehl keine Ausgabe erzeugt, etwa wenn die Seite $LOGFILE
nicht zum Lesen geöffnet werden kann).
(Möglicherweise möchten Sie auch die leere 55
Datei entfernen, die zuvor von Ihrem Skript erstellt wurde).