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), if
nã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 $1
aqui, 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" ]
$