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

标签 linux shell ubuntu-14.04

我有一个 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 不知道如何比较 $dbmyDBase 第 20 行。

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

关于linux - 用于制作数据库备份的 Shell 脚本只能在提示符下运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39210254/

相关文章:

linux - Perl 脚本将换行符添加到文本文件末尾

linux - 在进程退出时自动清理 PF_UNIX 套接字?

linux - Bash 脚本 FS 使用

ubuntu-14.04 - Ubuntu 14.04 打开包列表时出错

c++ - pthread - 如何在不调用 join 的情况下开始运行新线程?

linux - 出于特殊目的监视Linux中的文件,使用声音或内网中的其他有效方法

regex - sed 命令 : regex in bash to exclude certain strings

linux - 在 shell 和 tcsh 之间的脚本中更改 shell

c - mq_receive 消息太长

c++ - 以非 root 用户身份运行 ntpdate