测试 -s 失败

测试 -s 失败

帮助,
我正在运行 Ubuntu 23.10 Server,并尝试编写一个脚本来备份我的服务器。脚本运行时,它应该创建一个存档,然后检查存档是否存在。相关代码是。

ROOTNAME="/mnt/backup/"\`date +"%Y%m%d"\`

SQLNAME=$ROOTNAME"mysql.sql"

mysqldump -h localhost -u root -pabcd123 --skip-tz-utc -A --add-drop-database --databases > "$SQLNAME" 2> /dev/null

if [ -s $SQLNAME ]
then
echo \`date "+%H:%M:%S~%d/$n/%Y"\` " SQL Dumped successfully" >> "$LOGNAME"
else
echo \`date "+%H:%M:%S~%d/$n/%Y"\` " ERROR: SQL Dump Not found exiting...." >> "$LOGNAME"
    exit 1
fi

mysqldump 语句生成的文件已成功创建。但是,该if [ test ]; then语句不起作用,语句的成功或失败分支均未得到遵循,并且我的日志文件中没有输出。我做错了什么?

答案1

运行脚本中的以下行 -

ROOTNAME="/mnt/backup/"\`date +"%Y%m%d"\` ; echo $ROOTNAME

结果是:

+%Y%m%d`: command not found

也许这是定义ROOTNAME变量的更好方法:

ROOTNAME="/mnt/backup/`date '+%Y%m%d'`"

跑步:

ROOTNAME="/mnt/backup/`date '+%Y%m%d'`" ; echo $ROOTNAME

结果是:

/mnt/backup/20231120

使用bash -x ./yourscriptorsh -x ./yourscript是诊断问题和调试 shell 脚本的非常有用的工具。使用选项调用 bash 或 sh shell-x会导致脚本中的每个 shell 命令在执行之前被打印,并显示脚本中每个命令的结果。

最佳做法是将变量括在引号中 -if [ -s "$SQLNAME" ]

此外,您应避免在变量名称中使用全大写字母,正如钢铁司机这条评论以下是您的问题。

感谢拉法鼓励我重新评估我原来的答案!

相关内容