Wie, am besten lösen?

F

flix

Jungspund
Hi,

ich möchte am Start prüfen, ob alle Variablen gesetzt sind und auch ausführbar sind (binaries).

Code:
if [ -z $AWK ] || [ -z $DIRNAME ] || [ -z $GREP ] || [ -z $NSTAT ] || [ -z $SED ] || [ -z $WC ]
	then
		echo "xy doesnt exists"
		exit 1
	elif [ ! -x $AWK ] || [ ! -x $DIRNAME ] || [ ! -x $GREP ] || [ ! -x $NSTAT ] || [ ! -x $SED ] || [ ! -x $WC ]
	then
		echo "xy either doesn't exist or not executable"
		exit 1
fi

gibt es irgend eine Variable für xy, wo dann ausgegeben wird, welche Variable genau betroffen ist oder muss ich dafür alles in eine eigene if schleife packen?
 
Hi,

du koenntest die Variablen die tu testen willst in einen Array schreiben, und dann in einer Schleife ueber den Array iterieren und die Tests durchfuehren.

Die Schleife wird dann abgebrochen sobald ein Test die Kriterien nicht erfuellt, und dann kannst du den letzten Index benutzen, um dahinter zu kommen bei welcher Variable abgebrochen wurde.

mfg,
bytepool
 
Hallo flix,
außer der guten Array-Lösung geht es ganz simpel auch so:
Eine Variable anlegen, die alle Programm-Namen enthält und dann per Schleife prüfen.

Gruss zst

Code:
PROGS1="abc1 prog2 proggi3"

for p in $PROGS1
do
  if [ ! -x /irgendwo/progverzeichnis/$p ]
      then
      echo -e "\nDas Programm $p fehlt - Abbruch!!!\n"
      exit 1
  fi
done
 
Noch 'ne Idee:
Code:
PROGS="AWK GREP DIRNAME NSTAT SED WC"

for PROG in $PROGS; do
        eval [ -x \${$PROG\?} ] || { eval echo "\\$\$PROG \(\$$PROG\) is not executable"; exit 1; }
done
... sollte, falls eine Variable nicht gesetzt ist, etwas wie "XXX is null or not set", und wenn das Ding nicht ausführbar ist, halt die Meldung "XXX (...) is not executable" (mit dem aktuellen Wert der Variablen) bringen.

;-)

A.
 
Hi,

du koenntest die Variablen die tu testen willst in einen Array schreiben, und dann in einer Schleife ueber den Array iterieren und die Tests durchfuehren.

Die Schleife wird dann abgebrochen sobald ein Test die Kriterien nicht erfuellt, und dann kannst du den letzten Index benutzen, um dahinter zu kommen bei welcher Variable abgebrochen wurde.

mfg,
bytepool

Hallo,

ich habe die array methode gerade versucht allerdings stoße ich dort auf ein Problem.

es sieht folgend aus:

Code:
AWK=/usr/bin/awk
DIRNAME=/usr/bin/dirname
GREP=/bin/grep
NSTAT=/bin/netstat
SED=/bin/sed
WC=/usr/bin/wc

bins=( AWK DIRNAME GREP NSTAT SED WC )

for bin in ${bins[*]}
do
        if [ -z $bin ]
        then
                echo "$bin doesnt exists"
                exit 1
        elif [ ! -x \${$bin} ]
        then
                echo "$bin either doesn't exist or not executable"
                exit 1
        fi
done

an der elif stelle soll er aber nicht z.b. AWK nehmen, sondern dass, was in der Variable AWK gespeichert ist. Hab da wie Ihr seht schon wie wild rum probiert komme aber nicht auf die Lösung.
 
Hi,

'eval' ist den Freund: mach aus der Zeile
Code:
echo "$bin either doesn't exist or not executable"
einfach
Code:
eval echo "\$$bin either doesn\'t exist or is not executable"
und ...
Code:
$ bash chk
/usr/bin/awk either doesn't exist or is not executable
$

Gruss, A.
 
Hi,

fuer eval muesste dann der Rest vom Skript aber auch noch angepasst werden. Das geht natuerlich, erscheint mir aber ehrlich gesagt unnoetig umstaendlich.

Du musst einfach bins korrekt initialisieren:
Code:
bins=( $AWK $DIRNAME $GREP $NSTAT $SED $WC )

mfg,
bytepool
 
Hi,

fuer eval muesste dann der Rest vom Skript aber auch noch angepasst werden. Das geht natuerlich, erscheint mir aber ehrlich gesagt unnoetig umstaendlich.

Du musst einfach bins korrekt initialisieren:
Code:
bins=( $AWK $DIRNAME $GREP $NSTAT $SED $WC )

mfg,
bytepool

dann besteht aber das problem, fals es die Variable Awk nicht gibt, er die gar nicht in die schleife übergibt. er fängt dann einfach mit dirname an... habs eben ausprobiert
 
daboss: er soll ja überprüfen, ob es die gibt und wenn nicht einen fehler ausspucken ;)
 
@bytepool:

denke, die nötigen Änderungen dürften sich im Wesentlichen darauf beschränken, im o.a. Skript auch noch die Prüfung, ob ein Proggie ausführbar ist, von
Code:
      elif [ ! -x \${$bin} ]
auf
Code:
      elif eval [ ! -x \${$bin} ]
abzuändern; im Rest vom Skript kann man dann ja weiterhin einfach $GREP, $AWK etc. ohne eval verwenden ... und _so_ umständlich scheint mir das gar nicht zu sein ;-)

Greets ...
 

Ähnliche Themen

Sed: Bestimmtes Feld einer "Zeile mit mehreren Feldern" ergänzen

Script zu bearbeiten einer conf Datei

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Queue für copy Script

Shellskript - Fehler in Cron

Zurück
Oben