Ich habe ein Programm, das mit dieser Zeile beginnt. Was bedeutet das? Ich habe wegen des Dollarzeichens Probleme beim Googeln.
Wie kommt $1 ohne Parameter? Und was bedeutet -d hier?
if [ -d $1 ]; then
Und kommt das Semikolon auch, wenn die if-Bedingung gar nicht beginnt? Ich dachte, das Semikolon kommt nur am Ende einer Anweisung oder am Ende einer Bedingung, wie
if () { };
Antwort1
Das Semikolon ist erforderlich, da ohne Angabe, wo dieser Kontext endet (durch ein Semikolon, eine neue Zeile usw.), if
nicht bekannt ist, wo die Bedingung endet und der Bedingungsblock beginnt. Vergleichen Sie:
$ if echo then foo then; then :; fi
then foo then
$ if echo then; then :; fi
then
-d
ist ein Test, um zu prüfen, ob das nächste Argument ein Verzeichnis ist. Von help test
(weil test
es gleichwertig ist mit [
):
-d FILE True if file is a directory.
Zum Beispiel:
$ mkdir foo
$ if [ -d foo ]; then
> echo foo is a dir
> fi
foo is a dir
$1
ist das erste Argument, das an Ihr Programm übergeben wird. Beispiel:
$ cat > script << 'EOF'
> #!/bin/sh
> echo "$1"
> EOF
$ chmod +x script
$ ./script foo
foo
Nebenbei bemerkt sollten Sie $1
hier zitieren, weil es sich sonst auf mehrere Argumente ausweiten kann, was zu einem Syntaxfehler führt [
:
$ dir="foo bar"
$ [ -d $dir ]
sh: 2: [: foo: unexpected operator
$ [ -d "$dir" ]
$