我有一个在命令提示符下运行良好的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我在Ubuntu14.04上运行的是最新版本的mySQL。有谁知道为什么吗?
发布于 2016-08-30 00:29:24
在没有指定shell的情况下,默认情况下会得到/bin/sh (在Ubuntu 14.04上测试过)。sh的内置[不支持==操作符,因此sh不知道如何比较第20行上的$db和myDBase。
脚本应该始终以"#!“开头。行来指定shell。要获取bash,第一行应该是#!/bin/bash。
https://stackoverflow.com/questions/39210254
复制相似问题