Я являюсь новым в 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.
Удалите Пробелы между переменной и ее значением.
USER='user'
PASS='password'
FILE='path/filename.txt'
Присвоение в сценариях удара не может иметь пробелов вокруг =
Поскольку больше понимает =
также, сравнивают оператор. посмотрите этот пример:
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 [ "$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'
(Я не знаю, какой синтаксический анализ раздела это), затем Вы становитесь "не найденными". и Почему "не найден"?? начиная с синтаксического анализатора, ища значение Пользовательской переменной для сравнения 'пользовательскому' значению. и это "не найдено" право?