[英]moving script from unix to linux bash
我有一个脚本,该脚本正在从Solaris 11.3环境迁移到Oracle Linux 6.9(用于导出数据库)。 更新各种变量和路径后,脚本会正常运行(只有一节除外)。
应该做的是检查目标目录中是否有其他导出,并删除超出指定的保留设置(在本例中为1)的那些目录。 脚本的“清理”部分运行时,可以正确识别文件,但不能删除文件,表明“预期二进制运算符”。
以下是脚本中无法正常运行的部分:
FILE_MASK="${ORACLE_SID}_*.dmp.gz"
counter=0
if [[ -f ${EXP_DIR}/${FILE_MASK} ]]; then
#
# count the files (don't use ls command because it has a limit)
#
for CNT in $EXP_DIR/$FILE_MASK
do
counter=`expr $counter + 1`
done
count=`expr $counter - $KEEP_FILES + 1`
#
counter=0
for I in $EXP_DIR/$FILE_MASK
do
counter=`expr $counter + 1`
FILE_NAME=`basename $I`
echo "${JOBNAME_SHORT}: File = ${EXP_DIR}/${FILE_NAME}"
if [[ ${counter} -lt ${count} ]] ; then
echo "${JOBNAME_SHORT}: Removing file."
rm ${EXP_DIR}/${FILE_NAME}
fi
done
返回的错误是:
/home/oracle/scripts/oraexpdp.sh:第241行:[:/u07/exports/xxxxxxxx/xxxxxxxx_2018111413.dmp.gz:预期为二进制运算符
脚本的第241行是上面以“ if”开头的行。
在搜索修复程序时,曾提到将bash与双括号([[]])一起使用,但仍返回相同的错误。 我需要调整什么才能使其正常工作?
非常感谢!
哈维
由于通配符bash替换, [[ -f ${EXP_DIR}/${FILE_MASK} ]]
将给出一组文件,因此不会评估文件是否存在。
在没有匹配文件的情况下, ${EXP_DIR}/${FILE_MASK}
将仍然是通配符字符串。
假设KEEP_FILES
始终为1或更大,您可能只需删除if [[ -f ${EXP_DIR}/${FILE_MASK} ]]
就像没有文件的情况一样,它不会删除任何内容,因为那样会只是通配符名称,
如果是多个文件,它将表现正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.