首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于进行数据库备份的Shell脚本只能在提示符下工作

问用于进行数据库备份的Shell脚本只能在提示符下工作
EN

Stack Overflow用户
提问于 2016-08-29 23:47:54
回答 1查看 114关注 0票数 1

我有一个在命令提示符下运行良好的shell脚本,但在我的cron作业中,它抛出了unexpected operator

代码语言:javascript
复制
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访问脚本

我得到的错误是:

代码语言:javascript
复制
/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

我在Ubuntu14.04上运行的是最新版本的mySQL。有谁知道为什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-30 00:29:24

在没有指定shell的情况下,默认情况下会得到/bin/sh (在Ubuntu 14.04上测试过)。sh的内置[不支持==操作符,因此sh不知道如何比较第20行上的$db和myDBase。

脚本应该始终以"#!“开头。行来指定shell。要获取bash,第一行应该是#!/bin/bash。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39210254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档