我是 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 条件总是返回 true 结果。例如:
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 变量的值来与“用户”值进行比较。它是“未找到“ 正确的?