Я пишу это в своем сценарии. Там есть и другие части, но я застрял только на этой.
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
С этим связано немало проблем.
Вам нужен пробел после
[[
:[[ $# == $year $month $day ]]
$#
это не то, что вы думаете. Это количество аргументов, переданных скрипту или функции. Похоже, вы думаете, что это на самом деле список аргументов.==
сравнивает строки, вы даете ему список сортов. Чтобы сравнить список аргументов, переданных вашему скрипту, с$day
$month
$year
, вы бы сделали что-то вроде этого:[[ "$@" == "$day $month $year" ]]
. Мой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