Bash脚本无法运行(参数太多)

时间:2020-05-07 20:57:01

标签: bash

#!/bin/bash    
if [ -e *.txt ]                                                                                                         then
            rm *.txt
            echo "removing previous files"
    else
            echo "files already deleted"
    fi

如果我有多个txt文件,我正在尝试删除当前目录中的所有txt文件,但出现错误。不太清楚发生了什么。

2 个答案:

答案 0 :(得分:3)

例如,如果您有两个文件1.txt和2.txt,则您的代码基本上会导致:

if [ -e 1.txt 2.txt ]
…

这只会引发语法错误,因为-e需要一个参数。

您可以依靠某些CLI工具,例如find,但也许您一开始就不需要if

类似于:

rm -f *.txt

为避免在没有*.txt文件的情况下失败,

否则:

rm -f -v *.txt

如果您还想获取一些已删除文件的日志。

答案 1 :(得分:1)

保持if ... fi逻辑,这里不需要进行-e测试。 Unix utils本身被设计为返回退出代码,在这种情况下,测试rm本身的结果更简单:

if rm *.txt 2> /dev/null
then
    echo "removing previous files"
else
    echo "files already deleted"
fi

但是即使不需要,也请注意可以进行单独的测试,如下所示:

if [ "$(ls *.txt)" ]

...或者使用纯bash,(不需要像ls这样的外部实用程序),如果我们暂时将 nullglob 选项设置为

if (shopt -s nullglob; [ "$(echo *.txt)" ])
相关问题