![为什么 bash 脚本会创建一个以我的某个变量名为名的文件?](https://linux22.com/image/123773/%E4%B8%BA%E4%BB%80%E4%B9%88%20bash%20%E8%84%9A%E6%9C%AC%E4%BC%9A%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E4%BB%A5%E6%88%91%E7%9A%84%E6%9F%90%E4%B8%AA%E5%8F%98%E9%87%8F%E5%90%8D%E4%B8%BA%E5%90%8D%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我正在使用这个 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
,并且该(( ))
构造将无法工作。尝试从bash
shell 或使用bash my_script.sh
而且,这也rm
有可能会严重失败。请阅读这个常见问题解答。