PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ausgabe umleitung in einer IF Anweisung



Deehimself
07.07.2003, 09:10
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
07.07.2003, 10:40
hmm wieso verwendest du für das ne if schleife es würde doch auch ohne gehn einfach



/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
07.07.2003, 10:57
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
07.07.2003, 11:17
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
07.07.2003, 12:16
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

rup
07.07.2003, 12:20
Versuch mal folgendes:

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

Deehimself
07.07.2003, 12:49
Ja jetzt gehts.
Danke viel mal...

Was bedeutet dieses $( ) genau?

chb
07.07.2003, 12:58
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 ;)

Patrick123
22.09.2005, 09:53
das ist was ich geschrieben habe wo ist der fehler???????????????

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

Wolfgang
22.09.2005, 14:50
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
22.09.2005, 16:05
@ Wolfgang: Also wenn Deehimself das mittlerweile nicht selber rausbekommen hat, dann ist ihm nicht zu helfen ;)

Gruss, Phorus