shell 備份腳本,缺少`]`

shell 備份腳本,缺少`]`

我正在編寫一個簡單的備份腳本,它將壓縮資料夾的內容,然後將該檔案移至備份伺服器。該腳本在移動之前確保 tar 檔案存在並且不為零位元組。

問題是腳本在其中一條 IF 行上終止

if [ -f /www/archives/pdf/pdf_201207021048.tar && 11294720 -gt 0 ]; then
    echo "tar file exists and is greater than 0 bytes."
else
    echo "tar file does not exist or is zero bytes"
fi

控制台中的錯誤是:

./backup_pdf.sh: line 49: [: missing `]'

第49行是上面的if語句。

該腳本已成功驗證

sh -n backup.sh

sh看到缺少“]”,但它通過了語法檢查,這是怎麼回事?

答案1

問題是&&不是 的有效運算子[。它需要-a改為 或[ condition ] && [ other_condition ]

&&是一個分隔器(如;||&\n)在 posix shell 中。它看到了聲明[ -f www/archives/pdf/pdf_201207021048.tar;該語句結束是因為有一個&&,然後還有另一個語句(如果到達它也會導致錯誤),看起來像11294720 -gt 0 ],並且該語句以 終止;

相關內容