$ 1 significa para .... ? sem nenhuma entrada?

$ 1 significa para .... ? sem nenhuma entrada?

Eu tenho um programa que começa com esta linha. O que isto significa? Estou tendo problemas para pesquisar no Google por causa do cifrão.

Como é que $1 sem nenhum parâmetro? E o que significa -d aqui?

  if [ -d $1 ]; then

E o ponto e vírgula aparece mesmo que a condição if nem sequer comece? Achei que o ponto e vírgula vinha apenas no final da instrução ou no final da condição, como

   if () {  };

Responder1

O ponto e vírgula é obrigatório, pois sem a indicação de onde termina aquele contexto (através de ponto e vírgula, nova linha, etc), ifnão é possível saber onde termina a condição e começa o bloco condicional. Comparar:

$ if echo then foo then; then :; fi
then foo then
$ if echo then; then :; fi
then

-dé um teste para verificar se o próximo argumento é um diretório. De help test(porque testé equivalente a [):

-d FILE        True if file is a directory.

Por exemplo:

$ mkdir foo
$ if [ -d foo ]; then
>     echo foo is a dir
> fi
foo is a dir

$1é o primeiro argumento passado para o seu programa. Por exemplo:

$ cat > script << 'EOF'
> #!/bin/sh  
> echo "$1"
> EOF
$ chmod +x script
$ ./script foo
foo

Como aparte, você deve citar $1aqui, caso contrário ele pode se expandir em vários argumentos, resultando em um erro de sintaxe de [:

$ dir="foo bar"
$ [ -d $dir ]
sh: 2: [: foo: unexpected operator
$ [ -d "$dir" ]
$ 

informação relacionada