#!/bin/bash
if [ -e *.txt ] then
rm *.txt
echo "removing previous files"
else
echo "files already deleted"
fi
我正在尝试删除当前目录中的所有txt文件,如果我有一个以上的txt文件,我会出错。不太确定发生了什么。
如果你有两个文件1.txt和2.txt,你的代码基本上会导致:
if [ -e 1.txt 2.txt ]
…
这只会引发语法错误,因为-e
需要一个单独的参数。
您可以依赖一些CLI工具,如find
,但也许您一开始就不需要if
?
也就是说:
rm -f *.txt
为了避免在没有*.txt
文件的情况下失败,
否则:
rm -f -v *.txt
如果您还想获取一些已删除文件的日志。
保留if ... fi
逻辑,这里不需要-e
测试。Unix实用程序本身被设计为返回退出代码,在这种情况下,测试rm
本身的结果更简单:
if rm *.txt 2> /dev/null
then
echo "removing previous files"
else
echo "files already deleted"
fi
但是,即使不需要,也要注意,可以进行单独的测试来这样工作:
if [ "$(ls *.txt)" ]
或者在纯bash
中(不需要像ls
这样的外部util(,如果我们临时设置nullglob选项:
if (shopt -s nullglob; [ "$(echo *.txt)" ])