pergunta bash sobre se e então

pergunta bash sobre se e então

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

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

Quando eu executo isso, me dá esta 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

Responder1

Você precisa colocar um espaço após os colchetes, [[.

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

Além disso, como você escreveu, isso não funcionará. Você compare $#e $year $month $daycomo uma string, ou algo totalmente diferente. Talvez:

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

Responder2

Existem alguns problemas com isso.

  1. Você precisa de um espaço após [[:

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

  3. ==compara strings, você está fornecendo 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. calnão funciona assim. O meu calnão funciona assim, masaparentementealgumas versões mais recentes sim. Não tenho ideia do que você está realmente tentando fazer, mas não funcionará. Você está procurando date -d "$day/$month/$year"? Por exemplo

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

    Ou, se 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     
    

informação relacionada