Вот почему вы видите эту ошибку:
$a = /is115/idm/dsproj/scripts/l.txt
В этом месте кода переменная a
не установлена. ksh заменит переменную пустой строкой, что приведет к:
= /is115/idm/dsproj/scripts/l.txt
Затем ksh пытается выполнить строку, пытается найти команду =
, не находит ее и выдает первую ошибку, которую вы видите.
Как указывает @Thomas, синтаксис присваивания переменной следующий:
varname=value
без $
слева -и без пробелов вокруг =
.https://www.shellcheck.net/укажет на эти ошибки.
Тогда у вас есть
if [ $a -gt 0 ];
Поскольку a
не имеет значения, ksh выполняет подстановку и пытается выполнить
if [ -gt 0 ];
Команда [
(да, это команда, псевдоним команды test
)не понимает оператор ‑gt
без левого -операнда, и вы получаете 2-й сообщение об ошибке.
Команда [
завершается со статусом, отличным от -нулевым, оператор if
затем выполняет блок else
, и вы получаете сообщение «все хорошо».
Вот почему важно заключать все переменные в одинарные скобки.[... ]
if [ "$a" -gt 0 ];
В более общем случае всегда заключайте переменные в кавычки, если только вы не понимаете, когда конкретно следует опускать кавычки. См. также Последствия для безопасности, если забыли заключить переменную в кавычки в оболочках bash/POSIX
.
В консоли вы можете использовать Alt xyz (xyz это число на цифровой клавиатуре ).
Например, Alt233 должно отображать é
.
Существует много источников списка кодов, например вот этот .
Я не знаю, сработает ли это, потому что в зависимости от локали фактические символы пароля могут быть, например, UTF -8.