SH файл не выполняется успешно
Я новичок в Linux. Попытка запустить sh файл, который соединяет сервер через FTP или VSFTPD и получить некоторые файлы. Вот мой сценарий
#!/bin/sh
HOST='IP_ADDR'
USER = 'user'
PASS = 'password'
FILE = 'path/filename.txt'
ftp -n $HOST <<END_SCROPT
quote USER $USER
quote PASS $PASS
get $FILE
quit
END_SCRipt
exit 0
Когда я пытаюсь запустить этот файл: sh file.sh
выдает ошибку:
file.sh: 3: file.sh: HOST: not found
file.sh: 4: file.sh: USER: not found
file.sh: 5: file.sh: PASS: not found
file.sh: 7: file.sh: FILE: not found
Not Connected.
Not Connected.
Not Connected.
1 ответ
Удалить пробелы между переменной и ее значением.
USER='user'
PASS='password'
FILE='path/filename.txt'
Назначение в скриптах bash не может иметь пробелов вокруг =
Для большего понимания =
также является оператором сравнения. посмотрите этот пример:
if [ "$a" = "$b" ]
Обратите внимание на пробелы, обрамляющие =
, В этом случае мы сравниваем "$a"
а также "$b"
,
if [ "$a"="$b" ] is not equivalent to the above.
Тестирование на примере:
kasiay@kasiyaPC~:$ a=2
kasiay@kasiyaPC~:$ b=3
Тогда мы бежим if [ "$a" = "$b" ]; then echo "equal"; else echo "not equal"; fi
результат будет "не равным", и это истинный результат.
Но если мы бежим if [ "$a"="$b" ]; then echo "equal"; else echo "not equal"; fi
результат будет "равным" и это неправильный результат!!
Почему в этом случае мы ошибаемся?
Когда мы используем if [ "$a"="$b" ]
парсинг как if [ A_TOKEN ]
, тогда в этом случае условие if всегда возвращает истинный результат. например:
if [ "$a"="$b" ]; then echo "TRUE"; fi
#result is TRUE
if [ 2=3 ]; then echo "TRUE"; fi
#result is TRUE
if [ anything ]; then echo "TRUE"; fi
#result is TRUE
И, наконец, когда вы используете USER = 'user'
(Я не знаю, какой раздел это проанализировать), тогда вы получаете "не найден". и почему "не найдено"?? так как анализатор ищет значение переменной USER для сравнения со значением 'user'. и это "не найдено", верно?