![带有变量的命令在 Bash 脚本中不起作用](https://linux22.com/image/1584197/%E5%B8%A6%E6%9C%89%E5%8F%98%E9%87%8F%E7%9A%84%E5%91%BD%E4%BB%A4%E5%9C%A8%20Bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我正在编写一个快速脚本,用于将网页从远程服务器传输到本地计算机。问题是,我的本地文件夹出现“:没有这样的文件或目录”错误。但如果我不使用变量,而只是在脚本中输入命令,它就可以正常工作。即使我回显命令,然后在终端中运行它,它也可以正常工作。非常感谢任何想法!
这是脚本:
#!/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/"
此外,变量名全部使用大写字母也是不好的做法。系统会使用全部大写字母作为变量名,您不会想意外覆盖一个。使用小写字母或大小写混合的名称是安全的。