Ausgabe umleitung in einer IF Anweisung

D

Deehimself

Jungspund
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
 
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 ..
 
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.
 
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 .. ?
 
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" **********;

else
cat $LOG_PATH/ntpdate_status | mailx -s "$SRV_NAME: datum- & zeit-check --failed" **********;
fi
#
#
rm "$LOG_PATH"/ntpdate_status
#
#
# EnD oF ScRiPt
 
Zuletzt bearbeitet:
Versuch mal folgendes:

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

Was bedeutet dieses $( ) genau?
 
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 ;)
 
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
;(
 
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
 
@ 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

Zurück
Oben