フォルダーの内容を tar し、そのファイルをバックアップ サーバーに移動する簡単なバックアップ スクリプトを作成しています。スクリプトは、移動する前に tar ファイルが存在し、0 バイトではないことを確認します。
問題は、スクリプトがIF行の1つで停止していることです。
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 シェルで発生します。 文 が見つかります[ -f www/archives/pdf/pdf_201207021048.tar
。 文は があるために終了し&&
、次に のように見える別の文 (これに到達するとエラーが発生します) があり11294720 -gt 0 ]
、その文は で終了します;
。