簡體   English   中英

將腳本從Unix移動到linux bash

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM