Вы установили chroot_local_user
на YES
, и на изображении FTP-сервер пытается открыть /var/www/....
-, это каталог локальных пользователей home
?
Вы присваиваете литеральную строку date +%H
переменной hour
.
Чтобы запустить эту команду date
и назначить ее вывод на hour
, используйте подстановку команд:
hour=$(date +%H)
В качестве альтернативы, с последним выпуском оболочки bash
(4.2+ ),
printf -v hour '%(%H)T' -1
сделает то же самое, вообще не используя date
.
Кроме того, вам нужно fi
пойти с этим if
и использовать&&
("и" )вместо||
("или" ), чтобы получить правильную логику:
if [ "$hour" -ge 12 ] && [ "$hour" -lt 19 ]; then
echo 'Good afternoon'
fi
Я использую стандартный тест [... ]
, а не собственный тест [[... ]]
оболочки bash
, чтобы избежать проблем с интерпретацией (значений $hour
в арифметическом контексте, представленном -ge
и -lt
проверяет )как недопустимые восьмеричные числа(08
и09
).
Если вы считаете, что вам нужно использовать [[... ]]
, вы можете протестировать ${hour#0}
вместо немодифицированного значения $hour
, чтобы избежать проблем. Значение ${hour#0}
будет таким же, как $hour
, но с удаленным одиночным ведущим 0
.
if [[ ${hour#0} -ge 12 && ${hour#0} -lt 19 ]]; then
echo 'Good afternoon'
fi
Bash также поддерживает синтаксис ((...))
для арифметических операций. Ваш код можно переписать как:
#!/bin/bash
declare -i hour=$(date +%k)
if (( hour > 12 && hour < 19 ))
then
printf "Good afternoon\n"
fi
Строка declare -i hour=$(date +%k)
указывает, что переменная hour
должна рассматриваться как арифметическое целое число, и присваивает ей текущий час (0 -23 )без нуля в начале.