为什么 bash 脚本会创建一个以我的某个变量名为名的文件?

为什么 bash 脚本会创建一个以我的某个变量名为名的文件?

我正在使用这个 bash 脚本来维护我的服务器的 3 个备份。由于某种原因,它随机创建一个空文件,其名称为我的变量之一。它选择的变量名称似乎是随机的,并且它不会在每次运行时创建文件。

我正在运行 Ubuntu Server 16.04LTS

该脚本按照预期完美运行。我只是想知道为什么 bash 有时会创建该文件。

注意:我省略了一些敏感信息,例如 Samba 地址和 CIFS 凭据的位置。这是故意的,并且在我的实际脚本中是正确的。

我使用命令从 cron 作业运行此脚本bash backup.bash,因此明确使用 bash 来运行该脚本

#!/bin/bash

## The number of backups that we want to keep
MAX_BACKUPS=3

## The directory to store the backups
BACKUP_DIR="OMITTED"

## The address of the Samba Share
REMOTE_ADDR="OMITTED"

## What we want to name the backup
BACKUP_NAME="$(date +"%m_%d_%Y")_backup.tar.gz"

## Mount the Samba Share to the backup directory
mount -t cifs -o credentials=OMITTED,noperm $REMOTE_ADDR $BACKUP_DIR

## Make todays backup
tar -cpzvf $BACKUP_DIR/$BACKUP_NAME --exclude-from=/backup_scripts/backup.exclude /

## The number of backups that we now have
COUNT="$(find $BACKUP_DIR -maxdepth 1 -type f -name '*_backup.tar.gz' | wc -l )"

## If we have more backups than MAX_BACKUPS
if ((COUNT > MAX_BACKUPS)); then
  ## Delete the oldest file (DETERMINED BY MODIFICATION DATE)
  cd $BACKUP_DIR
  rm "$(ls -t | tail -1)"
fi

# Unmount the Samba Share for safety
umount $BACKUP_DIR

答案1

编辑:正如 @StéphaneChazelas 指出的那样,问题可能是您的脚本没有被调用bash,并且该(( ))构造将无法工作。尝试从bashshell 或使用bash my_script.sh

而且,这也rm有可能会严重失败。请阅读这个常见问题解答

相关内容