Ausgabe umleitung in einer IF Anweisung

Deehimself

Jungspund
Beiträge
20
Hallo zusammen

Ich hab mir mal en kleines Script für die Zeitsynchronisation gebastelt. Jetzt habe ich ein Problem:

...
if [ "/usr/sbin/ntpdate" ntps1.gwdg.de >$LOG_PATH/ntpdate_status 2>&1" ] && [ "/sbin/hwclock --systohc" ];
...


Wenn ich den Befehl in der Shell ausführe:

"/usr/sbin/ntpdate" ntps1.gwdg.de >$LOG_PATH/ntpdate_status 2>&1"

Steht dann im $LOG_PATH/ntpdate_status:
7 Jul 09:53:30 ntpdate[8580]: adjust time server 134.76.10.46 offset 0.001105 sec


Nach dem Ausführen des Scriptes sieht das File so aus:

./timesync: line 47: [: /usr/sbin/ntpdate: unary operator expected


Wie kann ich es machen das ich auch im Script danach die Meldung im File habe wie wenn ich es von hand ausführe?

Gruss Dee
 

chb

Steirer
Beiträge
2.359
hmm wieso verwendest du für das ne if schleife es würde doch auch ohne gehn einfach

Code:
/usr/sbin/ntpdate ntps1.gwdg.de >$LOG_PATH/ntpdate_status 2>&1 && sbin/hwclock --systohc

mir ist net klar was du da mit if abfragen mußt ..

btw mit ntpdate -s kannst du die meldung die du willst auch nur ins syslog schreiben lassen falls du das willst ..
 

Deehimself

Jungspund
Beiträge
20
Ich brauche die if anweisungen da ich zwei verschiedene Mails generiere (erfolgreich bez. fehlgeschlagen) und an die mail hänge ich dan die datei mit der meldung an.

Ich denke es ist nur etwas kleines, da der Fehler darin besteht das es irgendwie von der shell falsch interpretiert wird.... weil es ja ausserhalb des scriptes funktioniert.
 

chb

Steirer
Beiträge
2.359
verstehe ..

najo wegen der if schleife kann ich dir net viel weiterheflen bis auf ein " zuviel oder zuwenig kann ich nix erkennen .. btw machst du daraus ein cron script .. ?
 

Deehimself

Jungspund
Beiträge
20
Ja es wird ein cronjob.

Hier mal das ganze script:


#!/bin/bash
#
############################################
# Autor: Deehimself
# Name: timesync
# Date: 4.7.03
# Last update: 4.7.03
# Ver.: 1.1
# Status: still testing
# Fuktion: It makes a time/datum synchro and sends a mail to the news group with the result
############################################
#
# Variabl(en) definieren
LOG_PATH="/tmp"
#
#
# Funktion(en) definieren
help ()
{
cat <<HELP
##################################
# This is a time/datum synchro script #
#-------------------------------------------------------- #
# You must give me the Servername as Parameter #
# USAGE: timesync -sn <servername> #
# or: timesync -h to display this Help #
##################################
HELP
exit 0
}
#
#
if [ -n "$1" ] && [ -n "$2" ]; then
case $1 in
-h) help;;
-sn) SRV_NAME=$2;shift 2;;
--) shift;brak;;
-*) echo "Error: No such option $1 type -h for help";exit 2;;
*) echo "Error: No such option $1 type -h for help";exit 2;;
esac
else
help
fi
#
#
# Das Hauptprogramm
if [ "'/usr/sbin/ntpdate' ntps1.gwdg.de >$LOG_PATH/ntpdate_status 2>&1" ] && [ "/sbin/hwclock --systohc" ];
then
cat $LOG_PATH/ntpdate_status | mailx -s "$SRV_NAME: datum- & zeit-check --succeeded" xxx@xxx.com;

else
cat $LOG_PATH/ntpdate_status | mailx -s "$SRV_NAME: datum- & zeit-check --failed" xxx@xxx.com;
fi
#
#
rm "$LOG_PATH"/ntpdate_status
#
#
# EnD oF ScRiPt
 
Zuletzt bearbeitet:

rup

Haudegen
Beiträge
627
Versuch mal folgendes:

if [ $(/usr/sbin/ntpdate ntps1.gwdg.de >$LOG_PATH/ntpdate_status 2>&1) ] && [ "/sbin/hwclock --systohc" ];
 

chb

Steirer
Beiträge
2.359
damit führt er ein programm aus wie in der console sozusagen und gibt dann den
wert ins script zb zurück also

echo $(ls) -> gibt die ausgabe von ls auf dem schirm mittels echo aus ;)
 
P

Patrick123

Gast
ich habe was falsch und brauche hielfe

das ist was ich geschrieben habe wo ist der fehler???????????????

( "$1" != "a" && "$1" != "b" )
bitte sagt es mir
;(
 

Wolfgang

Foren Gott
Beiträge
3.978
Patrick123 schrieb:
das ist was ich geschrieben habe wo ist der fehler???????????????

( "$1" != "a" && "$1" != "b" )
bitte sagt es mir
;(
Was soll das sein?
Was erwartest du damit?
Falls du ein Test durchführen willst, solltest du das auch tun-
Also
man bash-buildins

if [ "$1" != "a" -a "$1" != "b" ]; then ...


@Deehimself

Du musst in solch einem Fall den Rückgabewert auswerten, $?.
Das Programm test (if) erwartet einen Vergleich. Wenn du deinen Befehl in eine Variable steckst, bekommst du diesen bei fast allen zurück.
Deshalb ging es im ersten Fall nicht.
Im Zweifelsfall nachsehen, was die Funktion/Programm zurückliefert.

Gruß Wolfgang
 

Xanti

Mouse Organist
Beiträge
1.855
@ Wolfgang: Also wenn Deehimself das mittlerweile nicht selber rausbekommen hat, dann ist ihm nicht zu helfen ;)

Gruss, Phorus
 

Ähnliche Themen

Crontab und Scripts - Problem

Shellskript - Fehler in Cron

Samba 4 Gast Zugang unter Ubuntu funktioniert nicht

NagiosGrapher 1.7.1 funktioniert nicht

awk skript: Probleme mit if und else Anweisungen

Oben