3

Ubuntu サーバーがバックアップを管理するのに役立つ簡単なスクリプトを作成しています。x 時間ごとにローカル マシンからドキュメントを圧縮し、scp でバックアップ マシンに転送します。バックアップ ディレクトリに保存できる最大量のバックアップが必要です。バックアップの最大量に達した場合に古いバックアップを削除するスクリプトを作成しています。スクリプトを実行すると、MAX_backups というファイルが生成されます。このファイルが作成される理由はありますか? 私は bash プログラミングに関しては経験がありませんが、どんな助けでも大歓迎です。ありがとう。

#!/bin/bash

backup_count=$(ls ~/backup | wc -w)

MAX_backups='750'

extra_count=$((backup_count - MAX_backups))

if [ backup_count > MAX_backups ]
then
        for ((i=0; i <= extra_count; i++))
        do
                file=$(ls ~/backup -t -r -1 | head --lines 1)
                rm ~/backup/"$file"
        done
fi
4

2 に答える 2

7
if [ backup_count > MAX_backups ]

>、ファイルのリダイレクトとして解釈されています。次のいずれかを試してください。

# ((...)) is best for arithmetic comparisons. It is parsed specially by the shell and so a
# raw `>` is fine, unlike within `[ ... ]` which does not get special parsing.
if (( backup_count > MAX_backups ))

# [[ ... ]] is a smarter, fancier improvement over single brackets. The arithmetic operator
# is `-gt`, not `>`.
if [[ $backup_count -gt $MAX_backups ]]

# [ ... ] is the oldest, though most portable, syntax. Avoid it in new bash scripts as you
# have to worry about properly quoting variables, among other annoyances.
if [ "$backup_count" -gt "$MAX_backups" ]
于 2012-09-01T06:16:30.560 に答える
0

ファイルが作成される理由はわかりませんが、あなたのバージョンの 'test' (if ステートメントのブラケット演算子) がこのファイルを作成すると思います。比較は次のように変更する必要があると思います

if [ $backup_count -gt $MAX_backups ]

編集:もちろん!ファイルのリダイレクトに失敗しました。これがファイルが作成される理由です。

于 2012-09-01T06:25:42.533 に答える