我编写了一个备份日志脚本,并且在 echo 中有 2 个变量,但仍然不起作用。
我的命令:
echo " 数据库大小 $(du -hs /backup/db/db_$(date +%F).sql " >> /backup/backup.log
在我的 echo 语句中,我有命令变量,在命令变量中还有另一个变量。我需要更改什么。对于每一位帮助,我都心怀感激。
亲切的问候
黑胡子
答案1
echo 中有 2 个变量
事实上,你不需要。
变量被包裹在卷曲大括号:
NAME=Fred
echo ${NAME}"
你所拥有的命令调用“$(” 和 “)” 分隔符内的所有内容都作为单独的命令执行,并且该命令的输出作为调用的结果“返回”:
echo "$( pwd )"
我认为您的意图是根据当前日期创建文件路径,然后将该文件路径输入到 du 命令中。因此,一步一步:
您的文件路径是:
/backup/db/db_$(date +%F).sql
这个生成的值中不能有任何空格(%F 返回 YYYY-MM-DD),所以我们不必担心引用文件路径。
将其“插入”到 du 调用中:
du -hs /backup/db/db_$(date +%F).sql
最后,在“顶级” echo 命令中调用此命令:
echo "DB-Size $(du -hs /backup/db/db_$(date +%F).sql)" >> /backup/backup.log
注意括号的位置 - “$(” 表示调用开始,“)” 表示调用结束。您正在调用二命令,所以你需要二关闭 ')'。
还要注意,引号较少 - 一个用于开始字符串值,另一个用于结束字符串值。因为它们是双引号,所以 shell 将扩展其中的所有位,包括变量和命令调用 - 如果它们是单身的引号,它不会这样做,将整个内容视为字符串文字。
答案2
echo " 数据库大小 "$(du -hs /backup/db/db_"$(date +%F)".sql" " >> /backup/backup.log
为每个变量添加“$”解决了问题。