bash question about if e, em seguida, [duplicado]

1

Estou escrevendo isso no meu roteiro. Tem outras partes, mas estou ficando preso apenas nessa parte.

if [[$# == $year $month $day  ]] ; then
    cal $day $month $year
fi

Quando eu executo isso, me dê essa mensagem:

[[3: command not found

Então, qual é o problema? é uma sintaxe ou um comando real?

Aqui está o resto do meu script, se isso ajudar:

year=$(echo "$year" | bc)
month=$(echo "$month" | bc)
day=$(echo "$day" | bc)

if [[$# == $year $month $day  ]] ; then    
    cal $day $month $year
fi
    
por Hajir Golmohammadi 08.10.2014 / 03:01

2 respostas

2

Você precisa colocar um espaço depois dos colchetes, [[ .

if [[ $# == $year $month $day ]] ; then    
    cal $day $month $year
fi

Além disso, você escreveu que não funciona. Você compara $# e $year $month $day como uma string, ou algo totalmente diferente. Talvez:

if [[ "$#" == "$year$month$day" ]] ; then    
    cal $day $month $year
fi
    
por 08.10.2014 / 03:12
2

Existem alguns problemas com isso.

  1. Você precisa de um espaço depois do [[ :

    [[ $# == $year $month $day ]]
    
  2. $# não é o que você acha que é. É o número de argumentos passados para um script ou uma função. Parece que você acha que é, na verdade, a lista de argumentos.

  3. == compara strings, você está dando uma lista de tipos. Para comparar a lista de argumentos passados ao seu script com $day $month $year , você faria algo assim:

    [[ "$@" == "$day $month $year" ]]
    
  4. cal não funciona dessa maneira . Meu cal não funciona assim, mas aparentemente algumas versões mais novas fazem. Eu não tenho ideia do que você está realmente tentando fazer, mas não vai funcionar. Você está procurando por date -d "$day/$month/$year" ? Por exemplo

    $ date -d "08/10/2014"
    Sun Aug 10 00:00:00 CEST 2014
    

    Ou, se você quiser mostrar o calendário de um mês específico:

    $ cal 10 2014
        October 2014      
    Su Mo Tu We Th Fr Sa  
              1  2  3  4  
     5  6  7  8  9 10 11  
    12 13 14 15 16 17 18  
    19 20 21 22 23 24 25  
    26 27 28 29 30 31     
    
por 08.10.2014 / 14:11