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'. и это "не найдено", верно?

Другие вопросы по тегам