带有变量的命令在 Bash 脚本中不起作用

带有变量的命令在 Bash 脚本中不起作用

我正在编写一个快速脚本,用于将网页从远程服务器传输到本地计算机。问题是,我的本地文件夹出现“:没有这样的文件或目录”错误。但如果我不使用变量,而只是在脚本中输入命令,它就可以正常工作。即使我回显命令,然后在终端中运行它,它也可以正常工作。非常感谢任何想法!

这是脚本:

#!/bin/bash
WEBPAGE_NAME="wikiwebpageb"
USERNAME="banana"
IP="192.168.0.12"
PORT_NUMBER="4561"
WEB_BACKUP_DIR="~/backups/wiki_backups/webpage/"
LOCAL_WEB_BACKUP_DIR="~/backups/wiki_backups/webpage/"

LOGFILE=~/backups/backups.log

scp -P $PORT_NUMBER ${USERNAME}@${IP}:${WEB_BACKUP_DIR}1_${WEBPAGE_NAME}.tgz ${LOCAL_WEB_BACKUP_DIR}1_${WEBPAGE_NAME}.tgz 2>> $LOGFILE

答案1

由于波浪号扩展在引号内不起作用,因此这两行不会达到您所希望的效果:

WEB_BACKUP_DIR="~/backups/wiki_backups/webpage/"
LOCAL_WEB_BACKUP_DIR="~/backups/wiki_backups/webpage/"

要启用波浪符号扩展,请将其替换为:

WEB_BACKUP_DIR=~/"backups/wiki_backups/webpage/"
LOCAL_WEB_BACKUP_DIR=~/"backups/wiki_backups/webpage/"

但是,还有另一个问题:波浪号扩展发生在使用本地用户主目录的本地计算机上。如果远程用户有不同的名称和不同的主目录,则需要明确输入,可能类似于:

WEB_BACKUP_DIR="/home/${USERNAME}/backups/wiki_backups/webpage/"
LOCAL_WEB_BACKUP_DIR=~/"backups/wiki_backups/webpage/"

此外,变量名全部使用大写字母也是不好的做法。系统会使用全部大写字母作为变量名,您不会想意外覆盖一个。使用小写字母或大小写混合的名称是安全的。

相关内容