[英]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.