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
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.
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
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?
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
@ Wolfgang: Also wenn Deehimself das mittlerweile nicht selber rausbekommen hat, dann ist ihm nicht zu helfen ;)
Gruss, Phorus
Powered by vBulletin® Version 4.2.0 Copyright ©2013 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.