我正在編寫一個簡單的備份腳本,它將壓縮資料夾的內容,然後將該檔案移至備份伺服器。該腳本在移動之前確保 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 ]
,並且該語句以 終止;
。