我有一个 shell 脚本,在命令提示符下运行良好,但在我的 cron 作业中它抛出 unexpected operator
BACKUP=/var/www/backups/mysql
NOW=$(date +"%Y%m%d-%H%M")
MUSER="root"
MPASS="secr3T"
MHOST="localhost"
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"
find $BACKUP/* -mtime +15 -exec rm {} \;
DBS="$($MYSQL -h $MHOST -u $MUSER -p$MPASS -Bse 'show databases')"
for db in $DBS
do
if [ "$db" == "myDBase" ]; then
if [ "$db" != "performance_schema" ]; then
FILE=$BACKUP/mysql_backup_$db.$NOW.tar.gz
$MYSQLDUMP -h $MHOST -u $MUSER -p$MPASS $db | $GZIP -9 > $FILE
echo $db
fi
fi
done
我正在使用 crontab 20 0 * * * var/www/backups/backup.site.sh 访问脚本
我得到的错误是:
/var/www/backups/backup.mysql.sh: 20: [: information_schema: unexpected operator
/var/www/backups/backup.mysql.sh: 20: [: mysql: unexpected operator
/var/www/backups/backup.mysql.sh: 20: [: olb: unexpected operator
/var/www/backups/backup.mysql.sh: 20: [: performance_schema: unexpected operator
我在 Ubuntu 14.04 上运行最新版本的 mySQL。有人知道为什么吗?
最佳答案
如果不指定您的 shell,您将默认获得/bin/sh(已在 Ubuntu 14.04 上测试)。 sh 内置的 [
不支持 ==
运算符,所以 sh 不知道如何比较 $db
和 myDBase
第 20 行。
您应该始终以“#!”开始您的脚本。行来指定一个 shell 。要获得 bash,第一行应该是 #!/bin/bash
。
关于linux - 用于制作数据库备份的 Shell 脚本只能在提示符下运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39210254/