Мне нужна помощь для очень простого сценария, я не понимаю, в чем причина. Сценарий:
#!/bin/bash
declare -i s
declare -i m
declare -i h
if [ "$3" < 50 ]; then s=$3+10 m=$2 h=$1
else if ["$2" < 50 ];
then s=$3-50 m=$2+1 h=$1
else s=$1-50 m=$2-50 h=$1+1 fi
fi
echo "$h:$m:$s"
Сценарий добавляет 10sc к времени, которое мы ввели.
Я получаю это сообщение об ошибке: «sub_change_dirrect: строка 14: синтаксическая ошибка: неожиданный конец файла»
Вы забыли ;
после вложенного оператора fi
#!/bin/bash
declare -i s
declare -i m
declare -i h
if [ "$3" < 50 ]; then s=$3+10 m=$2 h=$1
else if ["$2" < 50 ];
then s=$3-50 m=$2+1 h=$1
else s=$1-50 m=$2-50 h=$1+1 ;fi
fi
echo "$h:$m:$s"
. Есть три очевидные ошибки:
else s=$1-50 m=$2-50 h=$1+1 fi
слово fi
не рассматривается как ключевое слово, поскольку оно не является первым словом в команде. Для оболочки это выглядит как три назначения, которые применяются к команде fi
. Если вы когда-нибудь выполните эту строку, вы увидите ошибку bash: fi: command not found
. Поместите fi
на отдельной строке (или поставьте перед собой ;
). [ "$3" < 50 ]
совпадает с [ "$3" ] < 50
- это команда [ … ]
(которую также можно записать test
) с единственным аргументом "$3"
и с перенаправлением ввода из файла 50
. Либо используйте оператор сравнения чисел -lt
, либо используйте арифметическую инструкцию (( … ))
. Конструкция с одной скобкой - это обычная встроенная команда, поэтому специальные символы, такие как <
, сохраняют свое обычное значение. Конструкция с двойными круглыми скобками имеет специальный синтаксис, и вы можете использовать <
как оператор сравнения чисел внутри. ["$2" < 50 ]
отсутствует пробел после открывающей скобки. Также обычное соглашение в скриптах оболочки - ставить новую строку после then
и else
. Кроме того, вместо блока else
, который полностью состоит из оператора if
, вы должны использовать elif
. И, пожалуйста, сделайте отступ последовательно.
#!/bin/bash
declare -i s
declare -i m
declare -i h
if (( $3 < 50 )); then
s=$3+10 m=$2 h=$1
elif (( $2 < 50 )); then
s=$3-50 m=$2+1 h=$1
else
s=$1-50 m=$2-50 h=$1+1
fi
echo "$h:$m:$s"
П.С. Я не пересмотрел вашу логику. Вы, кажется, ищете date +%T -d 'now + 10 seconds'
.