回显命令,需要替换

回显命令,需要替换

我编写了一个备份日志脚本,并且在 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

为每个变量添加“$”解决了问题。

相关内容