将目录存储在变量中后 shell 脚本出现问题

将目录存储在变量中后 shell 脚本出现问题

FTP 正在连接到服务器,但出现错误 -

Enter if the env is dev or test or prod:
test
Please enter the id no :
xxxxxxx
Connected to xxxx
220 (vsFTPd 2.2.2)
331 Please specify the password.
230 Login successful.
**?Invalid command
?Invalid command
?Invalid command
?Invalid command
?Invalid command**
200 PORT command successful. Consider using PASV.

下面是 shell 脚本 -

#!/bin/bash
echo "Enter if the env is dev or test or prod:"
while :
do
read -r INPUT_STRING
case $INPUT_STRING in
    test | TEST)
        echo "Please enter id no : "
        read -r input_variable
        if [[ ${#input_variable} -ne "7" ]]
        then
            echo "Please check id no given"
            exit 1
        fi
        HOST=XXX
        USER=XXX
        PASSWORD=XX
        ftp -inv $HOST <<- EOF
                user $USER $PASSWORD
                mypath='/test/$input_variable/destination/'
                if ! cd "$mypath"
                then
                    exit 1
                fi
                mput x.csv
EOF
                exit 1
    ;;
esac
done

答案1

您的主要问题是您认为您正在使用线路设置变量mypath='/test/$input_variable/destination/',但它实际上是在 FTP 会话内运行。

您需要将其移至 FTP 命令上方。您还可以检查其后的条件,因为同样的原因无法在那里检查。

答案2

你的问题是你正在尝试设置一个变量里面这里的文档:

ftp -inv $HOST <<- EOF
    user $USER $PASSWORD
    mypath='/test/$input_variable/destination/'
    if ! cd "$mypath"
    then
        exit 1
    fi
    mput x.csv
EOF

那不行。将该部分更改为:

mypath="/test/$input_variable/destination/"
ftp -inv $HOST <<-_EOF_
    user $USER $PASSWORD
    cd "$mypath"
    mput x.csv
_EOF_

答案3

将单引号更改为双引号。

代替:

mypath='/test/$input_variable/destination/'

使用:

mypath="/test/$input_variable/destination/"

相关内容