1

我想查找 FileName_trojan.sh、FileName_virus.sh、FileName_worm.sh 类型的所有文件。如果找到任何此类文件,则显示一条消息。

这里 FileName 是传递给脚本的参数。

#!/bin/bash
file=$1
if [ -e "$file""_"{trojan,virus,worm}".sh" ]
then
echo 'malware detected'

我尝试使用大括号扩展,但它不起作用。我收到错误“参数太多”我该如何解决?我可以只使用 OR 条件吗?

此外,这不起作用 -

-e "$file""_trojan.sh" -o "$file""_worm.sh" -o "$file""_virus.sh"
4

2 回答 2

2

-e运算符只能接受一个参数;大括号扩展在将参数传递给 之前被扩展-e,因此有两个额外的参数。您可以使用循环:

for t in trojan virus worm; do
    if [ -e "{$file}_$t.sh" ]; then
        echo "malware detected"
    fi
do

或者正如马克在我完成输入之前建议的那样:

for f in "${file}_"{trojan,virus,worm}.sh; do
    if [ -e "$f" ]; then
        echo "malware detected"
    fi
done
于 2013-08-01T20:49:33.100 回答
1

问题不在于扩展,它工作正常。问题在于-e测试:它只需要一个参数,而不是三个。

可能的解决方法:

i=0
for f in "$1"_{trojan,virus,worm}.sh ; do
    [ -e "$f" ] && (( i++ ))
done
if ((i)) ; then
    echo Malware detected.
fi
于 2013-08-01T20:49:21.373 回答