вопрос bash о том, если и тогда

вопрос bash о том, если и тогда

Я пишу это в своем сценарии. Там есть и другие части, но я застрял только на этой.

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

Когда я запускаю это, он выдает мне следующее сообщение:

[[3: command not found

Так в чем же проблема? Это синтаксис или реальная команда?

Если вам это поможет, вот остальная часть моего сценария:

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

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

решение1

После квадратных скобок необходимо поставить пробел [[.

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

Также, как вы написали, это не сработает. У вас есть сравнение $#и $year $month $dayкак строка, или что-то совсем другое. Возможно:

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

решение2

С этим связано немало проблем.

  1. Вам нужен пробел после [[:

    [[ $# == $year $month $day ]]
    
  2. $#это не то, что вы думаете. Это количество аргументов, переданных скрипту или функции. Похоже, вы думаете, что это на самом деле список аргументов.

  3. ==сравнивает строки, вы даете ему список сортов. Чтобы сравнить список аргументов, переданных вашему скрипту, с $day $month $year, вы бы сделали что-то вроде этого:

    [[ "$@" == "$day $month $year" ]]
    
  4. calтак не работает. Мойcal так не работает, новидимонекоторые более новые версии делают это. Я понятия не имею, что вы на самом деле пытаетесь сделать, но это не сработает. Возможно, вы ищете date -d "$day/$month/$year"? Например

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

    Или, если вы хотите показать календарь определенного месяца:

    $ 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     
    

Связанный контент