SH 文件未成功执行

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

相关内容