Wie, am besten lösen?

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von flix, 24.07.2009.

  1. flix

    flix Jungspund

    Dabei seit:
    20.07.2009
    Beiträge:
    19
    Zustimmungen:
    0
    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?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bytepool, 24.07.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    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
     
  4. zst

    zst Foren As

    Dabei seit:
    06.09.2006
    Beiträge:
    95
    Zustimmungen:
    0
    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
    
     
  5. #4 floyd62, 24.07.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    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.
     
  6. flix

    flix Jungspund

    Dabei seit:
    20.07.2009
    Beiträge:
    19
    Zustimmungen:
    0
    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.
     
  7. #6 floyd62, 30.07.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    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.
     
  8. #7 bytepool, 30.07.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    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
     
  9. flix

    flix Jungspund

    Dabei seit:
    20.07.2009
    Beiträge:
    19
    Zustimmungen:
    0
    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
     
  10. daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    Guggst du Post #5, die Variablen gibt's alle ;)
     
  11. flix

    flix Jungspund

    Dabei seit:
    20.07.2009
    Beiträge:
    19
    Zustimmungen:
    0
    daboss: er soll ja überprüfen, ob es die gibt und wenn nicht einen fehler ausspucken ;)
     
  12. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  13. #11 floyd62, 30.07.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    @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 ...
     
  14. daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    Ah sry, hab nur quer überflogen.
     
Thema:

Wie, am besten lösen?

Die Seite wird geladen...

Wie, am besten lösen? - Ähnliche Themen

  1. Welcher WM, welche Distro eignen sich am besten für eine Bedienung ohne Maus?

    Welcher WM, welche Distro eignen sich am besten für eine Bedienung ohne Maus?: 1.Ich hätte gern ein Linux, dass man weitgehend ohne Maus bedienen kann. Auf Desktops Enviroments wie Gnom oder KDE, überhaupt auf zuviel GUI...
  2. Wie am Besten 2 TB externe HD partitionieren und formatieren?

    Wie am Besten 2 TB externe HD partitionieren und formatieren?: Hallo, mich würde interessieren wie ihr eine 2 TB große externe Festplatte Partitionieren und formatieren würdet. Die HD ist über USB2.0...
  3. Welche Software realisiert das Vorhaben am besten?

    Welche Software realisiert das Vorhaben am besten?: Hallo zusammen, vielleicht könnt ihr mir ein bisschen weiterhelfen, folgendes zu realisieren bzw. mögliche Softwarepakete nennen... Also an...
  4. Infoseite über die besten deutschen Prämiensysteme

    Infoseite über die besten deutschen Prämiensysteme: Hi, hab mal eine Infoseite über die besten deutschen Prämeinesysteme Rewardmix und Mixedfreebies gemacht. www.wieso-zahlen.de Viel Spaß...
  5. Wie setze ich das am besten um?

    Wie setze ich das am besten um?: Mein Ziel ist es, eine Oberfläche (am besten gtk) zu haben, in der ich bestimmte Daten von iwconfig, ifconfig, etc... auslesen kann und diese...