帮助,
我正在运行 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 ./yourscript
orsh -x ./yourscript
是诊断问题和调试 shell 脚本的非常有用的工具。使用选项调用 bash 或 sh shell-x
会导致脚本中的每个 shell 命令在执行之前被打印,并显示脚本中每个命令的结果。
最佳做法是将变量括在引号中 -if [ -s "$SQLNAME" ]
此外,您应避免在变量名称中使用全大写字母,正如钢铁司机在这条评论以下是您的问题。
感谢拉法鼓励我重新评估我原来的答案!