Shell 用于制作数据库备份的脚本只能在提示符下运行

Shell script for making database backups works only from prompt

我有一个 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

我是 运行 mySQL 的最新版本 Ubuntu 14.04。有人知道为什么吗?

如果不指定您的 shell,您将默认获得 /bin/sh(在 Ubuntu 14.04 上测试)。 sh 内置的 [ 不支持 == 运算符,因此 sh 不知道如何在第 20 行比较 $dbmyDBase

您应该始终以“#!”开始您的脚本。行以指定 shell。要得到 bash,第一行应该是 #!/bin/bash.