ubuntuusers.de

Überprüfen ob kommandos Verzeichnisse sind

Status: Ungelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

cold28

Anmeldungsdatum:
2. Dezember 2018

Beiträge: Zähle...

Hi,

wie kann ich überprüfen ob die eingelesenen argumente als verzeichnis existieren? Mit einem argument nach der anweisung klappt es. Aber wie sieht das mit mehreren aus?

mit einem argument

1
2
3
4
5
6
7
8
9
for i in $*
     do
          if [ -d $* ]
          then
               echo "Ja ist vorhanden"
          else
               echo "leider nein"
          fi
     done

wenn ich jetzt in der konsole

1
bash test ordner

eingebe, bekomme ich jenachdem ob das Verzeichnis existiert entweder ein ja oder nein.

Nur wie ist das mit mehreren Argumenten hinter dem skipt test?

also z.B.

1
bash test ordner andererordner 

hier kommt immer ein fehler

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14347

cold28 schrieb:

Nur wie ist das mit mehreren Argumenten hinter dem skipt test?

BTW: test ist kein guter Name für ein Script. Siehe z. B.:

which test
file $(which test)

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13209

cold28 schrieb:

wie kann ich überprüfen ob die eingelesenen argumente als verzeichnis existieren? Mit einem argument nach der anweisung klappt es. Aber wie sieht das mit mehreren aus?

Nur wie ist das mit mehreren Argumenten hinter dem skipt test?

also z.B.

1
bash test ordner andererordner 

hier kommt immer ein fehler

Ist nur ein kleiner Fehler: Du nutzte eine Schleife, aber die Schleifenvariable nicht innerhalb der Schleife. So geht's:

1
2
3
4
5
6
7
8
9
for i
     do
          if [ -d "$i" ]
          then
               echo "Ja ist vorhanden"
          else
               echo "leider nein"
          fi
     done

Macht aber nicht so viel Sinn, weil Du nicht ausgibst, welcher Ordner jeweils gemeint ist.

lubux schrieb:

BTW: test ist kein guter Name für ein Script.

... weil schon vergeben.

Siehe z. B.:

which test
file $(which test)

which sollte man nicht verwenden, denn es ist kein Shell-Builtin:

1
2
3
$ type -a which
which is /usr/bin/which
which is /bin/which

Dementsprechend gibt es keine Shell-Funktionen und Aliase aus, die aber in der Suchreihenfolge vor jedem Binary oder Skript kommen. Die Ausgabe wird damit irreführend.

Die moderne Form ist type:

1
2
type -a test
file $(type -ap test)
Antworten |