如何在Bash中使用'*'通配符检查参数相等性?

时间:2019-06-23 07:44:03

标签: linux bash shell glob

我是bash脚本的新手,我正在编写一个脚本来自动使新创建的.sh文件可执行。因此,我想检查.sh是否前面有唯一提供的参数,以确保文件名有效。

但是,运行[: too many arguments时出现./createExecutableScript.sh asd.sh错误。

最初,我以为是因为$1未被包裹在"中导致了错误,所以在其中添加了" s。

我也提到了这个问题 (Linux Shell Script - String Comparison with wildcards),并在*之外添加了"

#!/bin/bash

if [ "$#" -eq 1 ] && [ "$1" == *".sh" ]
then
    echo "Creating file with name: $1"
else
    echo "Invalid or missing filename!"
fi

2 个答案:

答案 0 :(得分:1)

Linux Shell Script - String Comparison with wildcards中的答案是正确的,您需要像这样使用双括号:

#!/bin/bash

if [ "$#" -eq 1 ] && [[ "$1" == *".sh" ]]
then
    echo "Creating file with name: $1"
else
    echo "Invalid or missing filename!"
fi

答案 1 :(得分:-1)

因此没有变量1。您可以执行类似a=$1的操作,然后将$a放在if语句中。您需要的是$($1)而不是$1